Nodo JS: ¿cómo se puede saber si un socket ya está abierto con el module de socket Einaros WS?

Actualmente estoy usando el module NodeJS WS de einaros para crear un cliente de websocket. Al inicializar el cliente de socket, uso el evento 'open' para determinar cuándo está abierta la connection, pero una vez abierta, ¿cómo podría verificar si todavía está abierta?

¿Hay alguna propiedad en el object 'WebSocket' que pueda usar para verificar rápidamente el estado del socket?

Es – websocketInstance.readyState – adecuado?

socket.readyState te dirá qué es lo que el socket piensa que es su estado. No hay otra propiedad más precisa que pueda consultar que socket.readyState .

Si lo que desea saber es cuándo el socket se ha terminado de conectar y ahora se considera abierto, puede registrar un controller de events para el evento open . Esto te dirá cuándo se ha terminado de conectar.

Si desea una notificación en time real cuando el socket se cierra o experimenta un error, puede usar un detector de events para el error o close events. El evento de close solo significa que el socket se está cerrando y que el valor de socket.readyState ahora está cambiando a cerrado.

Un método más actualizado para verificar el socket es verificar primero socket.readyState y, si eso indica que el socket está abierto, entonces puede enviar un package de testing al otro extremo y solo cuando obtenga una respuesta De vuelta del package de testing, sabrá realmente que el socket está operativo.

La biblioteca socket.io (construida sobre webSockets) hace exactamente esto, enviando packages regulares de mantenimiento y escuchando respuestas. Si transcurre un período de time sin respuesta, cerrará el socket existente e intentará restablecer una nueva connection (suponiendo que la connection anterior se perdió de alguna manera). De esta manera, la biblioteca socket.io puede incluso sobrevivir a un reinicio del server o a una caída temporal en la conectividad a Internet del cliente, ya que verá que la connection se perdió y luego restablecerá de forma transparente una nueva connection en su lugar.

Creo que deberías mirar el error y desconectar las devoluciones de llamada. De esa forma recibirás una notificación cuando se cierre.