PHP并发HTTP请求?

5

我想知道在PHP中进行并发HTTP请求的最佳方法是什么?我有很多数据需要获取,我宁愿一次性进行多个请求以检索所有数据。

有人知道我该如何做到这一点吗?最好以匿名/回调函数的方式实现...

谢谢,

汤姆。


2
curl类似,http扩展还提供了并发请求的功能,使用HttpRequestPool类(该类在幕后也只是使用curl)。 - mario
可能是重复问题:https://dev59.com/aXM_5IYBdhLWcg3ww2EQ - igorw
4个回答

12
您可以使用curl_multi,它在单个curl句柄下内部触发多个独立请求。

但是PHP本身不以任何方式为"multithreaded",除非通过粗略的hack(多个并行脚本、一个脚本通过exec()启动多个后台任务等...)才能实现并行运行。


1
事情变了,现在PHP可以使用包含在PHP 8.1中的Fibers进行异步调用。 - Anees Sadeek

2

1

或者,如果您愿意,您可以将数据发送为json。在php中,您可以将其解构为所有值。例如:

xhttp.open("GET", "gotoChatRoomorNot.php?q=[{"+str+"},{"+user1+"},{"+user2"}]", true);

在php中,您可以按照以下步骤获取数据:如何使用PHP从JSON中提取数据?
因此,制作一个以json格式的字符串,并通过http发送整个字符串。我认为您可以使用xml执行相同类型的行为,但我不了解xml。

1

您可以使用 HttpRequestPool http://www.php.net/manual/de/httprequestpool.construct.php

$multiRequests = array(
  new HttpRequest('http://www.google.com', HttpRequest::METH_GET),
  new HttpRequest('http://www.yahoo.com', HttpRequest::METH_GET)
  new HttpRequest('http://www.bing.com', HttpRequest::METH_GET)
);

$pool = new HttpRequestPool();
foreach ($multiRequests as $request)
{
  $pool->attach($request);
}

$pool->send();

foreach($pool as $request) 
{
  echo $request->getResponseBody();
}

在测试这段代码时,我遇到了以下错误:致命错误:未找到类“HttpRequest”。 - Vijaysinh Parmar
你可能正在使用pecl_http的2版本。如果你想使用HttpRequest,你需要安装pecl_http 1.7.6,我想是这样的。多年前,版本2已经完全重写,然而php.net上的文档仍然参考的是版本1。 - Tobias Gassmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接