Guzzle Pool: hər işin proksisini requestAsync-ə ötürün
Proksi seçimlərini PSR-7 sorğu mesajına və ya bloklayan fabrikə deyil, hər asinxron əməliyyata əlavə edin.
Hər Guzzle işinin proksisini hovuzun (pool) başlatdığı asinxron əməliyyata qoyun. Mövcud müştəri quraşdırması daxilində promise fabriklərindən istifadə edin:
$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();
Hər təsdiqlənmiş iş bir təyinat və bir proksi təqdim edir. İcazə verilmiş ictimai sorğu üçün HTTP proksi siyahısından bir HTTP namizədi həmin işin etimadsız proksi URL-ini verə bilər; seçim onun fabriki işə düşməzdən əvvəl baş verir. PSR-7 sorğusu HTTP mesajını təsvir edir, bu göndərmə seçimləri isə daşımanı idarə edir. Proksi dəyərini mesajın yanında çap etmək və ya saxlamaq onu başqa yolla göndərən əməliyyatı konfiqurasiya edə bilməz.
Fabrikdən requestAsync() qaytarın. Orada sinxron request() çağırmaq hovuz paralel işi başlatmağa çalışarkən bloklaya bilər.
Yerinə yetirilmiş və rədd edilmiş geri çağırışları tətbiqin mövcud idarəetməsi ilə əlavə edin. İş açarını, seçilmiş proksi identifikatorunu və cəhd nömrəsini hər iki nəticədə saxlayın; tamamlanma sırası giriş sırasından fərqlənir. İş üçün bir endpoint qeyd etdikdən sonra fabrikdə gizlicə başqa endpoint seçməyin.
Paralellik dəyəri bu hovuzun işini məhdudlaşdırır. Bir məhdud proksi və ya hesabı seçən bir neçə iş yenə də həmin endpoint üçün ayrıca büdcə tələb edə bilər.
Nəticələri mərhələyə görə şərh edin: təyinatın rədd edilməsi, proksi autentifikasiyası və bağlantı vaxt aşımı fərqli nəticələrdir. İşlə birlikdə saxlanılan göndərmə seçimləri hər nəticənin hansı marşrutdan gəldiyini göstərir.