La clase HttpRequestPool proporciona una solución. Muchas gracias a los que señalaron esto.paralelas peticiones HTTP en PHP utilizando PECL clases HTTP [Respuesta: HttpRequestPool clase]
Un breve tutorial se puede encontrar en: http://www.phptutorial.info/?HttpRequestPool-construct
Problema
me gustaría hacer concurrentes/paralelos/solicitudes HTTP simultáneas en PHP. Me gustaría evitar las solicitudes consecutivas como:
- un conjunto de solicitudes tomará demasiado tiempo para completar; los más solicitudes cuanto más tiempo
- el tiempo de espera de una solicitud a medio camino a través de un conjunto puede causar que no se pueden hacer solicitudes posteriores (si un guión tiene un límite de tiempo de ejecución)
he logrado encontrar detalles para hacer simultaneuos [sic] HTTP requests in PHP with cURL Sin embargo, me gustaría utilizar explícitamente el HTTP functions de PHP, si es posible.
Específicamente, necesito POSTAR datos simultáneamente a un conjunto de URL. Las URL a las que se envían los datos están fuera de mi control; están establecidos por el usuario.
No me importa si tengo que esperar a que finalicen todas las solicitudes para poder procesar las respuestas. Si establezco un tiempo de espera de 30 segundos en cada solicitud y las solicitudes se realizan al mismo tiempo, sé que debo esperar un máximo de 30 segundos (quizás un poco más) para que se completen todas las solicitudes.
No puedo encontrar detalles de cómo se puede lograr esto. Sin embargo, hace poco noté una mención en el manual de PHP de PHP5 + que me permitía manejar solicitudes HTTP simultáneas. Tenía la intención de anotarlo en ese momento, olvidarlo y no volver a encontrarlo.
ejemplo de solicitud única (funciona bien)
<?php
$request_1 = new HttpRequest($url_1, HTTP_METH_POST);
$request_1->setRawPostData($dataSet_1);
$request_1->send();
?>
ejemplo de solicitudes simultáneas (incompleta, claro)
<?php
$request_1 = new HttpRequest($url_1, HTTP_METH_POST);
$request_1->setRawPostData($dataSet_1);
$request_2 = new HttpRequest($url_2, HTTP_METH_POST);
$request_2->setRawPostData($dataSet_2);
// ...
$request_N = new HttpRequest($url_N, HTTP_METH_POST);
$request_N->setRawPostData($dataSet_N);
// Do something to send() all requests at the same time
?>
serían más apreciados Cualquier pensamiento!
Aclaración 1: Me gustaría que se adhieren a las funciones HTTP PECL como:
- que ofrecen una interfaz de programación orientada a objetos agradable
- se usan ampliamente en la aplicación en cuestión y ajustarse a lo que ya está en uso debería ser beneficioso desde el punto de vista de mantenimiento
- Por lo general, tengo que escribir menos líneas de código para hacer una solicitud HTTP usando las funciones HTTP PECL en comparación con el uso de cURL: menos líneas de código también deberían ser beneficiosas desde una perspectiva de mantenimiento
Aclaración 2: Me dan cuenta de las funciones de PHP HTTP no se construyen en y tal vez redactadas las cosas erróneamente allí, lo que voy a corregir. No me preocupa que las personas tengan que instalar cosas adicionales; esta no es una aplicación que se distribuirá, es una aplicación web con un servidor para sí misma.
aclaración 3: Estaría muy feliz si alguien autorizadamente indica que el HTTP PECL no puede hacer esto.
No se encontró en 2017 ... – kiltek