<强> HttpRequestPool类提供了解决方案。非常感谢指出这一点的人。
可以在以下位置找到一个简短的教程:http://www.phptutorial.info/?HttpRequestPool-construct
问题
我想在 PHP 中发出并发/并行/同时的 HTTP 请求。我想避免连续请求:
- 一组请求需要很长时间才能完成;请求越多,时间越长
- 一个请求在一组中途超时可能会导致后面的请求无法发出(如果脚本有执行时间限制)
我设法找到制作 simultaneuos [sic] HTTP requests in PHP with cURL 的详细信息, 但是我想明确地使用 PHP 的 HTTP functions如果可能的话。
具体来说,我需要同时将数据发布到一组 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 接口(interface)
- 它们在所讨论的应用程序中被广泛使用,从维护的角度来看,坚持使用已经使用的应该是有益的
- 与使用 cURL 相比,使用 PECL HTTP 函数发出 HTTP 请求通常需要编写更少的代码行 - 从维护的角度来看,更少的代码行也应该是有益的
澄清 2:我意识到 PHP 的 HTTP 函数不是内置的,也许我在那里的措辞有误,我会更正。我不担心人们必须安装额外的东西——这不是一个要分发的应用程序,它是一个带有服务器的网络应用程序。
澄清 3:如果有人权威地声明 PECL HTTP 不能这样做,我将非常高兴。
最佳答案
我很确定HttpRequestPool正是您要找的。p>
详细一点,您可以使用 fork 来实现您正在寻找的东西,但这似乎不必要地复杂并且在 HTML 上下文中不是很有用。虽然我还没有测试过,但这段代码应该是这样的:
// let $requests be an array of requests to send $pool = new HttpRequestPool(); foreach ($requests as $request) { $pool->attach($request); } $pool->send(); foreach ($pool as $request) { // do stuff }
关于php - 使用 PECL HTTP 类在 PHP 中进行并行 HTTP 请求 [答案 : HttpRequestPool class],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/168951/