问题描述
我正在使用curl在我的PHP应用程序中请求一个免费的外部第三方API。如果一次有太多请求,它将关闭并显示504网关超时。是否有任何选择,当一个请求超过5秒钟没有响应时,它将停止等待API响应并继续下一条语句?
据我所知,在应用程序中添加外部API时,它会成为依赖项。需要您的关注和指导。
谢谢。
解决方法
发生的情况是,当第3方网络服务器无法处理每分钟一定数量的请求时,它会通过返回504错误来触发“自卫”。为避免出现这种情况,您需要在达到限制之前或收到错误之后通过限制请求数量来兑现其服务质量(QoS)。您可以通过以下方式做到这一点:
- 查找第三方网站每分钟可以处理的请求数量,方法是:a)查看其文档或进行询问; b)检查API的结果,在一分钟内允许您进行多少请求;或c)实验并进行测量。
- 使用某种队列,对该队列的所有请求都将添加到该队列中,并且一旦队列中有消息,该代码将处理消息,然后调用API,然后从队列中删除或移至fail_queue。对于队列,您可以使用外部库或创建一个简单表,将消息另存为记录。代码检查和处理队列可以在玉米作业上执行。
- 计算到目前为止发送的请求数以及自上次发送请求以来的最后时间。检查请求是否小于限制1。如果执行次数较少,则执行一次API请求;如果收到的请求数大于或等于504,则等待1分钟,例如“ sleep(60)”,然后再发送请求。
最好避免发生504,因为API网站返回它的时间可能比阻止它所需的时间更长。