PHP中的异步API调用

时间:2012-11-22 19:54:05

标签: php asynchronous

我有一个PHP脚本需要进行三次单独的API调用,合并结果并将其输出给用户。

问题是每个API调用大约需要5秒钟才能执行。每次5秒钟进行3次API调用,执行脚本大约需要15秒。

有没有办法可以以某种方式同时启动三个API调用,一旦最后一个完成,结合结果?如果可能的话,我可以将时间长度从15秒减少到5秒,从而大大提高了我的用户体验。

我研究了PHP中的异步函数调用,但似乎并没有很多好的选择。我希望那里的某个人处于类似的情况,并找到一种优雅的方式来处理这个问题。

2 个答案:

答案 0 :(得分:1)

PHP脚本本身是单线程的。有一些方法可以使用pcntl_fork函数在PHP中“分叉”子进程。但据我所知,这只适用于CLI sapi。对于任何Web服务器sapi,无论是有缺陷还是不支持。

如果您必须从Web请求启动它,您可以尝试使用shell_exec在后台生成主PHP CLI进程(最后添加&),然后使用pcntl_fork将工作分开。

如果您只是在等待网络请求,我会遵循Dagon建议使用curl_multi功能。但如果你有其他密集型任务,如果使用得当,分叉会很有用。

答案 1 :(得分:0)

http://docs.php.net/Thread

这就是整个答案,尽可能简短:是的,完全按照你想象的方式(我希望)。