如何在Socket.IO中一次性离开套接字连接的所有房间[关闭]

Posted

技术标签:

【中文标题】如何在Socket.IO中一次性离开套接字连接的所有房间[关闭]【英文标题】:How to leave all rooms that the socket is connected to at one go in Socket.IO [closed] 【发布时间】:2012-06-09 09:20:25 【问题描述】:

我有一些代码用来连接多个房间。在代码中的某个时刻,我想一次离开所有房间,而不断开插座。是否有可能做到这一点?如果是,那么我该怎么做?提前谢谢..

我正在使用 socket.IO

【问题讨论】:

@Poelinca Dorin 请重新打开 【参考方案1】:

这是可能的。您可以在不断开插座的情况下离开房间。仅当您调用 socket.disconnect() 时,套接字才会断开连接。

为此,您必须维护每个客户加入和离开的房间列表。要离开所有房间,请遍历此列表并调用 socket.leave(roomname);

【讨论】:

那真是太棒了.. 当我试图离开一个套接字未早先加入的房间时,是否有可能出现异常? 我所指的版本 0.8.7 仅考虑套接字离开现有房间的情况。如果房间不存在,则什么都不做,甚至没有例外。 您不需要维护房间列表,socket.io 会为您完成。只需遍历io.sockets.manager.roomClients[socket.id]socket.leave 的键即可。 对于单个套接字,其socket.rooms @Druska io.sockets.adapter.sids[socket.id] 是查找房间的更新版本。下面的代码离开插座的所有房间。 var rooms = io.sockets.adapter.sids[socket.id]; for(var room in rooms) socket.leave(room);

以上是关于如何在Socket.IO中一次性离开套接字连接的所有房间[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 如何判断某人何时离开

一次与两个用户随机聊天(Socket.io)

socket.io 服务器在注册客户端断开连接时非常延迟

如何在 Express 4 路由中使用 socket.io 向连接的套接字发出事件?

使用 Socket.IO 可以多久发送一次数据?

Socket.io:如何正确加入和离开房间