【发布时间】:2012-07-22 00:00:44
【问题描述】:
一个典型的 Redis 聊天示例将是这样的(参见 https://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.js 仅一个这样的示例):
io.sockets.on('connection', function (client) { //websocket connection
redis1.subscribe("chat");
redis1.on("message", function(channel, message) {
console.log(message);
client.send(message);
});
client.on('message', function(msg) {
redis2.publish("chat",msg.message);
});
client.on('disconnect', function() {
redis1.quit();
});
});
但是,这里的问题是,当client '断开'时,redis1.on('message',FUNC(){}) 侦听器仍处于连接状态。控制台将继续打印出message。如果要检查redis1 的事件侦听器,他们仍然会发现匿名函数正在侦听。
问题是没有redis1.off(...) 函数。那么,如何解绑/取消订阅/删除/移除redis消息监听器呢?
注意:不能只做 redis1.end(),因为这会破坏其他 websocket 连接用户的 redis 连接。
【问题讨论】:
标签: node.js websocket redis publish-subscribe