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() там можа заблакаваць, пакуль пул спрабуе пачаць паралельную працу.
Дадайце зваротныя выклікі для выкананых і адхіленых вынікаў, выкарыстоўваючы існуючую апрацоўку праграмы. Захоўвайце ключ задачы, ідэнтыфікатар выбранага проксі і нумар спробы ў абодвух выніках; парадак завяршэння адрозніваецца ад парадку ўводу. Не выбірайце тайна іншую канчатковую кропку ў фабрыку пасля таго, як адна ўжо запісана для задачы.
Значэнне паралельнасці абмяжоўвае працу гэтага пула. Некалькі задач, якія выбіраюць адзін абмежаваны проксі або ўліковы запіс, усё яшчэ могуць патрабаваць асобнага бюджэту для гэтай канчатковай кропкі.
Тлумачце вынікі па этапах: адхіленне месца прызначэння, аўтэнтыфікацыя проксі і тайм-аут злучэння — гэта розныя вынікі. Параметры адпраўкі, захаваныя з задачай, паказваюць, які маршрут даў кожны вынік.