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