2014-10-09 93 views
0

我在node.js中編寫了一個TCP客戶端和服務器。無論如何,我無法弄清楚如何讓客戶端重新連接。我知道我必須處理'close'事件,但只有在連接正常關閉時纔會觸發事件。當連接剛剛由於網絡問題而結束時,我不知道如何處理網絡錯誤。如何使node.js TCP連接自動重新連接?

下面是我到目前爲止的代碼:

function connect() { 
    client = new net.Socket(); 
    client.connect(config.port, config.host, function() { 
    console.log('connected to server'); 
    }); 

    client.on('close', function() { 
    console.log('dis-connected from server'); 
    connect(); 
    }); 

    client.on('error', ...); // what do I do with this? 
    client.on('timeout', ...); // what is this event? I don't understand 
} 

誰能解釋一下我在errortimeout時怎麼辦?我怎麼知道網絡已斷開連接並重新連接?

+0

可以使用這個插件https://github.com/alexkwolfe/node-eversocket或檢查它是如何工作的 – monkeyinsight 2014-10-09 01:24:23

回答

1

您可能只需將error事件處理程序作爲no-op/empty函數,除非您還想記錄該錯誤或某種有用的東西。即使在error之後,始終也會發送用於TCP套接字的close事件,所以您可以忽略它。

此外,close事件處理程序傳遞一個布爾型had_error參數,該參數指示套接字關閉是由於錯誤而不是正常的連接拆卸。

timeout事件是用於檢測流量的兩個端點之間的損耗(使用被設定爲socket.setTimeout()超時。

+0

所以我認爲我應該只處理'close'事件,對嗎? – bodacydo 2014-10-09 02:24:05

+0

也像我提到的那樣處理'close',否則當'error'(例如ECONNRESET)被髮射時,你會得到未被捕獲的異常。 – mscdex 2014-10-09 02:30:54

相關問題