Ар бир Guzzle тапшырмасынын проксиин пул баштаган асинхрондук операцияга коюңуз. Учурдагы кардар жөндөөсүнүн ичинде 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();

Ар бир текшерилген тапшырма максатты жана проксини берет. Уруксат берилген коомдук суроо үчүн HTTP прокси тизмесинен HTTP талапкери ошол тапшырманын күбөлүксүз прокси URLин бере алат; тандоо анын фабрикасы иштегенге чейин болот. PSR-7 суроосу HTTP билдирүүсүн сүрөттөйт, ал эми бул жөнөтүү параметрлери транспортту башкарат. Билдирүүнүн жанында прокси маанисин басып чыгаруу же сактоо аны башка жол менен жөнөткөн операцияны конфигурациялай албайт.

Фабрикадан requestAsync() кайтарыңыз. Ал жерде синхрондук request() чакыруу пул параллелдүү ишти баштоого аракет кылганда блоктоп калышы мүмкүн.

Аткарылган жана четке кагылган callback'терди колдонмонун учурдагы иштетүүсү менен кошуңуз. Тапшырма ачкычын, тандалган прокси идентификаторун жана аракет номерин эки жыйынтыкта тең сактаңыз; бүтүү тартиби кирүү тартибинен айырмаланат. Тапшырма үчүн бирөөнү жазып койгондон кийин фабрикада жашыруун түрдө башка акыркы чекитти тандабаңыз.

Параллелдүүлүк мааниси бул пулдун ишин чектейт. Бир чектелген проксини же эсепти тандаган бир нече тапшырма дагы эле ошол акыркы чекит үчүн өзүнчө бюджетти талап кылышы мүмкүн.

Жыйынтыктарды баскыч боюнча түшүндүрүңүз: максаттын четке кагылышы, прокси аутентификациясы жана туташуунун күтүү убактысынын бүтүшү — ар кандай жыйынтыктар. Тапшырма менен сакталган жөнөтүү параметрлери кайсы маршрут ар бир жыйынтыкты бергенин көрсөтөт.

Тектеш макалалар