2

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

问题是每个 API 调用大约需要 5 秒来执行。使用 3 个 API 调用,每次 5 秒,执行脚本大约需要 15 秒。

有没有一种方法可以让我同时启动三个 API 调用,一旦最后一个调用完成,合并结果?如果可能的话,我可能会将时间长度从 15 秒缩短到 5 秒,从而显着改善我的用户体验。

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

4

2 回答 2

1

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

如果您必须从 Web 请求启动它,您可以尝试使用shell_exec在后台生成一个主 PHP CLI 进程(附加&在末尾),然后使用 pcntl_fork 来划分工作。

如果您只是在等待网络请求,我会按照 Dagon 的建议使用curl_multi函数。但是如果你有其他密集的任务,如果使用得当,分叉会很有用。

于 2012-11-22T20:23:10.193 回答
0

http://docs.php.net/Thread

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

于 2012-11-23T19:56:26.913 回答