Guzzle Pool: odovzdajte proxy každej úlohy do requestAsync
Pripojte možnosti proxy ku každej asynchrónnej operácii namiesto správy požiadavky PSR-7 alebo blokujúcej továrne.
Umiestnite proxy každej úlohy Guzzle na asynchrónnu operáciu, ktorú spúšťa pool. V existujúcom nastavení klienta použite továrne prísľubov:
$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();
Každá overená úloha poskytuje cieľ a proxy. Pre povolenú verejnú požiadavku môže kandidát HTTP zo zoznamu HTTP proxy poskytnúť URL proxy tejto úlohy bez prihlasovacích údajov; výber sa uskutoční pred spustením jej továrne. Požiadavka PSR-7 opisuje správu HTTP, zatiaľ čo tieto možnosti odosielania riadia prenos. Vytlačenie alebo uloženie hodnoty proxy vedľa správy nemôže nakonfigurovať operáciu, ktorá ju odosiela inak.
Vraciate z továrne requestAsync(). Volanie synchrónneho request() tam môže zablokovať, kým sa pool snaží spustiť súbežnú prácu.
Pridajte spätné volania pre splnené a odmietnuté výsledky pomocou existujúceho spracovania aplikácie. Zachovajte kľúč úlohy, identifikátor zvoleného proxy a číslo pokusu v oboch výsledkoch; poradie dokončenia sa líši od poradia vstupu. Po zaznamenaní jedného koncového bodu pre úlohu už v továrni tajne nevyberajte iný.
Hodnota súbežnosti obmedzuje prácu tohto poolu. Niekoľko úloh, ktoré vyberajú jednu obmedzenú proxy alebo účet, môže stále vyžadovať samostatný rozpočet pre tento koncový bod.
Interpretujte výsledky podľa fázy: odmietnutie cieľa, overenie proxy a časový limit pripojenia sú rôzne výsledky. Možnosti odosielania uchované s úlohou ukazujú, ktorá trasa vytvorila každý výsledok.