Как удалить Redis для прослушивателей сообщений

Типичный пример чата 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 (), так как это нарушит соединение redis для других пользователей, подключенных к веб-сокету.

17
задан hrdwdmrbl 23 July 2012 в 17:53
поделиться