Promise.all не работает, если более 1000 запросов https - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь измерить производительность моего приложения узла, которое в основном выполняет количество запросов GET.

Для оценки производительности я решил использовать набор данных размером 1 миллион. Но это не удается после 1000 запросов.

Мой код выглядит примерно так:

let promiseArray = [] 
for(let i = 0; i < 10001; i++) {
  promiseArray.push(
    new Promise((resolve, reject) => {
      https.get("https://google.com", (response, err) => {
        if (err) reject(err);
        let bodyChunks = [];
        response
          .on("data", chunks => {
            bodyChunks.push(chunks);
          })
          .on("end", () => {
            var body = Buffer.concat(bodyChunks);
            resolve(body);
          });
      });
    })
  );
}

fetchData = async () => {
  result = await Promise.all(promiseArray);
  console.log(result);
}

fetchData();

Работает нормально до 1000 запросов, но как только я делаю 1001, выдает следующую ошибку:

Ошибка: getaddrinfo ENOTFOUND google.com google.com:443

Я также пытался использовать Bluebird's Promise.map:

var foo = Array(10000)
  .fill()
  .map((v, i) => i);

Promise.map(
  foo,
  function(i) {
    // Promise.map awaits for returned promises as well.
    return new Promise((resolve, reject) => {
      https.get("https://google.com", (response, err) => {
        if (err) reject(err);
        let bodyChunks = [];
        response
          .on("data", chunks => {
            bodyChunks.push(chunks);
          })
          .on("end", () => {
            var body = Buffer.concat(bodyChunks);
            resolve(body);
          });
      });
    });
  },
  { concurrency: 100 }
).then(function() {
  console.log("done");
});

Это дало мне ошибку:

Ошибка: подключить ECONNREFUSED 172.217.194.113:443

Это даже не работает для 10 запросов!

Может кто-нибудь помочь мне понять, как сделать более 1000 запросов с помощью Promise.all ()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...