Ein typisches Redis Beispiel so etwas wie dies gehen Chat zu entfernen (siehe https://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.js nur ein solches Beispiel für):Wie Redis auf ‚message‘ Zuhörer
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 hier das Problem ist, dass, wenn ein client
' disconnect ', der redis1.on('message',FUNC(){})
Listener ist immer noch angeschlossen. Die Konsole wird weiterhin message
ausdrucken. Wenn man die Ereignislistener von redis1
inspizieren würde, würden sie immer noch die anonyme Funktion hören.
Das Problem ist, dass es keine redis1.off(...)
Funktion gibt. Also, wie kann man den Redis Message Listener lösen/entfernen/entfernen/entfernen?
Hinweis: Man kann redis1.end() nicht einfach tun, da dies die Redis-Verbindung für andere Websocket-Benutzer unterbrechen wird.
Der redis Client eine ist [EventEmitter] (http://nodejs.org/api/events.html#events_class_events_eventemitter), die eine 'on' Methode hat, die nur ein Alias für 'addListener' und' removeListener', das ist das Gegenteil. Sie können 'on' also weiter verwenden, während Sie' removeListener' verwenden. –
Für jeden wie mich, der dies nur überflogen hat und den Punkt verfehlt hat: Der removeListener entfernt tatsächlich die FUNKTION, nicht nur das Löschen der Bindung .. I.E. 'removeListener ('message', callback)' entfernt die 'callback' Funktion von der 'message' Bindung. Wenn Sie eine anonyme Funktion 'redis1.addListener ('Nachricht', Funktion (c, m) {..} ') verwenden, haben Sie keine Möglichkeit, den Listener zu entfernen, und redis wird weiterhin in leeren Sockets publizieren. – TheRightChoyce
@ Thechoyce Dein Kommentar gibt mir mehr Informationen als die Antwort! – laike9m