2012-08-29 50 views
5

我有網的客戶端連接到插座(使用net.createConnection(端口,主機)。這工作得很好。重新的NodeJS的網絡連接

然而,有時是服務器斷開了連接的可能性,我想網絡連接,自動重新連接服務器何時恢復正常運行

我可以捕獲的(「端」)事件趕上最初的斷開,並嘗試重新連接。

然而,如何我可以檢查客戶端是否已連接,因爲我想每隔n毫秒重試一次退避策略

回答

5

在您的end處理程序中,設置將重試連接的超時時間,並設置一個可取消超時的處理程序connect

+0

我認爲我得到了那麼遠,但如何我是否檢測到連接嘗試失敗,以便再次重試? – jmls

+0

如果您的連接嘗試成功,則您的'connect'處理程序將取消超時。這意味着如果您的超時代碼完全運行,則連接嘗試失敗或仍在進行中。如果您適當地設置了超時值(足夠長,以至於如果嘗試尚未成功,則不太可能成功),那麼可以簡單地假定嘗試失敗並再次嘗試。 – ebohlman

0

這是另一種方法,爲我工作。

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

使用client.readable會返回一個值 - 立即 - 如果連接還活着。如果不是,那麼只需重新連接即可。使用client.writable失敗。

我發現這種方法更穩健,因爲有時候結束或者關閉事件不發生(如:VPN關機,死機或服務器端斷電等)