Guzzle Pool: předejte proxy každé úlohy do requestAsync
Připojte možnosti proxy ke každé asynchronní operaci, nikoli ke zprávě požadavku PSR-7 nebo blokující továrně.
Umístěte proxy každé úlohy Guzzle na asynchronní operaci, kterou spouští pool. V existujícím nastavení klienta použijte továrny promise:
$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á ověřená úloha poskytuje cíl a proxy. Pro povolený veřejný požadavek může kandidát HTTP ze seznamu HTTP proxy poskytnout URL proxy této úlohy bez přihlašovacích údajů; výběr proběhne dříve, než se spustí její továrna. Požadavek PSR-7 popisuje zprávu HTTP, zatímco tyto možnosti odesílání řídí přenos. Vytištění nebo uložení hodnoty proxy vedle zprávy nemůže nakonfigurovat operaci, která ji odesílá jinak.
Vracejte z továrny requestAsync(). Volání synchronního request() tam může zablokovat, zatímco se pool snaží spustit souběžnou práci.
Přidejte zpětná volání pro splněné a odmítnuté výsledky pomocí stávajícího zpracování aplikace. Uchovejte klíč úlohy, identifikátor zvolené proxy a číslo pokusu v obou výsledcích; pořadí dokončení se liší od pořadí vstupu. Po zaznamenání jednoho koncového bodu pro úlohu už v továrně tajně nevybírejte jiný.
Hodnota souběžnosti omezuje práci tohoto poolu. Několik úloh, které vybírají jednu omezenou proxy nebo účet, může přesto vyžadovat samostatný rozpočet pro tento koncový bod.
Vykládejte výsledky podle fáze: odmítnutí cíle, ověření proxy a časový limit připojení jsou různé výsledky. Možnosti odesílání uchované s úlohou ukazují, která trasa každý výsledek vytvořila.