为什么推送通知首选使用GCM?

7
我知道,是这样的。但我不明白,为什么?
为什么不简单地定期向服务器发送查询?当然,这可能会消耗电池电量并增加互联网流量。我理解这一点。但是,如何使用Google Cloud Messaging可以消除这些问题?
我已经找到了一个答案。但对我来说不是很清楚。
有人能给我一个清晰的解释吗?
1个回答

16
假设您的手机上有50个应用程序没有使用GCM。每个应用程序开发人员决定每分钟轮询其各自的后端是适当的。
由于这些都是独立的应用程序,每个调用可能不会在另一个api调用同时发生。对电池的最大消耗是Android设备中的无线电在关闭后重新打开进行API调用时,多个调用之间的时间间隔更短会更快地耗尽电池(请阅读本文以更好地了解为什么Radio State Machine)。
此外,每个应用程序将访问单独的端点。每次进行API调用时,都必须针对特定服务器执行连接过程。通过批量api请求或HTTP 2.0,发送到同一服务器的多个调用可以通过不必重新进行握手或连接过程来进行优化。
现在想象一下,所有50个应用程序都使用GCM。 GCM将代表所有50个应用程序定期轮询一个端点。假设GCM每分钟轮询一次所有相关应用程序后端发送通知到设备的服务器。您已将50个不同的奇怪时间的API调用减少到一个API调用。您将使用更少的数据进行轮询。您不会因HTTP调用连接到50个不同服务器而产生成本。此外,谷歌正在使用已经存在的轮询来检查操作系统更新,因此使用GCM不会产生额外的网络开销(这些信息基于旧文档What technology does GCM (Google Cloud Messaging) use?)。此外,还可以从Android官网的一篇名为“最小化常规更新影响”的文章中查看以下解释(http://developer.android.com/training/efficient-downloads/regular_updates.html):
每次应用程序轮询服务器以检查是否需要更新时,都会激活无线电并在典型3G连接上耗费多达20秒的功率,这样做是不必要的。
Google Cloud Messaging for Android (GCM)是一种轻量级机制,用于将数据从服务器传输到特定的应用程序实例。使用GCM,您的服务器可以通知正在特定设备上运行的应用程序,有新数据可用。
与轮询相比,其中您的应用程序必须定期向服务器查询新数据,这种事件驱动模型允许您的应用程序仅在它知道有数据可供下载时创建新连接。
结果就是减少了不必要的连接,对于应用程序中更新的数据,延迟时间也得到了缩短。
GCM使用持久性TCP / IP连接实现。虽然可能会实现自己的推送服务,但最好采用GCM的最佳实践。这可以减少持久性连接的数量,并允许平台优化带宽并减少对电池寿命的影响。

感谢您分享您的经验!这对我来说是非常有帮助的信息。 - Victor Dombrovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接