私は node.js と socket.io を使用して、ユーザーが個人のチャット ルームで互いに会話できるアプリケーションをコーディングしています。誰もが複数のチャット ルームを開くことができます。ユーザーがチャット ルームを終了したい場合、システムはルームのすべてのソケット リスナーを削除する必要があります。
websocket.on('createRoom', function(roomID) {
...
var room = generateRoom();
...
// Leaving room
$('#exitButton').on('click', function() {
// Removes
websocket.removeAllListeners('createRoom');
});
// User joins the room
websocket.on('main/roomJoin/'+roomID, function(username) {
alert(username + ' has joined the room');
});
...
websocket.on('chat/messageReceived/'+roomID, function(message) {
room.printMessage(message);
});
});
問題は、removeAllListeners が内側のリスナーを削除しないことです。そのため、別のユーザーが部屋から出た後に別のユーザーが入室すると、そのユーザーはアラートを受け取ります。
これを行う別の方法は、リスナーを屋外に配置することですが、複数の部屋を管理するのは困難です。
ありがとう。