典型的な Redis チャットの例は次のようになります (そのような例の 1 つだけについては、 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 接続を切断するためです。