常见推送解决方案的实现原理分析:1) 轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,必须自己实现与服务器之间的通信,例如消息排队等。而且还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池。64787
2) SMS(Push)方式:在Android平台上,你可以通过拦截SMS消息并且解析消息内容来了解服务器的意图,并获取其显示内容进行处理[3]。这个方案的好处是,可以实现完全的实时操作。但是问题是这个方案的成本相对比较高,我们需要向移动公司缴纳相应的费用。目前很难找到免费的短消息发送网关来实现这种方案。
3) 持久连接(Push)方式:通过客户端与服务器之间维持一个TCP/IP连接来实现推送。实现推送的关键就是要求终端保持相对稳定的IP地址,且客户端软件始终运行并侦听特定的socket端口,从而实现信息的准实时推送。这个方案可以解决由轮询带来的性能问题,但是还是会消耗手机的电池。而且在实际应用中,一个长时间空闲的无线数据连接会被网络接入设备断开,以节省网络资源。
2 常见推送解决方案介绍
Android平台上最主流的几种消息推送方案
1) 使用GCM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代G2DM (Android Cloud to Device Messaging)。
优点:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。
2) 使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作[4]。
优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:XMPP协议复杂冗余,客户端费流量、费电;开源的XMPP服务器(androidpn选择的是Openfire)单点容量有限,集群方案复杂、不成熟。
3) 使用MQTT协议论文网
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域,且已有C++版的服务端组件RSMB(Really Small Message Broker) [5]。
缺点:不够成熟、实现较复杂、服务端组件RSMB不开源,部署硬件成本较高。
4) 使用第三方平台提供的服务
简介:现在有很多不错的第三方推送平台,其中有一些是免费的,目前国内比较不错的免费第三方平台是极光推送。
优点:可以直接使用第三方平台所提供的各种服务,节约开发成本、时间。
缺点:受限于服务提供方,灵活性小。