Есть ли способ отключить клиент с SocketIO и буквально закрыть соединение? Итак, если кто-то подключен к моему серверу, и я хочу закрыть соединение между ними и моим сервером, как бы я это сделал?
Отключение клиента от сервера с помощью socket.io и nodejs
Ответ 1
Изменить: теперь это возможно
 Теперь вы можете просто вызвать socket.disconnect() на стороне сервера.
Мой оригинальный ответ:
Это еще не возможно.
Если вам это тоже нужно, прокомментируйте эту проблему.
Ответ 2
 socket.disconnect() может использоваться только на стороне клиента, а не на стороне сервера.
 Client.emit('disconnect') запускает событие разъединения на сервере, но фактически не отключает клиента. Клиент не знает об отключении.
Итак, остается вопрос: как заставить клиента отключиться от серверной стороны?
Ответ 3
Любая причина, по которой сервер не может передать сообщение клиенту, который заставляет его вызывать функцию разъединения?
На клиенте:
socket.emit('forceDisconnect');
На сервере:
socket.on('forceDisconnect', function(){
    socket.disconnect();
});
		Ответ 4
Предполагая, что ваш сокет с именем socket, используйте:
socket.disconnect()
		Ответ 5
Для тех, кто нашел это в google - для этого есть решение:
 Socket.disconnect() удаляет клиента (на стороне сервера). Нет шансов, что клиент останется на связи:)
Ответ 6
В моем случае я хотел снести базовое соединение, в котором я должен был позвонить socket.disconnect(true), как вы можете видеть, из источника здесь
Ответ 7
 client._onDisconnect() должен работать
Ответ 8
Socket.io использует шаблон EventEmitter для отключения/подключения/проверки heartbeats, чтобы вы могли это сделать. Client.emit('disconnect');
Ответ 9
Это не сработало для меня:
'socket.disconnect()' 
 Это сработало для меня:
socket.disconnect(true)
  Передача true закроет основополагающее соединение с клиентом, а не только пространство имен, к которому клиент подключен к документации Socket IO.
Пример использования: клиент подключился к серверу веб-сокетов с недействительным токеном доступа (токен доступа был передан серверу веб-сокетов с параметрами соединения). Сервер веб-сокетов уведомляет клиента о том, что он собирается закрыть соединение, из-за его неверного маркера доступа:
// (1) the server code emits
socket.emit('invalidAccessToken', function(data) {
    console.log(data);       // (4) server receives 'invalidAccessTokenEmitReceived' from client
    socket.disconnect(true); // (5) force disconnect client 
});
// (2) the client code listens to event
// client.on('invalidAccessToken', (name, fn) => { 
//     // (3) the client ack emits to server
//     fn('invalidAccessTokenEmitReceived');
// });
		Ответ 10
Я использую client.emit('disconnect') + client.removeAllListeners() для подключенного клиента для игнорирования всех событий после отключения
Ответ 11
Я использую на стороне клиента socket.disconnect();
client.emit('disconnect') didnt work for me
		Ответ 12
использовать:
socket.Disconnect()//нормально
не использовать:
socket.disconnect()
Ответ 13
Проверяя сегодня утром, кажется, что это сейчас:
socket.close()
 		Ответ 14
Добавьте новые соединения сокетов к массиву, а затем, когда вы хотите закрыть все - пропустить их и отключить. (на стороне сервера)
var socketlist = [];
   io.sockets.on('connection', function (socket) {
        socketlist.push(socket);  
        //...other code for connection here..
   });
    //close remote sockets
    socketlist.forEach(function(socket) {        
        socket.disconnect();                      
    });