我想静静地删除房间中的所有用户,有效地删除该房间。这个想法是将来可能会再次创建另一个具有相同名称的房间,但我希望它创建为空(没有前一个房间的监听器)。
我对自己管理房间状态不感兴趣,但我很好奇,好像我可以利用socket.io内部来做这件事。这可能吗? (另见this question)
答案 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)
另外,值得一提的是...
断开连接后,插座将离开它们所属的所有通道 自动操作,不需要您进行任何特殊拆卸。