我找到了一些解决方案,但它们似乎过时并且不起作用。
如何检测用户从哪个房间断开连接?
我不知道你所说的房间是什么意思,但如果它是一个聊天应用程序或类似的东西 您可以在首次连接时在套接字对象上创建一个变量,例如 roomID。
io.sockets.on("connection",function(socket){
socket.on("new:user",function(userDATA){
// create variable as roomID on socket.
socket.roomID = userDATA.roomID
});
// other events
socket.on("disconnect",function(data){
var roomID = socket.roomID;
// do what you want to do
});
});
使用socket.io 1.0,您可以使用以下代码来完成此操作:
socket.on('disconnect', function() {
console.log(socket.rooms);
});
它将输出用户加入的房间数组。
请注意,每个套接字都会自动加入一个以该套接字 ID 命名的房间。所以你可能会看到类似的东西
[ 'hIP6r4z8Ym1n5SQUAAAA', 'my_room_name' ]
在您的控制台中。
在版本4及更高版本中,如果您连接到套接字socket io,则会自动创建一个唯一的socketId。 如果您有多个房间,则必须创建 abject 数组并保存房间及其用户(socktIds)。
如果断开您可以在该阵列中轻松找到的插座,那么您就可以找到房间。