Socket.io: 如何清理房间?

创建于 2017-08-29  ·  5评论  ·  资料来源: socketio/socket.io

像 io.to("chat").clear() ,房间“chat”中的所有socket都会离开

最有用的评论

我投票添加。 room.kick() 函数,您可以在其中传入特定的 id、数组或“ALL”以删除所有人

所有5条评论

@wendux房间是自动创建和删除的。 这意味着当房间是空的时,没有更多的客户留在上面,它将被删除。
您可以这样做以从房间中删除所有客户端:

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

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

});

https://socket.io/docs/server-api/#namespace -clients-callback

要完成@rllalloshi的回答,在多服务器配置中,您应该使用适配器的removeLeave方法:

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

  socketIds.forEach(socketId => io.of('/').adapter.remoteLeave(socketId, 'chat'));

});

参考

@wendux房间是自动创建和删除的。 这意味着当房间是空的时,没有更多的客户留在上面,它将被删除。
您可以这样做以从房间中删除所有客户端:

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

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

});

https://socket.io/docs/server-api/#namespace -clients-callback

它在 socket.io 2.2.0 中不起作用

为什么没有简单的调用从房间中删除所有套接字? 这是一个非常常见的用例

我投票添加。 room.kick() 函数,您可以在其中传入特定的 id、数组或“ALL”以删除所有人

此页面是否有帮助?
0 / 5 - 0 等级