Механизм для этого в socket.io отсутствует, но реализовать его самостоятельно не так уж сложно. Вы просто перебираете каждый сокет в комнате и вызываете метод отсоединения. В идеале это будет метод уровня io.sockets, но вы должны знать пространство имен, которое использует сокет, поэтому я добавил прототип на уровне сокета, чтобы загрузить всех из комнаты. Взгляните на следующее:
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 может нарушить эту функцию.