Socket.io: как очистить комнату?

Созданный на 29 авг. 2017  ·  5Комментарии  ·  Источник: socketio/socket.io

как io.to ("chat"). clear (), все сокеты в комнате "chat" покинут

Самый полезный комментарий

голосую за добавление. room.kick (), где вы можете передать определенный идентификатор, массив или "ВСЕ" для удаления всех

Все 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 (), где вы можете передать определенный идентификатор, массив или "ВСЕ" для удаления всех

Была ли эта страница полезной?
0 / 5 - 0 рейтинги