2012-08-29 32 views
5

mam połączenie klienta netto do gniazdka (przy użyciu net.createConnection (port, host). To działa prawidłowo.nodejs ponownie połączenie netto

Czasami jednak istnieje możliwość serwerze upuszczanie połączenie, a Chciałbym połączenia netto automatycznie ponownie, gdy serwer jest z powrotem i działa

mogę pułapkę na („koniec”) wydarzenie złapać początkową rozłączyć i spróbować ponownie.

Jednakże, jak czy mogę sprawdzić, czy klient się połączył, ponieważ chcę ponowić próbę co n milisekund na strategii wycofania

Odpowiedz

5

W instrukcji obsługi end ustaw limit czasu, który będzie ponawiał połączenie, i ustaw jednorazową obsługę connect, która anuluje limit czasu.

+0

myślę, że mam tak daleko, ale jak mogę wykryć, czy próba nawiązania połączenia nie powiodła się, aby ponowić próbę? – jmls

+0

Jeśli twoja próba połączenia się powiodła, twój 'connect' handler anuluje limit czasu. Oznacza to, że jeśli Twój kod przekroczenia limitu czasu w ogóle się uruchamia, próba połączenia nie powiodła się lub jest nadal w toku. Jeśli ustawisz wartość limitu czasu odpowiednio (wystarczająco długo, aby próba nie zakończyła się sukcesem, to prawdopodobnie się nie uda), możesz po prostu założyć, że próba się nie udała i spróbować ponownie. – ebohlman

0

Oto inne podejście, które sprawdziło się u mnie.

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

Użycie client.readable zwróci wartość - natychmiast - jeśli połączenie jest żywe. Jeśli nie, po prostu połącz się ponownie. Użycie client.writable kończy się niepowodzeniem.

znalazłem to podejście bardziej niezawodne jak czasami END lub bliskich wydarzenia nie zdarzają (np VPN wyłączenie, awaria lub awarii zasilania po stronie serwera, itp)

Powiązane problemy