Ставете го проксито на секоја 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() таму може да блокира додека базенот се обидува да започне паралелна работа.

Додајте повратни повици за исполнети и одбиени исходи користејќи го постоечкото ракување на апликацијата. Задржете го клучот на задачата, идентификаторот на избраното прокси и бројот на обидот во двата исхода; редоследот на завршување се разликува од редоследот на внесување. Не избирајте тајно друга крајна точка во фабриката откако една е забележана за задачата.

Вредноста за паралелизам го ограничува работењето на овој базен. Неколку задачи што избираат едно ограничено прокси или сметка може сепак да бараат одделен буџет за таа крајна точка.

Толкувајте ги резултатите по фаза: одбивање на одредиштето, автентикација на проксито и истекување на врската се различни исходи. Опциите за испраќање задржани со задачата покажуваат која рута го дала секој резултат.

Поврзани статии