So entfernen Sie Redis auf "message", Listener

Einem typischen Redis-chat-Beispiel wird etwa so gehen (siehe https://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.js für nur ein Beispiel):

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();
  });
});

Jedoch, das Problem hier ist, dass, wenn ein client 'trennen', die redis1.on('message',FUNC(){}) Hörer ist noch befestigt. Die Konsole wird weiterhin drucken Sie die message. Wenn man untersuchen den Fall listners von redis1 würde, würden Sie immer noch die anonyme Funktion hören.

Das Problem ist, dass es keine redis1.off(...) Funktion. Also, wie stellt man das trennen/Abmelden/löschen/entfernen Sie die redis message listener?

Hinweis: Man kann nicht nur tun, redis1.Ende(), da brechen die redis-Verbindung für andere websocket verbundenen Benutzer.

InformationsquelleAutor hrdwdmrbl | 2012-07-23
Schreibe einen Kommentar