"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo lograr solicitudes de cURL asincrónicas en PHP?

¿Cómo lograr solicitudes de cURL asincrónicas en PHP?

Publicado el 2024-11-11
Navegar:353

How to Achieve Asynchronous cURL Requests in PHP?

Solicitud curl asincrónica en PHP

Ejecutar múltiples solicitudes curl simultáneamente puede ser un desafío en PHP. En este artículo, exploraremos diferentes enfoques para lograr la ejecución asincrónica utilizando funciones integradas y bibliotecas externas.

cURL multiproceso

Las funciones curl_multi_* de PHP permiten para la ejecución asincrónica de múltiples solicitudes cURL. Aquí hay un ejemplo:

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

La biblioteca pthreads permite la programación multiproceso en PHP. Usando pthreads, las solicitudes curl asincrónicas se pueden lograr de esta manera:

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

Ejecución paralela usando biblioteca

También hay bibliotecas diseñadas específicamente para la ejecución paralela en PHP, como funciones paralelas y funciones paralelas. pedido. A continuación se muestra un ejemplo que utiliza la biblioteca de solicitudes paralelas:

use Parallel\{Task, Runtime};

$runtime = new Runtime;

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

$runtime->run($tasks);

Consideraciones

Al ejecutar solicitudes asincrónicas, es importante considerar los límites de recursos del servidor y los posibles cuellos de botella. También es crucial manejar errores y excepciones que puedan ocurrir durante la ejecución.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3