我已经阅读了为什么使用GCM比让你的Android应用程序轮询持续从应用程序服务器更新更好。这是因为当真正有更新 - 推送通知时,只会通知Android应用程序从其应用程序服务器请求更新。
但是,我不知道这是怎么可能的。服务器(GCM服务器)如何在不接收客户端请求的情况下将数据发送到客户端(Android应用程序)?这违反了我所知道的客户端 - 服务器架构。我能想到的唯一解释是,启用GCM的设备实际上正在运行自己的服务器来监听GCM服务器。在此网络映射中,GCM现在既充当客户端又充当服务器。
所以我的问题是,我的假设是对的吗?如果不是,那么我错过了什么?
答案 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服务检查消息,并通过意图广播将其发送给您