GCM在网络层是如何工作的?

How does GCM work in the network layer?

我已经了解了为什么使用 GCM 比让您的 android 应用程序不断轮询来自您的应用程序服务器的更新更好。这是因为 android 应用程序只有在真正有更新时才会被通知向其应用程序服务器请求更新 - 推送通知。

但是,我不知道这怎么可能。服务器(GCM服务器)如​​何在没有收到客户端任何请求的情况下向客户端(android app)发送数据?这违反了我所知道的客户端-服务器架构。我能想到的唯一解释是,支持 GCM 的设备实际上是 运行 自己的服务器,它监听 GCM 服务器。在此网络图中,GCM 现在既充当客户端又充当服务器。

所以我的问题是,我的假设是否正确?如果不是,那我错过了什么?

How will the server (GCM server) send data to the client (android app) without receiving any request from the client?

它收到来自客户端的请求。但是,"request" 用于长期套接字连接,尽管 CPU 进入睡眠模式,但仍小心管理以保持连接。如果连接断开(例如,连接问题),最终客户端将重新建立连接。

但是,在打开套接字的情况下,服务器可以通过套接字将数据包发送到客户端。

1.Android phone 使用由系统管理的后台服务连接并保持与 GCM 服务器的套接字连接。

2.Custom 服务器(您可以在其中 运行 数据库、Web 服务、后台模块)向 GCM 服务器发送请求(命令)以将数据推送(通知)到 phone (客户端应用程序)

摘要:Android phone <-> GCM <-> 自定义服务器(服务)

Google 云消息 (GCM) 仅在 android 设备安装 "Google Play Service".

时有效

此服务帮助 android 节省资源(网络带宽、电池等),工作原理:

App 1 |                     | Server 1
App 2 |<--> GCM Service <-->| Server 2
App 3 |                     | Server 3

而不是:

App 1 |<-->| Server 1
App 2 |<-->| Server 2
App 3 |<-->| Server 3

您的基础服务器向 Google 云端发送消息,并 Google 从 Google 云端播放服务检查消息并通过 intent broashcast 将其发送给您