我正在使用的 API 每秒最多允许 5 个请求。如果超过此限制,API 将返回 429 服务器错误。
我的直觉表明,要处理这个问题,我应该将所有请求放入某种形式的串行队列中,并在请求之间强制执行 0.21 秒的延迟,但我不太确定如何实现这一点。我也不确定使用串行队列是否是一个好主意,因为那样我将失去同时运行多个请求的能力。
我正在使用适配器和重试器对象来处理刷新我的 OAuth session token ,所以我想这可能是放置我的逻辑的好地方。
有人以前做过类似的事情,或者有什么想法吗?
最佳答案
实际上我可能会走不同的方向,而不是试图限制所有请求,我会查看每个请求的响应,如果是 429,我会通过异步闭包重新排队请求1秒的时间延迟。
这意味着只要请求缓慢传入,它们就会立即执行。但是当您尝试第 6 个请求时,它会转移到下一秒。
您必须考虑的唯一问题(无论采用哪种解决方案)是,如果请求的传入速度持续快于 API 允许的速度,会发生什么情况。 IE。如果每秒收到 6、7 或 100 个请求,会发生什么情况?您将如何处理永远不会被执行的额外请求。
在某些时候,您的代码将不得不开始失败的请求。或者,您需要插入服务器人员运行更多服务器或为您提供更多带宽。
关于swift - Alamofire 全局队列,请求之间有暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51470595/