如何删除socket.io中的房间

时间:2014-04-28 13:27:29

标签: node.js socket.io

我想静静地删除房间中的所有用户,有效地删除该房间。这个想法是将来可能会再次创建另一个具有相同名称的房间,但我希望它创建为空(没有前一个房间的监听器)。

我对自己管理房间状态不感兴趣,但我很好奇,好像我可以利用socket.io内部来做这件事。这可能吗? (另见this question

3 个答案:

答案 0 :(得分:14)

这就是你想要的吗?

io.sockets.clients(someRoom).forEach(function(s){
    s.leave(someRoom);
});

答案 1 :(得分:2)

要获得此问题的最新答案,每个想要删除房间的人都可以使用Namespace.clients(cb)cb回调将收到一个错误对象作为第一个参数(null如果没有错误)和一个套接字ID列表作为第二个参数。

它应该可以与socket.io v2.1.0一起使用,不确定哪个版本是最早的兼容版本。

io.of('/').in('chat').clients((error, socketIds) => {
  if (error) throw error;

  socketIds.forEach(socketId => io.sockets.sockets[socketId].leave('chat'));

});

@See https://github.com/socketio/socket.io/issues/3042
@See https://socket.io/docs/server-api/#namespace-clients-callback

答案 2 :(得分:1)

另外,值得一提的是...

断开连接后,插座将离开它们所属的所有通道 自动操作,不需要您进行任何特殊拆卸。

https://socket.io/docs/rooms-and-namespaces/(断开连接)

相关问题