我是 redis pub/sub 的新手。我在系统中有一个聊天工具,就像 IM。所以我想使用redis pub/sub。正如我检查过的样本,它们中的大多数都是基于聊天室设计的。在我的系统中,我将在用户之间有多个聊天室,例如;
A:B
A:C
D:C
E:F
所以,上面的线是房间。我已经用 node.js 实现了服务器,如下所示;
var store = redis.createClient();
var pub = redis.createClient();
io.sockets.on('connection', function (socket) {
var sub = redis.createClient();
sub.on("message", function(pattern, data){
data = JSON.parse(data);
socket.send(JSON.stringify({ type: "chat", key: pattern, nick: data.nickname, message: data.text }))
}
});
socket.on('message', function (messageData) {
store.incr("messageNextId", function(e, messageId) {
var room = ""
var from = messageData.clientId > socket.nickname ? socket.nickname : messageData.clientId;
var to = messageData.clientId < socket.nickname ? socket.nickname : messageData.clientId;
room = from + ":" + to;
var message = { id: messageId, nickname: socket.nickname, text: messageData.text };
store.rpush("rooms:" + room, JSON.stringify(message), function(e, r) {
pub.publish(room, JSON.stringify(message))
});
});
});
如您所见,我正在为每个连接创建一个新的 redis 订阅者。在其他聊天室示例中,redis 订阅者客户端是全局创建的。并且始终只存在三个连接,这解决了他们的问题,因为当发布者发布消息时,所有连接的客户端都应该得到它。但我在这里有一个限制。我想在两个用户之间打开一个聊天会话,只有这些用户应该是订阅者。上面的代码可以按我的意愿工作,但我不知道 redis 是否可以为每个连接创建一个新的订阅者客户端。
很高兴听到你的建议。提前致谢。