为什么指数退避(在 GCM 中)在重试之前等待两倍于之前的时间?

Why should exponential back-off(in GCM) wait twice the previous amount of time before retrying?

我已阅读 GCM(Google 云消息传递)指南。上面写道,如果客户端注册到 GCM 失败,我们应该重试注册过程。 Google 关于指数退避的建议:"the client app should wait twice the previous amount of time before retrying"。

为什么客户端应用程序在重试之前要等待两倍于之前的时间?

让我们想想这个场景;

  1. 我的客户下载了应用程序。

  2. 客户直到晚上才打开应用。

  3. 客户打算在睡觉前打开应用程序。

  4. 应用已启动,客户端使用了离线功能。

  5. 客户端此时没有网络连接。

  6. 所以,我的应用程序会整夜尝试将客户端注册到 GCM,直到客户端可以上网,指数退避时间达到数小时或数天。

那么,这不是一种不好的做法吗?为什么 google 会这样建议?我认为,开发人员至少应将最大(限制)时间设置为指数退避时间。

GCM 指南: https://developers.google.com/cloud-messaging/registration

按照你给的标准 link,我在下面找到了子 link。

ExponentialBackOff

请阅读以更好地理解该过程。

你尝试了一定的次数(或者直到达到两次请求之间的最大间隔),它需要停在那里。然后当用户使用该应用程序或您收到 Internet_state_change 事件时,它将再次循环。

Example from the link :-

默认 retry_interval 为 0.5 秒,默认 randomization_factor 为 0.5,默认倍数为 1.5,默认 max_interval 为 1 分钟。对于 10 次尝试,序列将是(以秒为单位的值)并假设我们在第 10 次尝试时超过 max_elapsed_time: