tutorial specific socket rooms example javascript node.js express socket.io

javascript - specific - Node.js: socket.io cierra la conexión del cliente



socket.io client example (7)

¿Cómo puedo cerrar la conexión de socket en el lado del cliente?

Estoy usando:

  • socket.io 0.9
  • node.js 0.10.15
  • express 3.3.4

es decir: llamada localhost/test
-- lado del servidor

var test = io .of(''/test'') .on(''connection'', function (socket) { console.log(''open socket: '' + socket); socket.on(''disconnect'', function () { console.log(''disconnected event''); //socket.manager.onClientDisconnect(socket.id); --> endless loop with this disconnect event on server side //socket.disconnect(); --> same here }); });

-- lado del cliente

var socket = io.connect(''http://localhost:3000/test''); socket.on(''disconnect'', function () { console.log(''disconnect client event....''); }); socket.emit(''getInitData'', function (data) { .. do something with data });

Si cargo la página de prueba, necesito algunos valores del servidor (getInitData).
En la primera página, visito los datos una vez, en una recarga o en una segunda visita, los obtengo dos veces, y así sucesivamente.

La conexión en el lado del servidor se cierra automáticamente al cargar la página y si abandona la página.
Pero en el lado del cliente, la conexión aún está abierta.
¿Cómo puedo cerrar la conexión en el lado del cliente o verificar si ya hay una conexión abierta?

ACTUALIZAR
Intenté ahora lo siguiente: (lado del cliente)

window.onbeforeunload = function(e) { socket.disconnect(); };

Esto desencadena en el lado del cliente el evento de desconexión, pero todavía recibo la respuesta doble o triple.


Has probado:

socket.disconnect()

en el cliente?


Intento cerrar la conexión de los usuarios en la versión 1.0 y encontré este método:

socket.conn.close()

La diferencia entre este método y desconexión () es que el cliente intentará volver a conectarse al servidor.


No existe tal conexión en el lado del servidor y / o del lado del navegador. Solo hay una conexión Si uno de los lados lo cierra, se cierra (y no se puede enviar datos a una conexión que está cerrada obviamente).

Ahora un navegador cierra la conexión cuando abandona la página (no depende de la biblioteca / idioma / sistema operativo que está utilizando en el lado del servidor). Esto es al menos cierto para WebSockets (puede no ser cierto para largas encuestas debido a keep-alive pero con suerte socket.io maneja esto correctamente).

Si ocurre un problema como este, entonces estoy bastante seguro de que hay un error en tu propio código (en el lado del servidor). Posiblemente estés apilando algunos controladores de eventos donde no deberías.


Para socket.io versión 1.4.5:

En el servidor:

socket.on(''end'', function (){ socket.disconnect(0); });

En el cliente:

var io = io(); io.emit(''end'');


Simplemente pruebe socket.disconnect(true) en el lado del servidor emitiendo cualquier evento desde el lado del cliente.


intente esto para cerrar la conexión:

socket.close();

y si quieres abrirlo de nuevo:

socket.connect();


socket.disconnect()

Solo reinicia el evento de desconexión de activación de la conexión en el lado del cliente. Pero se conecta de nuevo.

socket.close()

Desconecte la conexión del cliente. El cliente seguirá tratando de conectarse.