FCM:Retry-after 和指数退避

FCM: Retry-after and exponential backoff

据我了解,当消息无法传递时,Retry-After header 有时会包含在响应中,有时则不会。但是,如果我首先收到包含 Retry-After 的错误响应,重新发送消息并收到另一个错误响应但不包含 Retry-After,会发生什么情况?我知道我应该使用指数退避,但是当之前的等待时间来自 Retry-After header?

时,它如何工作

想象一下请求和响应的顺序:

Request 1: No waiting
Response 1: Error without Retry-After
Request 2: Wait 2 seconds
Response 2: Error with Retry-After included (let's say 120 seconds)
Request 3: Wait 120 seconds
Response 3: Error without Retry-After
Request 4: How long should I wait? 

我应该等多久才能发送请求 4? 8秒?还是从头开始2秒?

据我所知,指数退避并没有真正的标准方法或间隔。

但是,通常遵循的是,对于每一个连续的不成功请求,等待间隔应该比前一个更长,但如果是第一个错误响应(例如前一个请求成功),则应该恢复为默认值(您设置的值,例如 2 秒)。

一个例子是这样的。

Request 1: No waiting
Response 1: Error without Retry-After
Request 2: Wait 2 seconds // assume 2seconds is your default
Response 2: Error with Retry-After included (let's say 120 seconds)
Request 3: Wait 120 seconds
Response 3: Error without Retry-After
Request 4: 180 // you use the previous value of 120 x 1.5 (sample value increment)
Request 5: ...
Response 5: Success!
Request 6: 1 second (assume default waiting interval per success response)
Response 6: Error without Retry-After included
Request 7: Wait 2 seconds (using the default)

还有一些行为不需要精确的间隔,有些行为混合了随机值作为增量。

您应该看看以下内容: