Я пытаюсь измерить производительность моего приложения узла, которое в основном выполняет количество запросов 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 ()?