Guzzle Pool: perduoti kiekvieno darbo proxy į requestAsync
Prisekite proxy parinktis prie kiekvienos asinchroninės operacijos, o ne prie PSR-7 užklausos pranešimo ar blokuojančios gamyklos.
Įdėkite kiekvieno Guzzle darbo proxy į asinchroninę operaciją, kurią paleidžia telkinys. Esamoje kliento konfigūracijoje naudokite pažado gamyklas:
$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();
Kiekvienas patikrintas darbas pateikia paskirties vietą ir proxy. Leidžiamai viešai užklausai HTTP kandidatas iš HTTP proxy sąrašo gali pateikti to darbo proxy URL be prisijungimo duomenų; pasirinkimas įvyksta prieš paleidžiant jo gamyklą. PSR-7 užklausa aprašo HTTP pranešimą, o šios siuntimo parinktys valdo pervežimą. Proxy reikšmės spausdinimas ar saugojimas šalia pranešimo negali sukonfigūruoti operacijos, kuri ją siunčia kitaip.
Grąžinkite requestAsync() iš gamyklos. Sinchroninio request() kvietimas ten gali blokuoti, kol telkinys bando pradėti lygiagretų darbą.
Pridėkite įvykdytų ir atmestų rezultatų atgalinius iškvietimus naudodami esamą programos apdorojimą. Išsaugokite darbo raktą, pasirinkto proxy identifikatorių ir bandymo numerį abiejuose rezultatuose; užbaigimo tvarka skiriasi nuo įvesties tvarkos. Neužregistravę vieno darbo, gamykloje slapta nesirinkite kito galinio taško.
Lygiagretumo reikšmė riboja šio telkinio darbą. Keli darbai, pasirenkantys vieną ribotą proxy ar paskyrą, vis tiek gali reikalauti atskiro biudžeto tam galiniam taškui.
Aiškinkite rezultatus pagal etapą: paskirties atmetimas, proxy autentifikavimas ir ryšio skirtasis laikas yra skirtingi rezultatai. Su darbu išsaugotos siuntimo parinktys parodo, kuris maršrutas davė kiekvieną rezultatą.