XMLHttpRequestモジュールを使用してforループで非同期にREST APIを呼び出そうとしています。100リクエストごとに1秒の待機時間で、1ループで400リクエストを作成しています。これは機能しますクライアントサイドJavaScriptでは問題ありません。ただし、同じモジュールを使用してNodeJSで実行すると(ネイティブでは利用できないため、npmjsからダウンロードする必要がありました)、約230リクエスト後にこのエラーが発生します。別のモジュールがある場合、を使用して、この一括APIリクエストをより適切に処理できますか?
エラー:TCPConnectWrap.afterConnectにETIMEDOUTを接続します[oncompleteとして)
ようやく問題の解決策を見つけました。
REST APIsを呼び出すためにリクエストモジュールを使用する場合、オプションでプール変数を指定する必要があります。これは、同時リクエスト処理の宣言であるmaxsocketsとして機能します。
この問題に遭遇した人のためのサンプルコードが以下に掲載されています:
詳細については、以下の投稿をご覧ください。 リクエストjs(ノードjsモジュール)プールの使用方法
var separateReqPool = {maxSockets: 20};
var request = require('request');
var url_array = ['url1','url2','url3'];//Array of all the urls to call
async.map(url_array, function(item, callback){
request({url: item, pool: separateReqPool}, function (error, response, body) {
//Do Something with the response
});
}, function(err, results){
console.log(results);
});
}).
catch((err) => {
console.log(err);
});