Node.js每天服务一次扼流圈

时间:2011-09-29 10:30:27

标签: node.js tcp timeout

本周我每天都在重启节点服务,开始工作。 每次只需退出以下消息:

node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ETIMEDOUT, Connection timed out
at Socket._readImpl (net.js:163:14)
at Socket._onReadable (net.js:633:22)
at IOWatcher.onReadable [as callback] (net.js:177:10)

我无法辨别出我的代码中究竟有哪部分代码负责该错误,以及错误导致节点退出的确切原因。

无论如何,我已经做了一些搜索,并认为这可能只是一个未被捕获的错误事件。 我已经为每个服务器实例添加了一些on('error')监听器,并带有一些自定义日志消息,以确保它被捕获,但无济于事,我今天仍然需要使用常规错误消息。 (是否真的存在必须捕获的'错误'事件?)

简单的连接超时不应该真正导致整个服务崩溃。

该服务的主要目的是保持与许多连接客户端的开放式TCP连接,并能够推出 命令(它非常像嵌入式产品的私有僵尸网络)。所以实际上95%的时间我们只是闲置我们的tcp套接字并发送保持活动的数据包。 因此,客户可以随时断开连接,而不会中断 其他连接客户的服务。

我们正在使用最新的稳定分支节点v0.4.13-pre并在ubuntu服务器上运行。

2 个答案:

答案 0 :(得分:0)

您是否有与该对象的“错误”事件关联的回调函数?

http://nodejs.org/docs/v0.4.12/api/net.html#event_error_

对于所有对象,请确保对各自的“错误”事件进行适当的回调,以便他们可以正常退出而不是使程序崩溃。

答案 1 :(得分:0)

在代码中添加以下内容:

process.on('uncaughtException', function (err) {
  console.log('Caught Uncaught exception: ' + err);
});