Socket.io 插座后手动离开房间。断开()

Socket.io 插座后手动离开房间。断开(),socket.io,Socket.io,我在socketio维基上看到了这一点 请注意,在调用过程中不必调用socket.leave() 断开事件。这将自动发生。空房间将被关闭 自动修剪,因此无需手动删除它们 但经过一些测试,它不起作用。断开(服务器端或客户端)连接后,插座不会从他的房间中取出。所以我的问题是,前面的文本是否仍然相关?因为要么我的代码有问题,要么维基没有更新 我试图检查socketio代码内部以检查这一点,但我无法跟踪代码以查看发生了什么 如果文本仍然相关,在我们放入on(“断开”)事件中的代码之后或之前,房间何时离开

我在socketio维基上看到了这一点

请注意,在调用过程中不必调用socket.leave() 断开事件。这将自动发生。空房间将被关闭 自动修剪,因此无需手动删除它们

但经过一些测试,它不起作用。断开(服务器端或客户端)连接后,插座不会从他的房间中取出。所以我的问题是,前面的文本是否仍然相关?因为要么我的代码有问题,要么维基没有更新

我试图检查socketio代码内部以检查这一点,但我无法跟踪代码以查看发生了什么

如果文本仍然相关,在我们放入on(“断开”)事件中的代码之后或之前,房间何时离开


谢谢。

您可以随时删除包含套接字的
socket.namespace.manager.rooms
下的条目

socket.join(socket.id);
console.log(socket.namespace.manager.rooms['/'+socket.id]);
socket.namespace.manager.rooms["/"+socket.id].splice(socket.namespace.manager.rooms["/"+socket.id].indexOf(socket.id),1);
console.log(socket.namespace.manager.rooms['/'+socket.id]);
这是回报

[ '36_IcxqkWgBgLfC6p3Yj' ]
[]

我同意,这就是我所做的,但在断开连接后房间不会自动离开是正常的吗?您如何检查房间中是否有套接字?此.io.of(mynamespace).clients(myroom).length(如果1个套接字仍然连接,如果0个套接字已被删除/这是否错误?),或
socket.namespace.manager.rooms['/'+socket.id].length