Letakkan proksi setiap pekerjaan Guzzle pada operasi asinkron yang dimulai pool. Di dalam penyiapan klien yang ada, gunakan pabrik promise:

$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 pekerjaan yang tervalidasi menyediakan tujuan dan proksi. Untuk permintaan publik yang diizinkan, kandidat HTTP dari daftar proksi HTTP dapat menyediakan URL proksi tanpa kredensial untuk pekerjaan itu; pemilihan terjadi sebelum pabriknya berjalan. Permintaan PSR-7 menjelaskan pesan HTTP, sedangkan opsi pengiriman ini mengendalikan transport. Mencetak atau menyimpan nilai proksi di samping pesan tidak dapat mengonfigurasi operasi yang mengirimkannya dengan cara lain.

Kembalikan requestAsync() dari pabrik. Memanggil request() sinkron di sana dapat memblokir saat pool mencoba memulai pekerjaan bersamaan.

Tambahkan callback terpenuhi dan ditolak menggunakan penanganan aplikasi yang sudah ada. Simpan kunci pekerjaan, pengenal proksi terpilih, dan nomor percobaan di kedua hasil; urutan penyelesaian berbeda dari urutan masukan. Jangan diam-diam memilih endpoint lain di pabrik setelah satu tercatat untuk pekerjaan itu.

Nilai konkurensi membatasi pekerjaan pool ini. Beberapa pekerjaan yang memilih satu proksi atau akun terbatas masih dapat membutuhkan anggaran terpisah untuk endpoint itu.

Tafsirkan hasil per tahap: penolakan tujuan, autentikasi proksi, dan waktu tunggu koneksi adalah hasil yang berbeda. Opsi pengiriman yang disimpan bersama pekerjaan menunjukkan rute mana yang menghasilkan setiap hasil.

Artikel terkait