Node.js和Socket.IO - 房间问题

Gab*_*ray 7 javascript node.js socket.io

考虑多聊天应用程序.用户可以加入多个房间(socket.join(room)),用户可以离开房间(socket.leave(room)).

当插座离开房间时,我通知其他房间的参与者.如果套接字当前在3个房间,并且他突然断开网站而没有正确地离开房间,我怎么能通知那些用户已经离开的房间?

如果我使用on socket disconnect事件,用户将不再在任何房间.保持一个单独的用户数组的唯一方法,还是有一些我没想过的聪明方法?

Loo*_*urr 5

在断开连接事件期间,套接字仍可供您的进程使用.例如,这应该工作

io.socket.on('connection', function(socket){
    socket.on('disconnect', function() {
       // this returns a list of all rooms this user is in
       var rooms = io.sockets.manager.roomClients[socket.id];
       for(var room in rooms) {
           socket.leave(room);
       }
    });
});
Run Code Online (Sandbox Code Playgroud)

虽然这实际上并不是必需的,因为socket.io会在断开事件时自动修剪房间.但是,如果您要执行特定操作,则可以使用此方法.