Guzzle Pool: her işin proxy'sini requestAsync'e geçir
Proxy seçeneklerini PSR-7 istek iletisine veya bloke eden bir fabrikaya değil, her asenkron işleme ekleyin.
Her Guzzle işinin proxy'sini havuzun başlattığı asenkron işlemin üzerine koyun. Mevcut bir istemci kurulumunda söz fabrikaları kullanın:
$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();
Doğrulanmış her iş bir hedef ve bir proxy sağlar. İzin verilen genel bir istek için HTTP proxy listesinden bir HTTP adayı, o işin kimlik bilgisi gerektirmeyen proxy URL'sini sağlayabilir; seçim, fabrikası çalışmadan önce yapılır. PSR-7 isteği HTTP iletisini tanımlarken bu gönderme seçenekleri taşımayı denetler. İletinin yanına bir proxy değeri yazdırmak veya saklamak, onu başka bir yolla gönderen bir işlemi yapılandıramaz.
Fabrikadan requestAsync() döndürün. Orada eşzamanlı request() çağırmak, havuz eşzamanlı iş başlatmaya çalışırken bloke edebilir.
Yerine getirilen ve reddedilen geri çağırmaları uygulamanın mevcut işleyişiyle ekleyin. İş anahtarını, seçilen proxy tanımlayıcısını ve deneme numarasını iki sonuçta da tutun; tamamlanma sırası giriş sırasından farklıdır. İş için bir tane kaydedildikten sonra fabrikada gizlice başka bir uç nokta seçmeyin.
Eşzamanlılık değeri bu havuzun işini sınırlar. Tek bir sınırlı proxy veya hesap seçen birkaç iş yine de o uç nokta için ayrı bir bütçe gerektirebilir.
Sonuçları aşamaya göre yorumlayın: hedefin reddedilmesi, proxy kimlik doğrulaması ve bağlantı zaman aşımı farklı sonuçlardır. İşle birlikte tutulan gönderme seçenekleri her sonucu hangi yolun ürettiğini gösterir.