Агент запросов NodeJS не может обрабатывать несколько запросов (независимо от того, сколько их)

#javascript #node.js #axios

Вопрос:

Я создаю скрипт, который генерирует прокси-серверы, а затем находит их IP-адреса (местоположение в США), для этого я делаю запросы, используя Got и туннель в качестве прокси-агента. Я ожидаю нескольких проверок местоположения, проблема в том, что независимо от того, делаю ли я 10 или 1000 запросов одновременно, в конце они всегда замедляются (последние 10% запросов). Я действительно не понимаю этого странного поведения, прежде чем оно фактически привело к выходу узла с кодом 0.

 const path = require("path");
const fs = require("fs");
const utils = require("./utils");
const _ = require("lodash");
const request = require("got");
const tunnel = require("tunnel");

const proxyManager = {
    proxies: {},
    proxiesPath: utils.cwdPath("proxies.json"),

    async generate(
        count = 2000,
        speed = 100,
    ) {

        console.log(`Generating amp; localizing ${count} proxies...`);

        let counter = 1,
            proxiesSet = new Set();

        for (let i = 0; i < count; i  )
            proxiesSet.add(
                `http://username:password@isp2.hydraproxy.com:9989`
            );

        for (const chunk of _.chunk(Array.from(proxiesSet), speed)) {
            (
                await Promise.all(
                    chunk.map((x) =>
                        (async () => {
                            const res = await this.locate(x);
                            utils.updateLog(`Progress: ${counter  }/${count}`);
                            return res;
                        })()
                    )
                )
            )
                .filter((x) => x)
                .forEach((x) => {
                    this.proxies[x.geo] = this.proxies[x.geo] || [];
                    this.proxies[x.geo].push({
                        proxy: x.proxy,
                        ip: x.ip,
                        geo: x.geo,
                    });
                });
        }
    },

    async locate(proxy) {
        try {
            const parts = proxy
                .replace("http://", "")
                .split("@")
                .map((x) => x.split(":"))
                .flat();

            const proxyObj = {
                proxy: {
                    host: parts[2],
                    port: parts[3],
                    proxyAuth: parts.slice(0, 2).join(":"),
                },
            };

            const res = JSON.parse(
                await request.get("https://getIpLocation-api.com/myip.json", {
                    agent: {
                        http: tunnel.httpOverHttp(proxyObj),
                        https: tunnel.httpsOverHttp(proxyObj),
                    },
                    resolveBodyOnly: true,
                    timeout: 2000,
                })
            );

            return {
                proxy,
                geo: [res.country, res.geo.region].join("_"),
                ip: res.ip,
            };
        } catch (error) {
            //   console.log(
            //     `Location not found, ERROR: "${error.code || eroor.message}"`
            //   );
            // debugger;
            return false;
        }
    },
};

module.exports = proxyManager; 

часть, в которой я жду функции «найти» для нескольких прокси-серверов, — это:

ждите обещания.все( chunk.map ((x) => (асинхронный () =>> { const res = ждите этого.найдите(x); если (!молчит) utils.updateLog(>> Progress: ${counter }/${count} ); возврат разрешения; })() ) )

Как я уже сказал, не имеет значения, сколько запросов я делаю, последние просто зависают (превышен ТАЙМ-аут). Надеюсь, у кого-то была эта проблема раньше и он может мне помочь, я пробовал все, что нашел за последние 2 дня.