非常に標準的な方法でリクエストモジュールを使用して、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を介して)ネットワークトラフィックを監視していますが、ノードからの異常な/永続的なトラフィックは見られません。
私のトラフィックをブロック/妨害している可能性のあるものを掘り下げる他の方法はありますか?