Guzzle Pool: proslijedi proxy svakog posla u requestAsync
Priložite proxy opcije svakoj asinkronoj operaciji umjesto PSR-7 poruci zahtjeva ili blokirajućoj tvornici.
Stavite proxy svakog Guzzle posla na asinkronu operaciju koju pool pokreće. Unutar postojećeg postavljanja klijenta upotrijebite tvornice 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 provjereni posao daje odredište i proxy. Za dopušteni javni zahtjev, HTTP kandidat iz popisa HTTP proxyja može dati proxy URL tog posla bez vjerodajnica; odabir se događa prije nego što se njegova tvornica izvrši. PSR-7 zahtjev opisuje HTTP poruku, dok ove opcije slanja kontroliraju prijenos. Ispisivanje ili spremanje vrijednosti proxyja uz poruku ne može konfigurirati operaciju koja ga šalje na drugi način.
Vratite requestAsync() iz tvornice. Pozivanje sinhrone request() ondje može blokirati dok pool pokušava započeti paralelni rad.
Dodajte povratne pozive za ispunjene i odbijene ishode koristeći postojeću obradu aplikacije. Zadržite ključ posla, identifikator odabranog proxyja i broj pokušaja u oba ishoda; redoslijed dovršetka razlikuje se od redoslijeda unosa. Ne birajte tajno drugu krajnju točku u tvornici nakon što je jedna zabilježena za posao.
Vrijednost paralelnosti ograničava rad ovog poola. Nekoliko poslova koji odabiru jedan ograničeni proxy ili račun i dalje može zahtijevati zaseban proračun za tu krajnju točku.
Tumačite rezultate po fazama: odbijanje odredišta, provjera proxyja i istek veze različiti su ishodi. Opcije slanja sačuvane uz posao pokazuju koja je ruta dala svaki rezultat.