«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как добиться асинхронных запросов cURL в PHP?

Как добиться асинхронных запросов cURL в PHP?

Опубликовано 11 ноября 2024 г.
Просматривать:385

How to Achieve Asynchronous cURL Requests in PHP?

Асинхронный запрос на скручивание в PHP

Выполнение нескольких запросов на скручивание одновременно может стать проблемой в PHP. В этой статье мы рассмотрим различные подходы к достижению асинхронного выполнения с использованием встроенных функций и внешних библиотек.

многопоточность cURL

Функции PHP Curl_multi_* позволяют для асинхронного выполнения нескольких запросов cURL. Вот пример:

curl_multi_init();
$mh = curl_multi_init();

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, 'http://example.com/endpoint');
curl_multi_add_handle($mh, $ch1);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, 'http://example.com/endpoint2');
curl_multi_add_handle($mh, $ch2);

$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

pthreads

Библиотека pthreads позволяет осуществлять многопоточное программирование на PHP. Используя pthreads, асинхронные запросы на закручивание можно реализовать следующим образом:

class RequestThread extends Thread {
    public function run() {
        $ch = curl_init();
        // ... set cURL options here

        curl_exec($ch);
        curl_close($ch);
    }
}

$thread = new RequestThread();
$thread->start();

Параллельное выполнение с использованием библиотеки

Существуют также библиотеки, специально разработанные для параллельного выполнения в PHP, такие как параллельные функции и параллельные запрос. Вот пример использования библиотеки параллельных запросов:

use Parallel\{Task, Runtime};

$runtime = new Runtime;

$tasks = [
    new Task(function () {
        // ... cURL request 1
    }),
    new Task(function () {
        // ... cURL request 2
    }),
];

$runtime->run($tasks);

Соображения

При выполнении асинхронных запросов важно учитывать ограничения ресурсов сервера и потенциальные узкие места. Также крайне важно обрабатывать ошибки и исключения, которые могут возникнуть во время выполнения.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3