<ч />
Класс HttpRequestPool предоставляет решение. Большое спасибо тем, кто указал на это.
Краткое руководство можно найти по адресу: http://www.phptutorial.info/?HttpRequestPool-construct
<ч />
Задача
Я бы хотел сделать параллельные / параллельные / одновременные HTTP-запросы в PHP. Я хотел бы избежать последовательных запросов как:
- набор запросов займет слишком много времени; чем больше запросов, тем дольше
- тайм-аут одного запроса в середине набора может привести к тому, что последующие запросы не будут выполнены (если у скрипта есть ограничение по времени выполнения)
Мне удалось найти детали для одновременного выполнения HTTP-запросов в PHP с помощью cURL , однако я бы хотел явно использовать PHP HTTP-функции , если это вообще возможно.
В частности, мне нужно одновременно отправлять данные в набор URL-адресов. URL-адреса, на которые публикуются данные, находятся вне моего контроля; они устанавливаются пользователем.
Я не против, если мне нужно дождаться завершения всех запросов, прежде чем ответы будут обработаны. Если для каждого запроса я устанавливаю тайм-аут в 30 секунд, и запросы выполняются одновременно, я знаю, что должен ждать максимум 30 секунд (возможно, чуть больше) для выполнения всех запросов.
Я не могу найти подробностей о том, как этого можно достичь. Однако недавно я заметил в руководстве по PHP о PHP5 + упоминание о том, что он может обрабатывать параллельные HTTP-запросы - я намеревался сделать это в то время, забыл и не могу найти его снова.
Пример одного запроса (работает нормально)
<?php
$request_1 = new HttpRequest($url_1, HTTP_METH_POST);
$request_1->setRawPostData($dataSet_1);
$request_1->send();
?>
Пример одновременного запроса (неполный, явно)
<?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
?>
Любые мысли будут наиболее ценными!
Разъяснение 1 : Я хотел бы придерживаться функций PECL HTTP как:
- они предлагают хороший интерфейс ООП
- они широко используются в рассматриваемом приложении, и придерживаться того, что уже используется, должно быть выгодно с точки зрения обслуживания
- Как правило, мне нужно написать меньше строк кода для выполнения HTTP-запроса с использованием функций PECL HTTP по сравнению с использованием cURL - меньшее количество строк кода также должно быть полезным с точки зрения обслуживания
Разъяснение 2 : Я понимаю, что HTTP-функции PHP не встроены, и, возможно, я неправильно сформулировал их, что я исправлю. Я не беспокоюсь о том, что людям нужно устанавливать дополнительные компоненты - это не приложение, которое должно распространяться, а веб-приложение с самим сервером.
Разъяснение 3 : Я был бы совершенно счастлив, если бы кто-то авторитетно заявил, что HTTP PECL не может сделать это.