Guzzle ажил бүрийн проксийг pool эхлүүлдэг асинхрон үйлдэл дээр тавь. Одоо байгаа клиент тохиргооны дотор promise үйлдвэрүүдийг ашигла:

$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() дуудах нь pool зэрэгцээ ажил эхлүүлэх гэж байх үед блоклож болно.

Гүйцэтгэсэн болон татгалзсан үр дүнгийн callback-уудыг програмын одоо байгаа боловсруулалтаар нэм. Ажлын түлхүүр, сонгосон прокси танигч, оролдлогын дугаарыг хоёр үр дүнд хадгал; дуусах дараалал нь оруулах дарааллаас ялгаатай. Ажилд нэгийг бүртгэсний дараа үйлдвэрт нууцаар өөр төгсгөлийн цэг сонгохгүй бай.

Зэрэгцээ байдлын утга энэ pool-ын ажлыг хязгаарлана. Нэг хязгаарлагдмал прокси эсвэл бүртгэл сонгосон хэд хэдэн ажилд орсоор тэр төгсгөлийн цэгт тусдаа төсөв шаардлагатай байж болно.

Үр дүнг шат дараагаар тайлбарла: очих газрын татгалзал, прокси баталгаажуулалт, холболтын хугацаа дуусах нь өөр өөр үр дүн юм. Ажлын хамт хадгалсан илгээх тохиргоо нь аль зам үр дүн бүрийг гаргасныг харуулна.

Холбоотой нийтлэлүүд