考虑多聊天应用程序。
用户可以加入多个会议室(socket.join(room)
),用户可以离开会议室(socket.leave(room)
)。
当套接字离开房间时,我通知其他房间参与者。如果套接字当前在3个房间,并且他突然断开网站而没有以正确的方式离开房间,我怎么能通知那些房间用户已离开?
如果我使用on socket disconnect事件,用户将不再在任何房间。保持一个单独的用户数组的唯一方法,还是有一些我没想过的聪明方法?
答案 0 :(得分: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);
}
});
});
虽然这实际上不是必需的,因为socket.io会在断开事件时自动修剪rooms。但是,如果您要执行特定操作,则可以使用此方法。
答案 1 :(得分:0)
我假设套接字是节点进程中的长期存在的对象。如果是这种情况,那么当用户连接时,您可以轻松地在套接字对象上添加对用户的引用。当您获得套接字断开连接时,您不需要查找会话所关联的用户,因为它将在那里。
连接或登录时:
socket.user = yourUser;
断开连接:
socket.on('disconnect', function(){
socket.leave(room, socket.user);
}
请参阅此处以获取向套接字对象和单个房间聊天客户端添加属性的示例:
http://psitsmike.com/2011/09/node-js-and-socket-io-chat-tutorial/