Guzzle Pool: välitä jokaisen työn proxy requestAsyncille
Liitä proxy-asetukset jokaiseen asynkroniseen toimintoon sen sijaan, että ne sidottaisiin PSR-7-pyyntöviestiin tai estävään tehtaaseen.
Aseta jokaisen Guzzle-työn proxy sille asynkroniselle toiminnolle, jonka pool käynnistää. Olemassa olevan asiakasasetuksen sisällä käytä lupauksia tuottavia tehtaita:
$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();
Jokainen validoitu työ tarjoaa kohteen ja proxyn. Sallitulle julkiselle pyynnölle HTTP-proxyluettelosta tuleva HTTP-ehdokas voi tarjota kyseisen työn tunnisteettoman proxy-URL:n; valinta tapahtuu ennen sen tehtaan suorittamista. PSR-7-pyyntö kuvailee HTTP-viestin, kun taas nämä lähetysasetukset ohjaavat siirtoa. Proxyn arvon tulostaminen tai tallentaminen viestin viereen ei voi määrittää toimintoa, joka lähettää sen toisin.
Palauta tehtaasta requestAsync(). Synkronisen request():n kutsuminen siellä voi estää, kun pool yrittää aloittaa samanaikaista työtä.
Lisää toteutuneiden ja hylättyjen tulosten takaisinkutsut sovelluksen nykyisellä käsittelyllä. Säilytä työn avain, valitun proxyn tunniste ja yrityksen numero molemmissa tuloksissa; valmistumisjärjestys eroaa syötejärjestyksestä. Älä valitse salaa toista päätepistettä tehtaassa sen jälkeen, kun työlle on kirjattu yksi.
Samanaikaisuuden arvo rajoittaa tämän poolin työtä. Useat työt, jotka valitsevat yhden rajoitetun proxyn tai tilin, voivat silti vaatia erillisen budjetin kyseiselle päätepisteelle.
Tulkitse tuloksia vaiheittain: kohteen hylkääminen, proxyn todennus ja yhteyden aikakatkaisu ovat eri tuloksia. Työn yhteyteen tallennetut lähetysasetukset näyttävät, mikä reitti tuotti minkäkin tuloksen.