HttpRequestPool类提供了一个解决方案 。非常感谢那些指出这一点的人。
可以在以下位置找到一个简短的教程:http ://www.phptutorial.info/?HttpRequestPool-construct
问题
我想在 PHP 中发出并发/并行/同时的 HTTP 请求。我想避免连续的请求:
- 一组请求需要很长时间才能完成;请求越多时间越长
- 一个请求在一组中途超时可能会导致以后的请求无法发出(如果脚本有执行时间限制)
我设法找到了使用 cURL 在 PHP 中同时发出 [原文如此] HTTP 请求的详细信息,但是如果可能的话,我想明确地使用 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功能:
- 他们提供了一个不错的 OOP 界面
- 它们在有问题的应用程序中被广泛使用,并且从维护的角度来看,坚持已经使用的应该是有益的
- 与使用 cURL 相比,我通常必须编写更少的代码行来使用 PECL HTTP 函数发出 HTTP 请求 - 从维护的角度来看,更少的代码行也应该是有益的
澄清 2:我意识到 PHP 的 HTTP 函数不是内置的,也许我在那里用词错误,我会更正。我不担心人们必须安装额外的东西——这不是一个要分发的应用程序,它是一个带有服务器的网络应用程序。
澄清 3:如果有人权威地声明 PECL HTTP 不能做到这一点,我会非常高兴。