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.
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