一个典型的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
。 如果一个人检查的情况下listners redis1
,他们仍然会发现匿名函数监听。
问题是,有没有redis1.off(...)
函数。 那么,如何解除绑定一个/取消/删除/移除Redis的消息监听器?
注:我们不能只是做redis1.end(),因为这将打破其他的WebSocket连接的用户Redis的连接。