GCM如何在网络层中工作?

时间:2016-03-14 16:39:26

标签: android server google-cloud-messaging client

我已经阅读了为什么使用GCM比让你的Android应用程序轮询持续从应用程序服务器更新更好。这是因为当真正有更新 - 推送通知时,只会通知Android应用程序从其应用程序服务器请求更新。

但是,我不知道这是怎么可能的。服务器(GCM服务器)如​​何在不接收客户端请求的情况下将数据发送到客户端(Android应用程序)?这违反了我所知道的客户端 - 服务器架构。我能想到的唯一解释是,启用GCM的设备实际上正在运行自己的服务器来监听GCM服务器。在此网络映射中,GCM现在既充当客户端又充当服务器。

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

3 个答案:

答案 0 :(得分:2)

1.Android手机通过系统管理的后台服务连接并保持与GCM服务器的套接字连接。

2.自定义服务器(您可以在其中运行数据库,Web服务,后台模块)将需要(命令)发送到GCM服务器以将数据(通知)发送到电话(客户端应用程序)

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

答案 1 :(得分:1)

  

服务器(GCM服务器)如​​何在不接收客户端请求的情况下将数据发送到客户端(Android应用程序)?

它收到客户的请求。但是,那个"请求"是一个长期存在的套接字连接,尽管CPU进入休眠模式,但它仍然经过精心管理以保持正常运行。如果连接断开(例如,连接问题),最终客户端将重新建立连接。

但是,如果打开套接字,服务器可以将数据包从套接字发送到客户端。

答案 2 :(得分:0)

Google云消息(GCM)仅在Android设备安装“Google Play服务”时才有效。

此服务帮助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 Cloud发送消息并从Google Cloud发送Google Play服务检查消息,并通过意图广播将其发送给您