2012-08-29 16 views
5

tengo una conexión de cliente a una toma de red (usando net.createConnection (puerto, anfitrión). Esto funciona bien.nodejs vuelven a conectar conexión a la red

Sin embargo, a veces existe la posibilidad de que el servidor de terminar la conexión, y me gustaría que la conexión de red para conectar automáticamente cuando el servidor está de nuevo en marcha

que pueden atrapar el encendido ('fin') evento para captar la desconexión inicial, y tratar de volver a conectar.

Sin embargo, ¿cómo puedo verificar si el cliente se ha conectado, porque quiero volver a intentar cada n milisegundos con una estrategia de retirada

Respuesta

5

En su controlador , establezca un tiempo de espera que reintentará la conexión y configure un controlador connect que cancelará el tiempo de espera.

+0

Creo que llegué tan lejos, pero ¿cómo ¿Detecto si falló un intento de conexión, para volver a intentarlo? – jmls

+0

Si su intento de conexión tuvo éxito, su controlador 'connect' habrá cancelado el tiempo de espera. Eso significa que si su código de tiempo de espera se ejecuta en absoluto, el intento de conexión falló o aún está en progreso. Si configura el valor de tiempo de espera de manera apropiada (lo suficiente como para que el intento no haya tenido éxito para entonces, no sea probable que tenga éxito), puede simplemente asumir que el intento falló y volver a intentarlo. – ebohlman

0

Aquí hay otro enfoque que me ha funcionado.

if (!client.readable) 
    client.connect(PORT,HOST); 
else 
    logger.debug('Attempt to reconnect on an active connection. Ignored.'); 

El uso de client.readable devolverá un valor - inmediatamente - si la conexión está activa. Si no, simplemente vuelve a conectarte. El uso de client.writable falla.

me encontré con este enfoque más robusto ya que a veces el final o eventos no ocurren CERRAR (por ejemplo: VPN parada, accidente o falla de energía en el lado del servidor, etc.)

Cuestiones relacionadas