выполнять 1000 http запросов асинхронно (делаю с использованием async function, но не делаю await, так как ответ не особо важен, главное послать http запрос).
Тысячи запросов уходит, приходит ответ на последний через 4 секунды.
Ок, как сделать, чтобы 10000 запросов по времени тоже занимали эти самые 4 секунды, а не 40?
Пробовал через cluster (каждая 1000 запросов в своём nodejs процессе), но по факту получаю падение производительности на 10-20%, чем без использования кластера.
Что можно предпринять? Или только менять js на nim/rust/kotlin?
точно что менять не нужно, там думаю такие же проблемы будут если не больше
А какое решение тогда? Если дело не в сетевом буфере (разузнаю про это)
Вы пишете на клиенте async function() { for....} без await внутри и ждёте асинхронного поведения выполнения запросов, правильно я понимаю?
Я пишу for (){ post().then().catch() } async function post(){ return await axios.post()........ } И получаю параллельный вызов функции. Дополнительно ещё его обрабатываю (
а целевой сервис на который вы эту пачку ДДОСа делаете, пропускает столько запросов?
DDOS звучит более понятно, а так да, дос
Даже если делать на localhost, вместо целевого сервиса, все равно очень долго выходит. И да, он потянет. Это биржа :)
Просто если функция не асинхронна, внутри нет await, то будет тупо последовательно выполнять 10к запросов, пока их все не пройдет. Остальной синхронный код остановится у приложения во время выполнения. Если о остального кода нет,и пелевать, то,так или иначе, 40 секунд в 4 секунды превратить затруднительно...Таков объем данных и сеть. Попробуйте отказаться от аксиоса, кстати. И в жс нет параллельного выполнения кода, если это не треды, отдельные процессы. Есть эта асинхронщина треклятая в рамках одного потока)
в этом случае каждый вызов post() создаст новый промис, который уже добавит задачку эвент лупу отправить запрос по сети
А как иначе? Вроде ж, никак. С учётом того, что есть только один поток, в котором я эти самые задачки и отдаю nodejs для обработки. Или async/await добавляет времени много на процессинг? Если да, то какова альтернатива? Коллбеки или ещё как то?
А зачем там авэйт?
https://t.me/nodejs_ru/775456
Обсуждают сегодня