PHP 中的异步函数调用

2022-08-30 07:36:44

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

是否可以在PHP中模拟异步行为,因为我必须将一些数据传递给函数,并且还需要从中输出。

我的代码是这样的:

<?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;
?>

每个网络操作大约需要5秒才能完成,在我发出3个请求的情况下,我的应用程序的响应时间总共增加了15秒。

makeNetworkCall() 函数只执行 HTTP POST 请求。

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

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


答案 1

如今,使用队列比使用线程更好(对于那些不使用Laravel的人来说,还有很多其他类似这样的实现)。

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

其优点是:

  1. 可扩展性 - 您只需添加工作线程节点即可满足需求。通过这种方式,任务可以并行运行。
  2. 可靠性 - 现代队列管理器(如 RabbitMQ、ZeroMQ、Redis 等)非常可靠。

答案 2

这个老问题有了新的答案。现在有一些PHP的“异步”解决方案(它们相当于Python的多进程,因为它们产生了新的独立PHP进程,而不是在框架级别管理它)。

我看到的两个解决方案是

试一试吧!


推荐