ໃສ່ proxy ຂອງແຕ່ລະວຽກ Guzzle ໃສ່ການດຳເນີນການແບບ async ທີ່ pool ເລີ່ມ. ພາຍໃນການຕັ້ງຄ່າ client ທີ່ມີຢູ່ແລ້ວ, ໃຊ້ factory ສັນຍາ:

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

ແຕ່ລະວຽກທີ່ຜ່ານການກວດສອບໃຫ້ຈຸດໝາຍປາຍທາງ ແລະ proxy ໜຶ່ງອັນ. ສຳລັບຄຳຮ້ອງສາທາລະນະທີ່ໄດ້ຮັບອະນຸຍາດ, ຜູ້ສະໝັກ HTTP ຈາກລາຍຊື່ proxy HTTP ສາມາດໃຫ້ URL proxy ທີ່ບໍ່ມີຂໍ້ມູນຢືນຢັນຂອງວຽກນັ້ນ; ການເລືອກເກີດຂຶ້ນກ່ອນ factory ຂອງມັນເຮັດວຽກ. ຄຳຮ້ອງ PSR-7 ອະທິບາຍຂໍ້ຄວາມ HTTP, ໃນຂະນະທີ່ທາງເລືອກການສົ່ງເຫຼົ່ານີ້ຄວບຄຸມການຂົນສົ່ງ. ການພິມ ຫຼື ເກັບຄ່າ proxy ໄວ້ຂ້າງຂໍ້ຄວາມບໍ່ສາມາດຕັ້ງຄ່າການດຳເນີນການທີ່ສົ່ງມັນໃນທາງອື່ນໄດ້.

ສົ່ງຄືນ requestAsync() ຈາກ factory. ການເອີ້ນ request() ແບບ sync ຢູ່ນັ້ນອາດສະກັດກັ້ນໃນຂະນະທີ່ pool ພະຍາຍາມເລີ່ມວຽກພ້ອມກັນ.

ເພີ່ມ callback ສຳລັບຜົນທີ່ສຳເລັດ ແລະ ຖືກປະຕິເສດໂດຍໃຊ້ການຈັດການທີ່ມີຢູ່ຂອງແອັບ. ເກັບກຸນແຈວຽກ, ຕົວລະບຸ proxy ທີ່ເລືອກ ແລະ ໝາຍເລກຄັ້ງລອງໄວ້ໃນທັງສອງຜົນ; ລຳດັບການສຳເລັດແຕກຕ່າງຈາກລຳດັບການປ້ອນ. ຢ່າເລືອກຈຸດສຸດທ້າຍອື່ນໃນ factory ຢ່າງລັບໆ ຫຼັງຈາກບັນທຶກໜຶ່ງສຳລັບວຽກແລ້ວ.

ຄ່າ concurrency ຈຳກັດວຽກຂອງ pool ນີ້. ຫຼາຍວຽກທີ່ເລືອກ proxy ຫຼື ບັນຊີດຽວທີ່ຈຳກັດອາດຍັງຕ້ອງການງົບປະມານແຍກສຳລັບຈຸດສຸດທ້າຍນັ້ນ.

ຕີຄວາມຜົນຕາມຂັ້ນຕອນ: ການປະຕິເສດຈຸດໝາຍປາຍທາງ, ການຢືນຢັນ proxy ແລະ ການໝົດເວລາການເຊື່ອມຕໍ່ແມ່ນຜົນທີ່ແຕກຕ່າງກັນ. ທາງເລືອກການສົ່ງທີ່ເກັບໄວ້ກັບວຽກສະແດງໃຫ້ເຫັນວ່າເສັ້ນທາງໃດໃຫ້ແຕ່ລະຜົນ.

ບົດຄວາມທີ່ກ່ຽວຂ້ອງ