Helyezze minden Guzzle-feladat proxyját arra az aszinkron műveletre, amelyet a pool elindít. Egy meglévő kliensbeállításon belül promise-gyárakat használjon:

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

Minden érvényesített feladat egy célt és egy proxyt ad. Egy engedélyezett nyilvános kéréshez a HTTP proxy listából származó HTTP-jelölt adhatja a feladat hitelesítő adatok nélküli proxy URL-jét; a kiválasztás a gyára futása előtt történik. A PSR-7 kérés a HTTP-üzenetet írja le, míg ezek a küldési beállítások az átvitelt vezérlik. Egy proxyérték kinyomtatása vagy tárolása az üzenet mellett nem tud olyan műveletet beállítani, amely másként küldi el.

A gyárból requestAsync() adjon vissza. A szinkron request() hívása ott blokkolhat, miközben a pool párhuzamos munkát próbál indítani.

Adjon hozzá teljesült és elutasított visszahívásokat az alkalmazás meglévő kezelésével. Őrizze meg a feladat kulcsát, a kiválasztott proxy azonosítóját és a kísérlet számát mindkét kimenetben; a befejezési sorrend eltér a bemeneti sorrendtől. Ne válasszon titokban másik végpontot a gyárban, miután egyet már rögzített a feladathoz.

A párhuzamossági érték korlátozza ennek a poolnak a munkáját. Több feladat, amely egy korlátozott proxyt vagy fiókot választ, továbbra is igényelhet külön keretet ahhoz a végponthoz.

Értelmezze az eredményeket szakaszonként: a cél elutasítása, a proxy hitelesítése és a kapcsolati időtúllépés különböző kimenetek. A feladattal megőrzött küldési beállítások megmutatják, melyik útvonal adta az egyes eredményeket.

Kapcsolódó cikkek