Класс HttpRequestPool предоставляет решение. Большое спасибо тем, кто это указал.
Краткое руководство можно найти по адресу: http://www.phptutorial.info/?HttpRequestPool-construct
Проблема
Я хотел бы сделать параллельные/параллельные/одновременные HTTP-запросы в PHP. Я хотел бы избежать последовательных запросов как:
- набор запросов займет слишком много времени; тем больше запросов больше
- тайм-аут одного запроса на полпути через набор может привести к тому, что последующие запросы не будут выполнены (если script имеет ограничение времени выполнения)
Мне удалось найти детали для создания одновременных [sic] HTTP-запросов в PHP с помощью cURL, однако я бы хотел явно использовать PHP HTTP-функции, если это вообще возможно.
В частности, мне нужно отправлять данные POST одновременно с набором 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. Я хотел бы использовать функции HTTP PECL как:
- они предлагают приятный интерфейс OOP
- они широко используются в рассматриваемом приложении и придерживаются того, что уже используется, должно быть полезно с точки зрения обслуживания.
- Мне обычно приходится писать меньше строк кода, чтобы сделать HTTP-запрос с использованием функций PECL HTTP по сравнению с использованием cURL - меньшее количество строк кода также должно быть полезно с точки зрения обслуживания
Разъяснение 2: Я понимаю, что PHP-HTTP-функции не встроены и, возможно, я неправильно сформулировал то, что я исправлю. Я не беспокоюсь о том, что людям приходится устанавливать дополнительные вещи - это не приложение, которое должно быть распространено, это веб-приложение с сервером для себя.
Разъяснение 3. Я был бы очень доволен, если кто-то авторитетно заявит, что PECL HTTP не может этого сделать.