rooms - forzar la desconexión del cliente del servidor con socket.io y nodejs
socket.io-client angular (12)
¿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 el cliente:
socket.emit(''forceDisconnect'');
En el servidor:
socket.on(''forceDisconnect'', function(){
socket.disconnect();
});
¿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 voy a hacer eso?
Agregue nuevas conexiones de socket a una matriz y luego cuando desee cerrar all-loop y desconecte. (lado del servidor)
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();
});
Asumiendo el socket con nombre de su socket, use:
socket.disconnect()
En mi caso, quería derribar la conexión subyacente, en cuyo caso tuve que llamar a socket.disconnect(true)
como puede ver es necesario desde la fuente aquí
Esto no funcionó para mí:
`socket.disconnect()`
Esto funcionó para mí:
socket.disconnect(true)
La entrega de true
cerrará la conexión subyacente al cliente y no solo el espacio de nombre al que el cliente está conectado a Socket IO Documentation .
Un caso de uso de ejemplo: el cliente se conectó al servidor de socket web con token de acceso no válido (token de acceso entregado 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:
// (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'');
// });
Estoy usando en el lado del cliente socket.disconnect();
client.emit(''disconnect'') didnt work for me
Estoy utilizando client.emit(''disconnect'')
+ client.removeAllListeners()
para el cliente conectado para ignorar todos los eventos después de la desconexión
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 :)
Socket.io utiliza el patrón EventEmitter para desconectar / conectar / verificar los latidos del corazón para que pueda hacerlo. Client.emit(''disconnect'');
client._onDisconnect()
debería funcionar
socket.disconnect()
se puede usar 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 el cliente. El cliente no tiene conocimiento de la desconexión.
Entonces, la pregunta sigue siendo: ¿cómo obligar a un cliente a desconectarse del lado del servidor?
Editar: Esto ahora es posible
Ahora puede simplemente llamar a socket.disconnect()
en el lado del servidor .
Mi respuesta original:
Esto no es posible todavía
Si lo necesita también, vote / comente sobre este tema .