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);
};

私のアプリが稼働してから数時間後、この関数は1つのWebサイトだけでなく、タイムアウトを開始します。ETIMEDOUT識別可能なパターンなしで、ランダムに接続()に失敗し始めます。

私の最初の明白な推測は、何かが何らかの形でネットワーク接続をブロック/妨害しているに違いないということです。私のアプリには他にもたくさんの「可動部分」があります(たとえば、Mongoose経由でMongoに接続する、Elastical経由でElasticSearchに接続するなど)ので、そのうちの1つが原因であると考えられます...しかし明らかにそれは他のモジュールを選択的に無効にし、問題が解決するかどうかを確認するために6時間待つという選択肢は実際にはありません...

(OSX、FWIWのiStatMenus proを介して)ネットワークトラフィックを監視していますが、ノードからの異常な/永続的なトラフィックは見られません。

私のトラフィックをブロック/妨害している可能性のあるものを掘り下げる他の方法はありますか?

4

1 に答える 1

0

keep-aliveを true に設定してみましたか? データが受信されない場合、(タイムアウトを明示的に設定したため) 接続がタイムアウトしているように聞こえます。ソケットサーバー/クライアントソリューションを作成しているときに同様の問題に遭遇しましたが、これが修正されました.

(また、私は質問を誤解したかもしれません)

于 2013-02-21T21:04:04.633 に答える