Node.js服务扼杀和死亡一天一次

本周每天我都重新开始我们的节点服务。 每次它只是退出以下消息:

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) 

我很难辨别出我的代码中的一部分是为这个错误负责的,正是为什么这个错误非常严重以至于使得节点退出。

无论如何,我已经做了一些四处搜寻,并认为这可能只是一个未被捕获的错误事件。 我已经添加了一些('错误')侦听器到每个服务器实例与一些定制的日志消息,以确保它被捕获,但无济于事,我仍然必须今天与常规的错误信息工作..(和是不是真的有这样一个事情,就像必须被抓住的错误事件?)

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

该服务的主要目的是保持一个开放的TCP连接到一些连接客户端,并能够推出命令(这就像一个embedded式产品的私人僵尸networking)。 所以实际上95%的时间我们只是闲置我们的TCP套接字,并发送保持活动的数据包。 因此,客户可以随时断开连接而不中断其他连接客户端的服务。

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

你有一个与该对象的“错误”事件关联的callback函数吗?

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

对于所有的对象,确保你有一个适当的callback他们各自的“错误”事件,以便他们可以优雅退出,而不是崩溃的程序。

在你的代码中添加这样的内容:

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