Guzzle Pool: проследите прокси сваког посла у requestAsync
Прикачите опције проксија свакој асинхроној операцији, а не PSR-7 поруци захтева или блокирајућој фабрици.
Поставите прокси сваког Guzzle посла на асинхрону операцију коју базен покреће. Унутар постојећег подешавања клијента користите фабрике обећања:
$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();
Сваки валидирани посао даје одредиште и прокси. За дозвољени јавни захтев, HTTP кандидат из листе HTTP проксија може дати прокси URL тог посла без акредитива; избор се дешава пре него што се његова фабрика изврши. PSR-7 захтев описује HTTP поруку, док ове опције слања контролишу транспорт. Штампање или чување вредности проксија поред поруке не може конфигурисати операцију која га шаље на други начин.
Вратите requestAsync() из фабрике. Позивање синхроне request() тамо може блокирати док базен покушава да започне паралелни рад.
Додајте повратне позиве за испуњене и одбијене исходе користећи постојећу обраду апликације. Задржите кључ посла, идентификатор изабраног проксија и број покушаја у оба исхода; редослед завршетка се разликује од редоследа уноса. Не бирајте тајно другу крајњу тачку у фабрици након што је једна забележена за посао.
Вредност паралелизма ограничава рад овог базена. Неколико послова који бирају један ограничени прокси или налог и даље може захтевати посебан буџет за ту крајњу тачку.
Тумачите резултате по фазама: одбијање одредишта, провера проксија и истек везе су различити исходи. Опције слања сачуване уз посао показују која је рута дала сваки резултат.