Node.js 如何在'上删除Redis;消息';听众

Node.js 如何在'上删除Redis;消息';听众,node.js,websocket,redis,publish-subscribe,Node.js,Websocket,Redis,Publish Subscribe,一个典型的Redis聊天示例如下所示(请参阅其中一个示例): 但是,这里的问题是,当客户机断开连接时,redis1.on('message',FUNC(){})侦听器仍然连接。控制台将继续打印消息。如果要检查redis1的事件列表器,他们仍然会发现匿名函数正在监听 问题是没有redis1.off(…)函数。那么,如何解除绑定/取消订阅/删除/删除redis消息侦听器 注意:不能只执行redis1.end(),因为这将断开与其他websocket连接的用户的redis连接。我在节点REPL中找到的

一个典型的Redis聊天示例如下所示(请参阅其中一个示例):

但是,这里的问题是,当
客户机
断开连接时,
redis1.on('message',FUNC(){})
侦听器仍然连接。控制台将继续打印
消息
。如果要检查redis1的事件列表器,他们仍然会发现匿名函数正在监听

问题是没有
redis1.off(…)
函数。那么,如何解除绑定/取消订阅/删除/删除redis消息侦听器


注意:不能只执行redis1.end(),因为这将断开与其他websocket连接的用户的redis连接。

我在节点REPL中找到的唯一解决方案是不使用
redis.on()
函数进行订阅。相反,应该使用
redis.addListener()
redis.removeListener()
函数。此外,不能将匿名函数用作事件回调。 我们可以这样做:

var callback = function(channel, message){

};

redis1.addListener('message', callback);

client.on('disconnect', function(){
  redis1.removeListener('message', callback);    
})

redis客户端是一个,它有一个
on
方法,它只是
addListener
的别名,而
removeListener
则相反。因此,您可以继续在上使用
,同时仍然使用
removeListener
。对于像我这样略过这一点却没有抓住要点的人来说:removeListener实际上是在删除函数,而不仅仅是清除绑定。。例如,
removeListener('message',callback)
正在从'message'绑定中删除'callback'函数。这意味着,如果您使用的是匿名函数redis1.addListener('message',函数(c,m){..}
,则无法删除该侦听器,redis将继续发布到deadsockets@Thechoyce你的评论给了我比答案更多的信息!@TheRightChoyce,哇,谢谢!
var callback = function(channel, message){

};

redis1.addListener('message', callback);

client.on('disconnect', function(){
  redis1.removeListener('message', callback);    
})