2012-08-29 14 views
5

ho una connessione client rete ad una presa (utilizzando net.createConnection (porta, host). Questo funziona bene.nodejs riconnettono connessione di rete

Tuttavia, a volte c'è la possibilità del server interrompere la connessione, e vorrei che la connessione di rete di riconnettersi automaticamente quando il server è tornato attivo e funzionante

posso intrappolare il su ('fine') evento per catturare lo scollamento iniziale, e provare a riconnettersi.

Tuttavia, come posso verificare se il client è connesso, perché voglio riprovare ogni millisecondo su una strategia di backoff

risposta

5

Nel gestore end, impostare un timeout che riproverà la connessione e impostare una volta il gestore connect che annullerà il timeout.

+0

Penso che ho avuto così lontano, ma come rilevo se un tentativo di connessione non è riuscito, per riprovare? – jmls

+0

Se il tuo tentativo di connessione è riuscito, il tuo gestore 'connect' ha cancellato il timeout. Ciò significa che se il codice di timeout viene eseguito, il tentativo di connessione è fallito o è ancora in corso. Se si imposta il valore di timeout in modo appropriato (abbastanza a lungo che se il tentativo non ha avuto esito positivo, non è probabile che abbia esito positivo), si può semplicemente supporre che il tentativo sia fallito e riprovare. – ebohlman

0

Ecco un altro approccio che ha funzionato per me.

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

L'utilizzo di client.readable restituirà un valore - immediatamente - se la connessione è attiva. In caso contrario, quindi semplicemente riconnettersi. L'utilizzo di client.writable non riesce.

Ho trovato questo approccio più robusto come a volte alla fine o Eventi nei paraggi non accadono (ad esempio: VPN arresto, crash o interruzione di corrente sul lato server, ecc)

Problemi correlati