2011-12-17 32 views
7

Tengo una página en la que los usuarios se conectan a mi servidor de nodo con socket.io pero solo les permite tener una conexión socket.io abierta al servidor (al pasar su identificación de cuenta al autorizarlos y almacenarla en una matriz) y esto funciona bien el 99% del tiempo. El problema es que, a veces, cuando los usuarios se desconectan, el evento de desconexión del servidor no se dispara por algún motivo, por lo que no puedo borrar su cuenta de la matriz de clientes, lo que termina bloqueado.¿Cómo verificar si el socket todavía está conectado?

¿Hay alguna manera de comprobar si su conexión de socket anterior (que tengo la ID de) todavía está activa? (Entonces, si no es así, puedo borrar su conexión anterior y volver a conectar)

+0

encontró la solución para esto Matt? – SatheeshJM

Respuesta

4

Asegúrese de que los latidos estén configurados en verdadero (valor predeterminado). Si el tiempo de espera expira, la desconexión debería suceder automáticamente. Sin embargo, hubo un informe de error acerca de los latidos del corazón que no funcionaba. Asegúrate de tener la última versión de Socket.IO (no estoy seguro del estado del error).

Si aún necesita ayuda, puede enviar un ping a la antigua conexión cuando el usuario intenta volver a conectarse:

emitirá un 'ping' desde el servidor, y responder con 'pong' desde el cliente si el la conexión aún está viva. Si el ping expira (por ejemplo, 20 segundos), suelte la conexión manualmente para que el usuario pueda volver a conectarse. Podría usar el ping para notificar al cliente original que otro cliente está tratando de conectarse, y aumentar la UI para ese efecto.

Cuestiones relacionadas