#node.js #promise
#node.js #обещание
Вопрос:
Я пытаюсь измерить производительность моего приложения node, которое в основном выполняет количество запросов 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 НЕ НАЙДЕН 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 запросов!
Кто-нибудь может помочь мне разобраться, как выполнить более 1000 запросов, используя Promise.all ()?
Комментарии:
1. Это не
Promise.all
проблема. это проблема с сетью, вы выполняете больше запросов, чем может обработать ваша сеть, а затем ее не удается устранить.2. Вам нужно будет отправлять его партиями, лимит каждой партии будет зависеть от операционной системы, аппаратного обеспечения, сети и многих других вещей. Если вы попробуете это на виртуальной машине, оптимизированной для сети, на EC2, вы сможете обработать больше запросов, чем на вашем локальном компьютере.