gpt4 book ai didi

php - 使用 PECL HTTP 类在 PHP 中进行并行 HTTP 请求 [答案 : HttpRequestPool class]

转载 作者:可可西里 更新时间:2023-10-31 22:12:14 27 4
gpt4 key购买 nike


<强>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正是您要找的。

详细一点,您可以使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com