如果超过1000个https请求,Promise.all将失败

时间:2019-04-04 01:09:29

标签: node.js promise

我正在尝试测量我的节点应用程序的性能,该节点应用程序基本上执行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的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个请求!

有人可以帮助我弄清楚如何使用Promise.all()发出1000个以上的请求吗?

0 个答案:

没有答案