Letakkan proksi setiap kerja Guzzle pada operasi tak segerak yang dimulakan oleh kolam. Dalam persediaan klien sedia ada, gunakan kilang janji:

$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();

Setiap kerja yang disahkan menyediakan destinasi dan proksi. Untuk permintaan awam yang dibenarkan, calon HTTP daripada senarai proksi HTTP boleh menyediakan URL proksi tanpa kelayakan bagi kerja itu; pemilihan berlaku sebelum kilangnya berjalan. Permintaan PSR-7 menerangkan mesej HTTP, manakala pilihan penghantaran ini mengawal pengangkutan. Mencetak atau menyimpan nilai proksi di sebelah mesej tidak boleh mengkonfigurasi operasi yang menghantarnya dengan cara lain.

Pulangkan requestAsync() daripada kilang. Memanggil request() segerak di situ boleh menyekat semasa kolam cuba memulakan kerja serentak.

Tambah panggilan balik untuk hasil yang dipenuhi dan ditolak menggunakan pengendalian sedia ada aplikasi. Simpan kunci kerja, pengecam proksi yang dipilih dan nombor percubaan dalam kedua-dua hasil; susunan penyiapan berbeza daripada susunan input. Jangan pilih secara rahsia titik akhir lain dalam kilang selepas satu direkodkan untuk kerja itu.

Nilai keserentakan mengehadkan kerja kolam ini. Beberapa kerja yang memilih satu proksi atau akaun terhad mungkin masih memerlukan bajet berasingan untuk titik akhir itu.

Tafsirkan keputusan mengikut peringkat: penolakan destinasi, pengesahan proksi dan tamat masa sambungan ialah hasil yang berbeza. Pilihan penghantaran yang disimpan dengan kerja menunjukkan laluan mana yang menghasilkan setiap keputusan.

Artikel berkaitan