Guzzle Pool: har bir ishning proksisini requestAsync ga uzating
Proksi parametrlarini PSR-7 so'rov xabariga yoki bloklovchi fabrikaga emas, har bir asinxron amalga bog'lang.
Har bir Guzzle ishining proksisini hovuz boshlaydigan asinxron amalga qo'ying. Mavjud mijoz sozlamasi ichida va'da fabrikalaridan foydalaning:
$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();
Har bir tekshirilgan ish manzil va proksi beradi. Ruxsat etilgan ommaviy so'rov uchun HTTP proksi ro'yxatidan HTTP nomzodi shu ishning hisob ma'lumotlarisiz proksi URL ini bera oladi; tanlov uning fabrikasi ishga tushishidan oldin sodir bo'ladi. PSR-7 so'rovi HTTP xabarini tavsiflaydi, bu yuborish parametrlari esa transportni boshqaradi. Xabar yonida proksi qiymatini chop etish yoki saqlash uni boshqacha yuboradigan amalni sozlay olmaydi.
Fabrikadan requestAsync() qaytaring. U yerda sinxron request() chaqirish hovuz bir vaqtda ish boshlashga urinayotganda bloklashi mumkin.
Bajarilgan va rad etilgan qayta chaqiruvlarni ilovaning mavjud ishlov berishidan foydalanib qo'shing. Ish kaliti, tanlangan proksi identifikatori va urinish raqamini ikkala natijada ham saqlang; tugatish tartibi kirish tartibidan farq qiladi. Ish uchun bittasi qayd etilgandan keyin fabrikada yashirincha boshqa so'nggi nuqtani tanlamang.
Bir vaqtlilik qiymati bu hovuz ishini cheklaydi. Bitta cheklangan proksi yoki akkauntni tanlaydigan bir nechta ish hali ham shu so'nggi nuqta uchun alohida byudjet talab qilishi mumkin.
Natijalarni bosqich bo'yicha izohlang: manzilning rad etilishi, proksi autentifikatsiyasi va ulanish vaqti tugashi turlicha natijalar. Ish bilan saqlangan yuborish parametrlari qaysi yo'l har bir natijani berganini ko'rsatadi.