当前位置: 首页 > 面试题库 >

如何在“消息”侦听器上删除Redis

吴缪文
2023-03-14
问题内容

一个典型的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连接。


问题答案:

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

var callback = function(channel, message){

};

redis1.addListener('message', callback);

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


 类似资料:
  • 我有一个Java程序,它向RabbitMQ发送消息。我只知道交易所的名字。没有队列、绑定等。 我的问题是:我如何才能看到程序是否成功发送这些,只知道交换名称? 谢谢 问候,塞班

  • 我正在使用 发送和 对于现在从rappid mq接收消息,我希望使用类似以下内容的侦听器: 问题是onMessage监听器与Messages一起工作是否有可能在类似的函数中接收简单的可序列化对象?

  • 我有两个屏幕..首先是闪屏,在这里我借助firebase.auth()检查用户是否已经存在。onAuthStateChanged侦听器。如果用户为空,它将转到另一个firebase.auth()的登录屏幕。onAuthStateChanged侦听器用于在电话验证后获取用户,如果用户之前未注册,则将用户移至UserDetails屏幕以获取更多用户信息,或者移至主屏幕..同样的检查也在闪屏上进行,以确

  • 我有一个表,其中有多个表项可用。其中,对于某些表项,设置了背景和前景色。 在选择彩色项目时,由于文本颜色为白色,文本很难阅读,因此,我需要将前面的颜色更改为默认颜色,即黑色。我是用选择侦听器完成的 成功地改变了颜色。 但是现在我正在选择任何其他没有着色的项目,所以我想删除上面的选择侦听器并将文本颜色设置为彩色即白色。我不知道如何使用。 有人能帮忙吗?

  • 问题内容: 我有一个按钮,并添加了一些按钮: 我可以通过以下方式删除它们: 如果我想一次删除所有侦听器,或者没有函数引用()怎么办?有没有办法做到这一点,或者我必须一个一个地删除它们? 问题答案: 我认为最快的方法是克隆节点,这将删除所有事件侦听器: 请注意,因为这也会清除所涉及节点的所有子元素上的事件侦听器,因此,如果要保留该侦听器,则必须一次显式删除一个侦听器。

  • 我正在SWT制作一个组件,它可以监听其他组件中的事件。但是,当该组件被释放时,它仍然注册为侦听器。我想知道当这个组件被释放时,如何自动删除这个监听器。 我的意思是: < code>myDialog同时侦听它自己的按钮和< code>anotherPage中的按钮。如果用户决定释放< code>myDialog(关闭对话框),但它仍然侦听< code>someButton,这是没有意义的。如何在处置