7

我以非常标准的方式使用请求模块连接到我的 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);
};

在我的应用程序运行几个小时后,此功能开始超时 - 而不仅仅是一个网站。它开始无法ETIMEDOUT随机连接 ( ),没有任何可辨别的模式。

我的第一个显而易见的猜测是,一定有某种东西以某种方式阻塞/干扰了网络连接。我的应用程序中还有很多其他“移动部件”(例如,通过 Mongoose 连接到 Mongo,通过 Elastical 连接到 ElasticSearch 等),所以可以想象其中一个是原因……但显然,它是选择性地禁用其他模块并等待 6 小时以查看问题是否消失,这并不是一个真正的选择...

我正在监视网络流量(通过 OSX、FWIW 上的 iStatMenus pro)并且没有看到来自节点的任何异常/持久流量。

有没有其他方法可以深入研究可能阻碍/干扰我的流量的原因?

4

1 回答 1

0

您是否尝试过将keep-alive设置为true?当没有接收到数据时,听起来连接超时(因为您已明确设置超时)。我在创建套接字服务器/客户端解决方案时遇到了类似的问题,这就是修复。

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

于 2013-02-21T21:04:04.633 回答