web-dev-qa-db-ja.com

エラー:TCPConnectWrap.afterConnectでETIMEDOUTを接続します[oncompleteとして]

XMLHttpRequestモジュールを使用してforループで非同期にREST APIを呼び出そうとしています。100リクエストごとに1秒の待機時間で、1ループで400リクエストを作成しています。これは機能しますクライアントサイドJavaScriptでは問題ありません。ただし、同じモジュールを使用してNodeJSで実行すると(ネイティブでは利用できないため、npmjsからダウンロードする必要がありました)、約230リクエスト後にこのエラーが発生します。別のモジュールがある場合、を使用して、この一括APIリクエストをより適切に処理できますか?

エラー:TCPConnectWrap.afterConnectにETIMEDOUTを接続します[oncompleteとして)

3
Pumpkin Pie

ようやく問題の解決策を見つけました。

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);
 }); 
4
Pumpkin Pie