Есть ли способ отключить клиента с SocketIO и буквально закрыть соединение? Итак, если кто-то подключен к моему серверу, и я хочу закрыть соединение между ним и моим сервером, как я могу это сделать?
117
Изменить: теперь это возможно
Теперь вы можете просто позвонить socket.disconnect()
на стороне сервера .
Мой первоначальный ответ:
Пока это невозможно.
Если вам это тоже нужно, проголосуйте / прокомментируйте этот вопрос .
iptables
), тем больше ресурсов вы сэкономите. В большинстве случаев достаточно просто пнуть клиента, так как socketio не подключается так быстро, и если кто-то действительно хочет сделать DoS-атаку на вас, у них все равно есть другие способы (например, загрузка страниц от вас).socket.disconnect()
может использоваться только на стороне клиента, но не на стороне сервера.Client.emit('disconnect')
запускает событие отключения на сервере, но не отключает клиента. Клиент не знает об отключении.Таким образом, остается вопрос: как заставить клиента отключиться от сервера?
источник
Client.emit('disconnect')
последних версиях socket.io вам больше не нужно вызывать вручную, теперь есть серверная частьsocket.disconnect()
(см. Мой ответ).socket.disconnect()
можно использовать и на стороне сервера.disconnect()
функции?Есть ли причина, по которой сервер не может отправлять клиенту сообщение, которое заставляет его вызывать функцию отключения?
На клиенте:
На сервере:
источник
Проверяя сегодня утром, выясняется, что сейчас:
https://socket.io/docs/client-api/#socket-close
источник
Предполагая, что ваш сокет назван socket, используйте:
источник
Для тех, кто нашел это в гугле - прямо сейчас есть решение:
Socket.disconnect()
пинает клиента (на стороне сервера). У клиента нет шансов оставаться на связи :)источник
disconnect
событие сокета, чтобы узнать, отключился ли он. Тоже может бытьclose
событие, я не совсем уверен. См. Документацию socket.io для получения дополнительной информации об этом.В моем случае я хотел разорвать базовое соединение, и в этом случае мне пришлось позвонить,
socket.disconnect(true)
как вы можете видеть, это необходимо из источника здесьисточник
client._onDisconnect()
должно сработатьисточник
Socket.io использует шаблон EventEmitter для отключения / подключения / проверки пульса, чтобы вы могли это сделать.
Client.emit('disconnect');
источник
У меня это не сработало :
Это сработало для меня:
При передаче
true
будет закрыто базовое соединение с клиентом, а не только пространство имен, которое клиент подключен к документации Socket IO .Пример использования: клиент подключился к серверу веб-сокетов с недопустимым токеном доступа (токен доступа передан серверу веб-сокетов с параметрами подключения). Сервер веб-сокетов уведомляет клиента о том, что он собирается закрыть соединение из-за его недопустимого токена доступа:
источник
Я использую
client.emit('disconnect')
+client.removeAllListeners()
для подключенного клиента, чтобы игнорировать все события после отключенияисточник
Я использую на стороне клиента
socket.disconnect();
источник
использование:
не используй :
источник
Вы можете
socket = undefined
стереть, какой сокет вы подключили. Итак, когда вы хотите подключиться, сделайте сокет (url)Так это будет выглядеть так
источник
Добавьте новые соединения сокетов в массив, а затем, когда вы хотите закрыть все - пропустите их и отключите. (на стороне сервера)
источник