2014-10-09 324 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