当HTTP运行一段时间后连接到其他站点时,Node.js应用程序开始超时(ETIMEDOUT)

我使用请求模块以非常标准的方式连接到我的node.js应用程序中的其他网站:

Network.prototype.httpRequest = function(url, method, params, headers, callback) { var qs = typeof params === 'string' ? params : querystring.stringify(params || {}), config = { 'method': (method || 'get').toUpperCase(), 'url': url, 'timeout': this.app.api.settings.http.timeout_outbound }; if(config.method === 'GET') { config.url += '?' + qs; } else { config.body = qs; } request(config, callback); }; 

几个小时后,我的应用程序是活着的,这个function开始超时 – 而不仅仅是一个网站。 它开始无法连接( ETIMEDOUT ),没有任何可辨别的模式。

我的第一个明显的猜测是,某事必须以某种方式阻止/干扰networking连接。 在我的应用程序中有很多其他的“移动部分”(例如,通过Mongoose连接到Mongo,通过Elasticical连接到ElasticSearch等),所以也许可以想象其中之一是原因…但显然,不是一个真正的select坐在有select地禁用其他模块,并等待6个小时,看看问题是否消失…

我正在监视networkingstream量(通过OSX上的iStatMenus pro,FWIW),并且没有看到来自节点的exception/持续stream量。

有没有其他的方式来研究可能阻止/干扰我的stream量?

你有没有尝试设置保持活着 ? 这听起来像连接超时(因为你明确设置超时),当没有数据收到。 我在创build套接字服务器/客户端解决scheme时遇到了类似的问题,这是修复程序。

(另外,我可能误解了这个问题)