Guzzle Pool: 각 작업의 프록시를 requestAsync로 전달
프록시 옵션을 PSR-7 요청 메시지나 블로킹 팩터리가 아니라 각 비동기 작업에 붙입니다.
각 Guzzle 작업의 프록시를 풀이 시작하는 비동기 작업에 두세요. 이미 있는 클라이언트 설정 안에서는 프로미스 팩터리를 사용합니다:
$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();
검증된 각 작업은 목적지와 프록시를 제공합니다. 허용된 공개 요청의 경우 HTTP 프록시 목록의 HTTP 후보가 그 작업의 자격 증명 없는 프록시 URL을 제공할 수 있으며, 선택은 해당 팩터리가 실행되기 전에 이루어집니다. PSR-7 요청은 HTTP 메시지를 기술하고, 이 전송 옵션들은 트랜스포트를 제어합니다. 메시지 옆에 프록시 값을 출력하거나 저장하는 것만으로는 다른 방식으로 전송하는 작업을 구성할 수 없습니다.
팩터리에서 requestAsync()를 반환하세요. 거기서 동기 request()를 호출하면 풀이 동시 작업을 시작하려는 동안 블로킹될 수 있습니다.
이행 및 거부 콜백은 애플리케이션의 기존 처리 방식을 사용해 추가하세요. 작업 키, 선택한 프록시 식별자, 시도 번호를 두 결과 모두에 유지하세요. 완료 순서는 입력 순서와 다릅니다. 작업에 하나를 기록한 뒤 팩터리에서 몰래 다른 엔드포인트를 고르지 마세요.
동시성 값은 이 풀의 작업량을 제한합니다. 하나의 제한된 프록시나 계정을 고르는 여러 작업은 여전히 그 엔드포인트를 위한 별도 예산이 필요할 수 있습니다.
결과는 단계별로 해석하세요. 목적지 거부, 프록시 인증, 연결 타임아웃은 서로 다른 결과입니다. 작업과 함께 보관한 전송 옵션은 어느 경로가 각 결과를 만들었는지 보여 줍니다.