Существует множество стратегий для обработки слишком большого количества запросов, и какая стратегия обеспечивает вам лучшую пропускную способность без учета ограничения скорости целевого сервера, целиком и полностью зависит от того, как целевой сервер измеряет и применяет меры. Если это не задокументировано, вам придется просто поэкспериментировать. Самая безопасная (и потенциально самая медленная) стратегия заключается в последовательном выполнении ваших запросов с задержкой между ними и соответствующей настройке этого времени задержки.
Последовательный запуск с задержкой между каждым запросом
Вы можете запускать свои запросы последовательно и использовать ожидание на обещании задержки, чтобы разделить их во времени.
const axios = require('axios');
function delay(t) {
return new Promise(resolve => setTimeout(resolve, t));
}
async function getResults() {
const results = [];
const strings = ['a', 'b', 'c'];
for (let str of strings) {
await delay(1000);
let data = await axios.get(`https://www.apiexample.com/get/?cfg=json&value=${str}`);
results.push(data);
}
return results;
}
getResults.then(results => {
console.log(results);
}).catch(err => {
console.log(err);
});
Выполнить N запросов одновременно, когда N> 1 и N <все ваши запросы </strong>
Если вы хотите выполнить N запросов в то время, когда N больше 1 (часто как 3 или 4), но меньше всех ваших запросов, то смотрите mapConcurrent()
в этот ответ . Если это возможно, не так много, как вы делали, зависит полностью от целевого сервера и от того, что именно он измеряет и применяет.
Ограничение фактической скорости, когда вы запускаете N запросов в секунду
Для фактического ограничения скорости, когда вы управляете запросами в секунду напрямую, смотрите rateLimitMap()
в этом ответе: Выберите правильный асинхронный c метод пакетной обработки для максимальных запросов / se c .