HttpRequestPool класс предоставляет решение. Большое спасибо тем, кто это указал.Параллельные запросы HTTP в PHP с использованием PECL HTTP классов [Ответ: HttpRequestPool класс]
Краткий учебник можно найти по адресу: http://www.phptutorial.info/?HttpRequestPool-construct
Проблема
Я хотел бы, чтобы одновременно/параллельно/одновременных запросов HTTP в PHP. Я хотел бы избежать последовательных запросов:
- набор запросов займет слишком много времени; Чем больше запросов, чем дольше
- таймаут одного запроса на полпути через набор может вызвать последующие запросы не быть (если сценарий имеет ограничение по времени выполнения)
мне удалось найти детали для изготовления simultaneuos [sic] HTTP requests in PHP with cURL , однако я бы хотел явно использовать PHP HTTP functions, если это вообще возможно.
В частности, мне нужно отправлять данные POST одновременно с набором URL-адресов. URL-адреса, на которые распространяются данные, находятся вне моего контроля; они настроены пользователем.
Я не возражаю, если мне нужно дождаться завершения всех запросов до того, как ответы будут обработаны. Если я устанавливаю тайм-аут 30 секунд на каждый запрос, и запросы выполняются одновременно, я знаю, что я должен ждать максимум 30 секунд (возможно, немного больше) для всех запросов.
Я не могу найти подробностей о том, как это может быть достигнуто. Тем не менее, я недавно заметил упоминание в руководстве PHP о том, что PHP5 + может обрабатывать одновременные HTTP-запросы - я намеревался записать его в это время, забыл и не могу найти его снова.
Single Пример запроса (работает отлично)
<?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 как:
- они предлагают приятный интерфейс ООП
- они широко используются в применении в вопросе и придерживаться то, что уже используется, должно быть полезно с точки зрения обслуживания.
- Обычно мне приходится писать меньше строк кода, чтобы сделать HTTP-запрос с использованием функций PECL HTTP по сравнению с использованием cURL. меньшее количество строк кода также должно быть полезно с точки зрения обслуживания
Разъяснения 2: Я понимаю, что функции HTTP в PHP не встроены в системе и, возможно, я сформулированные вещи неправильно там, что я поправлю. Я не беспокоюсь о том, что людям приходится устанавливать дополнительные вещи - это не приложение, которое должно быть распространено, это веб-приложение с сервером для себя.
Уточнение 3: Я был бы совершенно счастлив, если бы кто-то авторитетно заявил, что PECL HTTP не может этого сделать.
Это очень ресурсоемкий. Каждый php-процесс использует как минимум 20 МБ. – Gustav 2013-06-07 10:31:58
Да, это пятилетний ответ. – bobwienholt 2013-06-07 13:35:49