如何在php代码库中停止请求带有504超时响应的外部API

如何在php代码库中停止请求带有504超时响应的外部API,php,api,timeout,http-status-code-504,Php,Api,Timeout,Http Status Code 504,我使用curl在我的PHP应用程序中请求一个免费的外部第三方API。当一次有太多请求时,它会下降&显示504网关超时。是否有任何选择,当一个请求在超过5秒内没有响应时,它将停止等待API响应并转到下一个语句 正如我所知,在应用程序中添加外部API时,会成为一种依赖关系。需要你的关注和指导 谢谢。当第三方web服务器无法处理每分钟一定数量的请求时,会通过返回504错误触发“自卫”。为了避免这种情况,您需要在达到限制之前或出现错误之后通过限制请求数量来尊重他们的服务质量(QoS)。您可以通过以下方式

我使用curl在我的PHP应用程序中请求一个免费的外部第三方API。当一次有太多请求时,它会下降&显示504网关超时。是否有任何选择,当一个请求在超过5秒内没有响应时,它将停止等待API响应并转到下一个语句

正如我所知,在应用程序中添加外部API时,会成为一种依赖关系。需要你的关注和指导


谢谢。

当第三方web服务器无法处理每分钟一定数量的请求时,会通过返回504错误触发“自卫”。为了避免这种情况,您需要在达到限制之前或出现错误之后通过限制请求数量来尊重他们的服务质量(QoS)。您可以通过以下方式实现:

  • 通过a)查看第三方网站的文档或询问,b)检查API的结果,或者通过c)试验和测量,找出第三方网站每分钟可以处理多少请求
  • 使用某种类型的队列,将该API的所有请求添加到该队列中,并使用一种代码,该代码将在队列中有消息时处理消息,然后调用API,然后从队列中删除或移动到失败的队列。对于队列,您可以使用外部库或创建一个简单的表,将消息保存为记录。可以在corn作业上执行代码检查和处理队列
  • 计算到目前为止您发送了多少个请求,以及自上次请求发送以来的最后一次请求。如果需要,请检查请求是否小于限制-1。如果小于,则执行API请求;如果大于或接收到504,则等待1分钟,例如“睡眠(60)”,然后再次发送请求

  • 最好在504发生之前避免,因为API网站返回504的时间可能比防止504所需的时间更长。

    发生的情况是,第三方web服务器在每分钟无法处理一定数量的请求时,通过返回504错误触发“自卫”。为了避免这种情况,您需要在达到限制之前或出现错误之后通过限制请求数量来尊重他们的服务质量(QoS)。您可以通过以下方式实现:

  • 通过a)查看第三方网站的文档或询问,b)检查API的结果,或者通过c)试验和测量,找出第三方网站每分钟可以处理多少请求
  • 使用某种类型的队列,将该API的所有请求添加到该队列中,并使用一种代码,该代码将在队列中有消息时处理消息,然后调用API,然后从队列中删除或移动到失败的队列。对于队列,您可以使用外部库或创建一个简单的表,将消息保存为记录。可以在corn作业上执行代码检查和处理队列
  • 计算到目前为止您发送了多少个请求,以及自上次请求发送以来的最后一次请求。如果需要,请检查请求是否小于限制-1。如果小于,则执行API请求;如果大于或接收到504,则等待1分钟,例如“睡眠(60)”,然后再次发送请求

  • 最好在它发生之前避免504,因为API网站返回它的时间可能比阻止它所需的时间更长。

    您是否已经尝试了curl_setopt($ch,CURLOPT_TIMEOUT,5)?您是否已经尝试了curl_setopt($ch,CURLOPT_TIMEOUT,5)?