PHP中的asynchronous函数调用

我正在开发一个PHP Web应用程序,我需要在请求中执行一些networking操作,例如根据用户请求从远程服务器获取某人。

是否有可能模拟PHP中的asynchronous行为,因为我必须传递一些数据到一个函数,也需要输出。

我的代码是这样的:

<?php $data1 = processGETandPOST(); $data2 = processGETandPOST(); $data3 = processGETandPOST(); $response1 = makeNetworkCall($data1); $response2 = makeNetworkCall($data2); $response3 = makeNetworkCall($data3); processNetworkResponse($response1); processNetworkResponse($response2); processNetworkResponse($response3); /*HTML and OTHER UI STUFF HERE*/ exit; ?> 

每个networking操作需要大约5秒钟,以完成总共15秒加我的应用程序的响应时间,因为我提出了3个请求。

makeNetworkCall()函数只是做一个HTTP POST请求。

远程服务器是第三方API,所以我没有任何控制。

PS:请不要回答关于AJAX或其他事情的build议。 我目前正在寻找,如果我可以通过PHP做到这一点可能是一个C + +扩展或类似的东西。

我相信答案在这里:

PHP线程调用asynchronousphp函数

快速注意:使用线程

cURL将成为你唯一真正的select(无论是,或使用非阻塞套接字和一些自定义逻辑)。

这个链接应该给你正确的方向。 在PHP中没有asynchronous处理,但是如果您尝试同时发出多个Web请求,cURL Multi将为您处理这个问题。

我没有直接的答案,但你可能想看看这些东西:

我认为,如果HTML和其他用户界面的东西需要返回的数据,那么不会有一种方法来asynchronous它。

我相信在PHP中执行此操作的唯一方法是在数据库中logging请求,并且每分钟执行一次cron检查,或者使用像Gearman队列处理之类的东西,或者使用exec()命令行进程

在此期间,您的PHP页面将不得不生成一些html或js,使它每隔几秒重新加载检查进度,不理想。

为了避开这个问题,你需要多less个不同的请求? 你可以每小时自动下载一次,并保存到数据库?

现在,最好是使用队列而不是线程(对于那些不使用Laravel的人来说,这里有大量其他的实现)。

基本的想法是,您的原始PHP脚本将任务或作业放入队列中。 然后你有在其他地方运行的队列工作者,把工作从队列中取出,并开始独立于原始的PHP处理它们。

优点是:

  1. 可伸缩性 – 您可以添加工作节点以跟上需求。 这样,任务并行运行。
  2. 可靠性 – 像RabbitMQ,ZeroMQ,Redis等现代化的队列pipe理器是非常可靠的。

还有http v2是curl的包装。 可以通过pecl来安装。

http://devel-m6w6.rhcloud.com/mdref/http/