¿Hay alguna forma de desconectar un cliente con SocketIO y, literalmente, cerrar la conexión? Entonces, si alguien está conectado a mi servidor y quiero cerrar la conexión entre ellos y mi servidor, ¿cómo puedo hacerlo?
117
Editar: esto ahora es posible
Ahora puede simplemente llamar socket.disconnect()
en el lado del servidor .
Mi respuesta original:
Esto todavía no es posible.
Si también lo necesita, vote / comente sobre este tema .
iptables
), más recursos ahorrará. Sin embargo, en la mayoría de los casos, basta con patear al cliente, ya que socketio no se conecta tan rápido, y si alguien realmente quiere DoS, tiene otras formas de todos modos (por ejemplo, descargar páginas suyas).socket.disconnect()
solo se puede utilizar en el lado del cliente, no en el lado del servidor.Client.emit('disconnect')
desencadena el evento de desconexión en el servidor, pero no desconecta efectivamente al cliente. El cliente no se da cuenta de la desconexión.Entonces, la pregunta sigue siendo: ¿cómo obligar a un cliente a desconectarse del servidor?
fuente
Client.emit('disconnect')
manualmente con las versiones recientes de socket.io, ahora hay un lado del servidorsocket.disconnect()
(vea mi respuesta).socket.disconnect()
se puede usar en el lado del servidor.disconnect()
función?¿Alguna razón por la que no puede hacer que el servidor emita un mensaje al cliente que lo haga llamar a la función de desconexión?
En cliente:
En el servidor:
fuente
Suponiendo que el socket con nombre de su socket, use:
fuente
Para aquellos que encontraron esto en Google, hay una solución para esto ahora mismo:
Socket.disconnect()
patea al cliente (lado del servidor). No hay posibilidad de que el cliente se mantenga conectado :)fuente
disconnect
evento del socket para averiguar si se ha desconectado. También puede ser elclose
evento, no estoy muy seguro. Consulte la documentación de socket.io para obtener más información al respecto.Verificando esta mañana parece que es ahora:
https://socket.io/docs/client-api/#socket-close
fuente
En mi caso, quería eliminar la conexión subyacente, en cuyo caso tuve que llamar,
socket.disconnect(true)
como puede ver, se necesita de la fuente aquí.fuente
client._onDisconnect()
Deberia trabajarfuente
Socket.io usa el patrón EventEmitter para desconectar / conectar / verificar latidos para que pueda hacerlo.
Client.emit('disconnect');
fuente
Esto no funcionó para mí:
Esto funcionó para mí:
La transferencia
true
cerrará la conexión subyacente con el cliente y no solo el espacio de nombres que el cliente está conectado a la documentación de Socket IO .Un ejemplo de caso de uso: el cliente se conectó al servidor de socket web con un token de acceso no válido (el token de acceso se entregó al servidor de socket web con parámetros de conexión). El servidor de socket web notifica al cliente que va a cerrar la conexión, debido a su token de acceso no válido:
fuente
Estoy usando
client.emit('disconnect')
+client.removeAllListeners()
para el cliente conectado para ignorar todos los eventos después de desconectarfuente
Estoy usando en el lado del cliente
socket.disconnect();
fuente
utilizar :
no utilice :
fuente
Puede
socket = undefined
borrar qué enchufe ha conectado. Entonces, cuando quiera conectarse, haga socket (url)Entonces se verá así
fuente
Agregue nuevas conexiones de socket a una matriz y luego, cuando desee cerrarlas todas, realice un bucle y desconéctelas. (lado del servidor)
fuente