Guzzle Pool: pasa cada tarea su proxy a requestAsync
Erantsi proxy aukerak eragiketa asinkrono bakoitzari, ez PSR-7 eskaera-mezuari edo blokeatzen duen fabrika bati.
Jarri Guzzle lan bakoitzaren proxy-a pool-ak abiarazten duen eragiketa asinkronoaren gainean. Dagoen bezero-konfigurazio baten barruan, erabili promesa-fabrikak:
$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();
Baliozkotutako lan bakoitzak helmuga eta proxy bat ematen ditu. Baimendutako eskaera publiko baterako, HTTP proxy zerrendako HTTP hautagai batek lan horren kredentzialik gabeko proxy URLa eman dezake; hautaketa bere fabrika exekutatu aurretik gertatzen da. PSR-7 eskaerak HTTP mezua deskribatzen du, eta bidalketa aukera hauek garraioa kontrolatzen dute. Proxy balio bat mezuaren ondoan inprimatzeak edo gordetzeak ezin du beste modu batera bidaltzen duen eragiketa bat konfiguratu.
Itzuli requestAsync() fabrikatik. Bertan request() sinkronoa deitzeak blokea dezake pool-ak lan konkurrentea hasteko saiakera egiten duen bitartean.
Gehitu betetako eta baztertutako callback-ak aplikazioaren lehendik dagoen kudeaketarekin. Mantendu lanaren gakoa, hautatutako proxy identifikatzailea eta saiakera-zenbakia bi emaitzetan; osatzeko ordena desberdina da sarrerako ordenaren aldean. Ez hautatu isilpean beste helmuga-puntu bat fabrikan lanarentzat bat erregistratu ondoren.
Konkurrentzia-balioak pool honen lana mugatzen du. Proxy edo kontu mugatu bakarra hautatzen duten hainbat lanek oraindik helmuga-puntu horretarako aurrekontu bereizia behar izan dezakete.
Interpretatu emaitzak etapaka: helmugaren baztertzea, proxyaren autentifikazioa eta konexioaren denbora-muga emaitza desberdinak dira. Lanarekin gordetako bidalketa aukerek erakusten dute zein ibilbidek sortu zuen emaitza bakoitza.