为什么指数退避(在 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"。
为什么客户端应用程序在重试之前要等待两倍于之前的时间?
让我们想想这个场景;
我的客户下载了应用程序。
客户直到晚上才打开应用。
客户打算在睡觉前打开应用程序。
应用已启动,客户端使用了离线功能。
客户端此时没有网络连接。
所以,我的应用程序会整夜尝试将客户端注册到 GCM,直到客户端可以上网,指数退避时间达到数小时或数天。
那么,这不是一种不好的做法吗?为什么 google 会这样建议?我认为,开发人员至少应将最大(限制)时间设置为指数退避时间。
GCM 指南:
https://developers.google.com/cloud-messaging/registration
按照你给的标准 link,我在下面找到了子 link。
请阅读以更好地理解该过程。
你尝试了一定的次数(或者直到达到两次请求之间的最大间隔),它需要停在那里。然后当用户使用该应用程序或您收到 Internet_state_change 事件时,它将再次循环。
默认 retry_interval 为 0.5 秒,默认 randomization_factor 为 0.5,默认倍数为 1.5,默认 max_interval 为 1 分钟。对于 10 次尝试,序列将是(以秒为单位的值)并假设我们在第 10 次尝试时超过 max_elapsed_time:
我已阅读 GCM(Google 云消息传递)指南。上面写道,如果客户端注册到 GCM 失败,我们应该重试注册过程。 Google 关于指数退避的建议:"the client app should wait twice the previous amount of time before retrying"。
为什么客户端应用程序在重试之前要等待两倍于之前的时间?
让我们想想这个场景;
我的客户下载了应用程序。
客户直到晚上才打开应用。
客户打算在睡觉前打开应用程序。
应用已启动,客户端使用了离线功能。
客户端此时没有网络连接。
所以,我的应用程序会整夜尝试将客户端注册到 GCM,直到客户端可以上网,指数退避时间达到数小时或数天。
那么,这不是一种不好的做法吗?为什么 google 会这样建议?我认为,开发人员至少应将最大(限制)时间设置为指数退避时间。
GCM 指南: https://developers.google.com/cloud-messaging/registration
按照你给的标准 link,我在下面找到了子 link。
请阅读以更好地理解该过程。
你尝试了一定的次数(或者直到达到两次请求之间的最大间隔),它需要停在那里。然后当用户使用该应用程序或您收到 Internet_state_change 事件时,它将再次循环。
默认 retry_interval 为 0.5 秒,默认 randomization_factor 为 0.5,默认倍数为 1.5,默认 max_interval 为 1 分钟。对于 10 次尝试,序列将是(以秒为单位的值)并假设我们在第 10 次尝试时超过 max_elapsed_time: