我有一个PHP应用程序从各种来源获取价格。在每次执行时,都使用Guzzle从20多个API端点加载。由于每次调用的加载时间,每个执行周期需要10-30秒。如果我可以并行进行所有呼叫,我可以将其减少到不到5秒钟。
在PHP中进行并行API调用的最简单方法是什么?
答案 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消费者。