Đặt proxy của từng job Guzzle lên thao tác bất đồng bộ mà pool khởi chạy. Trong thiết lập client sẵn có, hãy dùng các factory 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();

Mỗi job đã được kiểm chứng cung cấp một đích đến và một proxy. Với một yêu cầu công khai được phép, một ứng viên HTTP từ danh sách proxy HTTP có thể cung cấp URL proxy không cần thông tin xác thực của job đó; việc chọn lựa diễn ra trước khi factory của nó chạy. Yêu cầu PSR-7 mô tả thông điệp HTTP, còn các tùy chọn gửi này điều khiển việc vận chuyển. Việc in hay lưu một giá trị proxy bên cạnh thông điệp không thể cấu hình một thao tác gửi nó theo cách khác.

Trả về requestAsync() từ factory. Gọi request() đồng bộ ở đó có thể chặn trong khi pool đang cố khởi chạy công việc đồng thời.

Thêm callback cho kết quả hoàn tất và bị từ chối bằng cách xử lý sẵn có của ứng dụng. Giữ khóa job, định danh proxy đã chọn và số lần thử trong cả hai kết quả; thứ tự hoàn tất khác với thứ tự đầu vào. Đừng lặng lẽ chọn một endpoint khác trong factory sau khi đã ghi nhận một endpoint cho job.

Giá trị đồng thời giới hạn công việc của pool này. Nhiều job cùng chọn một proxy hoặc tài khoản bị hạn chế vẫn có thể cần ngân sách riêng cho endpoint đó.

Diễn giải kết quả theo giai đoạn: bị từ chối đích đến, xác thực proxy và hết thời gian kết nối là những kết quả khác nhau. Các tùy chọn gửi được giữ cùng job cho thấy tuyến nào tạo ra từng kết quả.

Bài viết liên quan