我有一个PHP脚本需要进行三次单独的API调用,合并结果并将其输出给用户。
问题是每个API调用大约需要5秒钟才能执行。每次5秒钟进行3次API调用,执行脚本大约需要15秒。
有没有办法可以以某种方式同时启动三个API调用,一旦最后一个完成,结合结果?如果可能的话,我可以将时间长度从15秒减少到5秒,从而大大提高了我的用户体验。
我研究了PHP中的异步函数调用,但似乎并没有很多好的选择。我希望那里的某个人处于类似的情况,并找到一种优雅的方式来处理这个问题。
答案 0 :(得分:1)
PHP脚本本身是单线程的。有一些方法可以使用pcntl_fork函数在PHP中“分叉”子进程。但据我所知,这只适用于CLI sapi。对于任何Web服务器sapi,无论是有缺陷还是不支持。
如果您必须从Web请求启动它,您可以尝试使用shell_exec在后台生成主PHP CLI进程(最后添加&
),然后使用pcntl_fork将工作分开。
如果您只是在等待网络请求,我会遵循Dagon建议使用curl_multi功能。但如果你有其他密集型任务,如果使用得当,分叉会很有用。
答案 1 :(得分:0)
这就是整个答案,尽可能简短:是的,完全按照你想象的方式(我希望)。