使用PHP进行异步API调用

时间:2017-10-25 10:47:45

标签: php asynchronous

我有一个PHP应用程序从各种来源获取价格。在每次执行时,都使用Guzzle从20多个API端点加载。由于每次调用的加载时间,每个执行周期需要10-30秒。如果我可以并行进行所有呼叫,我可以将其减少到不到5秒钟。

在PHP中进行并行API调用的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

你可能做错了什么。这些请求应该在后台定期进行,并缓存数据。

利用非阻塞I / O可以实现您的目标。 Curl使用videoType提供此功能,可在Guzzle中使用。但是还有其他库基于非阻塞I / O实现HTTP客户端,而不依赖于curl_multi,例如Artax

Artax基于Amp,它提供了诸如事件循环和承诺之类的基本原语。您可以启动多个请求,然后等待承诺集。

ext-curl

答案 1 :(得分:1)

尝试使用命令转换API调用,例如: 如果你有20个电话,

exec('php apiCall_1.php >> "./log.txt" &') exec('php apiCall_2.php >> "./log.txt" &') . . . . exec('php apiCall_20.php >> "./log.txt" &')

注意:

1-所有这些命令都将在异步中触发(不要忘记在每个命令的末尾添加'&'来触发它,所以它不会等待响应)

2-每个命令通常会将结果(从服务器获取)存储在DB集合/表中。

3-除此之外,你必须编写一个方法,一直查找结果,如果它被插入到数据库中,那么你可以把它拿回来并发回给你的api消费者。