本周我每天都在重启节点服务,开始工作。 每次只需退出以下消息:
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服务器上运行。
答案 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);
});