Metu la prokuron de ĉiu Guzzle-tasko sur la nesinkronan operacion, kiun la pool komencas. Ene de ekzistanta klienta agordo, uzu promesfabrikojn:

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

Ĉiu validigita tasko provizas celon kaj prokuron. Por permesita publika peto, HTTP-kandidato el la HTTP-prokura listo povas provizi la prokuran URL de tiu tasko sen akreditaĵoj; la elekto okazas antaŭ ol ĝia fabriko ekfunkcias. PSR-7-peto priskribas la HTTP-mesaĝon, dum ĉi tiuj sendaj opcioj regas la transporton. Printi aŭ konservi prokuran valoron apud la mesaĝo ne povas agordi operacion, kiu sendas ĝin alimaniere.

Redonu requestAsync() el la fabriko. Alvoki sinkronan request() tie povas bloki, dum la pool provas komenci samtempan laboron.

Aldonu retrovokojn por plenumitaj kaj malakceptitaj rezultoj per la ekzistanta pritraktado de la aplikaĵo. Konservu la taskŝlosilon, la identigilon de la elektita prokuro kaj la provnumeron en ambaŭ rezultoj; la fina ordo diferencas de la eniga ordo. Ne sekrete elektu alian finpunkton en la fabriko post kiam unu estas registrita por la tasko.

La samtempeca valoro limigas la laboron de ĉi tiu pool. Pluraj taskoj elektantaj unu limigitan prokuron aŭ konton eble ankoraŭ bezonas apartan buĝeton por tiu finpunkto.

Interpretu rezultojn laŭ etapo: malakcepto de celo, prokura aŭtentikigo kaj konekta tempolimo estas malsamaj rezultoj. La sendaj opcioj konservitaj kun la tasko montras, kiu vojo produktis ĉiun rezulton.

Rilataj artikoloj