2012-02-07 39 views
9

Necesito poder detectar cuando un usuario ha perdido la conexión al socket, no parece que se llame a socket.on("disconnect") cuando cierro mi portátil, por lo que no funciona ejecute la llamada ajax que debe ejecutarse para actualizar la base de datos y marcar al usuario como desconectado. ¿Cómo podría verificar si la conexión se ha cerrado o lo que sea?Socket IO detectar cuando el cliente ha perdido la conexión

+0

I propondría que tiene un oyente, o un 'latido del corazón' que comprueba los clientes para una respuesta desde el servidor. Eso es lo que hago. –

+1

Hice esto en una versión anterior de mi sitio web, aunque con suficientes usuarios en un momento dado parece que puede ser una especie de sobrecarga en el servidor, en cuanto al número de solicitudes, aunque puede ser el mejor, y única opción. –

+0

socket.io usa un latido del corazón, así que estoy seguro de que es factible – EhevuTov

Respuesta

2

nos encontramos con esto también y como se mencionó anteriormente utilizar nuestro propio temporizador de latido.

Por ejemplo, el servidor emitirá un latido cada 5 segundos (enviamos simplemente la hora del servidor). El cliente tiene un tiempo de espera de 11 segundos por lo que tiene 2 oportunidades de alcanzar el latido del corazón. Si recibe el latido del corazón, reiniciamos el temporizador. Si extrañamos ambos latidos, se ejecuta la función de tiempo de espera y usted hace lo que quiera allí.

Bastante sencillo.

3

Como se menciona aquí https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO, Socket.IO tiene su propia implementación de latido. Pero los valores predeterminados son un intervalo de 25 segundos y un umbral de 60 segundos para una conexión perdida.

Así que mi consejo: Establezca los valores predeterminados como espera en las pruebas. De lo contrario, puede perder el umbral.

Ejemplo:

socket.set("heartbeat timeout", 10); 
socket.set("heartbeat interval", 5); 
+0

Esta debería ser la respuesta aceptada. Funciona la primera vez ... En mi caso, el tiempo de espera y el intervalo se establecen en milisegundos, por lo que 10000 en lugar de 10 ... ¡Gracias perfectos! –

Cuestiones relacionadas