Stavite proxy svakog Guzzle posla na asinhronu operaciju koju pool pokreće. Unutar postojećeg podešavanja klijenta koristite fabrike obećanja:

$operations = function () use ($client, $jobs) {
    foreach ($jobs as $id => $job) {
        yield $id => function () use ($client, $job) {
            return $client->requestAsync('GET', $job['url'], [
                'proxy' => $job['proxy'],
                'timeout' => 20,
            ]);
        };
    }
};

$pool = new GuzzleHttp\Pool($client, $operations(), [
    'concurrency' => 4,
]);
$pool->promise()->wait();

Svaki validirani posao daje odredište i proxy. Za dozvoljeni javni zahtev, HTTP kandidat iz liste HTTP proxyja može dati proxy URL tog posla bez akreditiva; izbor se dešava pre nego što se njegova fabrika izvrši. PSR-7 zahtev opisuje HTTP poruku, dok ove opcije slanja kontrolišu transport. Štampanje ili čuvanje vrednosti proxyja pored poruke ne može konfigurisati operaciju koja ga šalje na drugi način.

Vratite requestAsync() iz fabrike. Pozivanje sinhrone request() tamo može blokirati dok pool pokušava da započne paralelan rad.

Dodajte povratne pozive za ispunjene i odbijene ishode koristeći postojeću obradu aplikacije. Zadržite ključ posla, identifikator izabranog proxyja i broj pokušaja u oba ishoda; redosled završetka se razlikuje od redosleda unosa. Ne birajte tajno drugu krajnju tačku u fabrici nakon što je jedna zabeležena za posao.

Vrednost paralelnosti ograničava rad ovog poola. Nekoliko poslova koji biraju jedan ograničen proxy ili nalog i dalje može zahtevati poseban budžet za tu krajnju tačku.

Tumačite rezultate po fazama: odbijanje odredišta, provera proxyja i istek veze su različiti ishodi. Opcije slanja sačuvane uz posao pokazuju koja je ruta dala svaki rezultat.

Povezani članci