目前我有一个房间的发起者被标记为“主人”。 我需要对其进行设置,以便如果“主持人”点击“关闭房间”链接,它将断开所有用户与该房间 ID 的连接。
我如何从 socket.manager.roomClients
或类似的东西中获取所有用户,遍历所有用户并运行某种类型的 socket.leave( room_id )
如果“主人”的 room_id 与套接字管理器中的键匹配?
感谢任何见解或帮助。如果我需要澄清任何事情,请告诉我。
最佳答案
在 socket.io 中似乎没有这方面的机制,但自己实现它并不难。您只需遍历房间中的每个 socket 并调用 disconnect 方法。理想情况下,这将是一个 io.sockets 级别的方法,但您必须知道套接字正在使用的命名空间,因此我在套接字级别添加了一个原型(prototype)来将每个人引导出房间。请看以下内容:
var sio = require('socket.io');
var io = sio.listen(app);
sio.Socket.prototype.disconnectRoom = function (name) {
var nsp = this.namespace.name
, name = (nsp + '/') + name;
var users = this.manager.rooms[name];
for(var i = 0; i < users.length; i++) {
io.sockets.socket(users[i]).disconnect();
}
return this;
};
您可以如下所示使用它。
socket.on('hostdisconnect', function() {
socket.disconnectRoom('roomName');
});
一个警告,如果你打算使用这样的东西,重要的是要知道它使用的内部数据结构可能会或可能不会出现在下一版本的 socket.io 中。来自 socket.io 的更新可能会破坏此功能。
关于node.js - Socket.IO "Host"断开连接时断开所有房间用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9812940/