我正在使用一个API,该API每秒最多只能允许5个请求。如果超出此限制,API将返回429服务器错误。
我的直觉是要处理此问题,我应该将所有请求放入某种形式的串行队列中,并在请求之间强制执行0.21s的延迟,但是我不确定如何完成此操作。我也不确定使用串行队列是否是一个好主意,因为那样我将失去同时运行多个请求的能力。
我正在使用适配器和重试器对象来处理刷新我的OAuth会话令牌,因此我想这可能是放置我的逻辑的好地方。
有人有没有做过这样的事情,或者有什么想法?
答案 0 :(得分:0)
实际上,我可能会选择不同的方向,而不是尝试限制所有请求,而是查看每个请求的响应,如果它是429,我将通过异步闭包重新排队请求1秒的时间延迟。
这意味着只要请求传入缓慢,它们就会立即执行。但是,当您尝试第6个请求时,它会转移到下一秒。
您唯一要考虑的问题(与解决方案无关)是,如果请求的传入速度超过API所允许的速度,将会发生什么。即。如果每秒收到6个,每秒7个或100个请求,该怎么办?您将如何处理永远不会执行的额外请求。
在某些时候,您的代码将不得不开始失败的请求。或者,您需要推动服务器人员运行更多服务器或为您提供更多带宽。