Guzzle Pool: proslijedite proxy svakog posla u requestAsync
Priložite proxy opcije svakoj asinhronoj operaciji umjesto PSR-7 poruci zahtjeva ili blokirajućoj fabrici.
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 provjereni posao daje odredište i proxy. Za dozvoljeni javni zahtjev, HTTP kandidat iz HTTP liste proxyja može dati proxy URL tog posla bez vjerodajnica; odabir se događa prije nego što se njegova fabrika izvrši. PSR-7 zahtjev opisuje HTTP poruku, dok ove opcije slanja kontrolišu transport. Ispisivanje ili čuvanje vrijednosti 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 pokrenuti paralelni rad.
Dodajte povratne pozive za izvršene i odbijene ishode koristeći postojeće rukovanje aplikacije. Zadržite ključ posla, identifikator odabranog proxyja i broj pokušaja u oba ishoda; redoslijed završetka se razlikuje od redoslijeda unosa. Ne birajte tajno drugu krajnju tačku u fabrici nakon što je jedna zabilježena za posao.
Vrijednost paralelnosti ograničava rad ovog poola. Nekoliko poslova koji biraju jedan ograničeni proxy ili račun i dalje može zahtijevati poseban budžet za tu krajnju tačku.
Tumačite rezultate po fazama: odbijanje odredišta, provjera proxyja i istek veze su različiti ishodi. Opcije slanja sačuvane uz posao pokazuju koja ruta je dala svaki rezultat.