「メッセージ」のリスナーにRedisのを削除する方法(ワン例えばhttps://github.com/emrahayanoglu/Socket.io-Redis-RealTime-Chat-Example/blob/master/chatServer.jsを参照してください):典型的なRedisのはこのような何かを行く例をチャット
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(...)
機能がないということです。では、どのようにして、赤いメッセージのリスナーをアンバインド/サブスクリプション/削除/削除するのですか?
注:redis1.end()を実行するだけでは、他のWebソケット接続されたユーザーの再接続が切断されることはありません。
Redisのクライアントである[持つEventEmitter](http://nodejs.org/api/events.html#events_class_events_eventemitter)、 'on'の方法を持っているこれはただであります'addListener'のエイリアスと' removeListener'という逆のことです。したがって、 'removeListener'を使っている間も、' on'を使い続けることができます。 –
私のような、これを見逃してポイントを逃した人のために、removeListenerは実際にそのバインディングをクリアするだけでなく、FUNCTIONを削除しています。I.E. 'removeListener( 'message'、callback)'は 'message'バインディングから 'callback'関数を削除しています。つまり、匿名関数 'redis1.addListener( 'message'、function(c、m){..}}を使用している場合、リスナーを削除する方法はなく、再送信はデッドソケットにパブリッシュされ続けます – TheRightChoyce
@ Thechoyceあなたのコメントは私に答えより多くの情報を与えます! – laike9m