1. 推送的原理:
两种方式:Push和Pull
2. 解决方案
Android中,实现消息推送的主流方案有7种
2.1 C2DM
Cloud to Device Messaging,云端推送,是Android系统级别的消息推送服务(Google出品)
原理:基于Push方式
具体描述:C2DM服务负责处理诸如消息排队等事务,并向运行于目标设备上的应用程序分发这些消息。如下图:
优点:C2DM提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。
缺点:1.依赖于Google官方提供的C2DM服务器;
2.需要用户手机安装Google服务。但由于Android机型、系统的碎片化&国内环境,国内Android系统都自动去除Google服务,假如要使用C2DM服务,这意味着用户还得去安装Google服务,成本较大。
2.2 轮询
原理:基于Pull方式
具体描述:应用程序间隔固定时间主动与服务器进行连接并查询是否有新的消息
缺点:1.成本高,需要自己实现与服务器之间的通信,例如消息排队等;
2.到达率不确定,考虑轮询的频率:太低可能导致消息的延迟;太高,更消耗客户端的资源(CPU资源、网络流量、系统电量)和服务器资源(网络带宽)
2.3 SMS信令推送
原理:基于Push方式
具体描述:服务器有新消息时。发送一条类似短信的信令给客户端,客户端通过拦截信令,解析消息内容。
优点:可实现完全的实时操作
缺点:成本高(主要是短信资费的支出)
2.4 MQTT协议
定义:轻量级的消息发布/订阅协议
原理:基于Push方式,wmqtt.jar是IBM提供的MQTT协议的实现,原理如下图:
更多关于MQTT协议:
- 项目实例源
- 一个采用PHP书写的服务器端
- Jar包下载地址,并加入自己的Android应用程序中。
- 拓展:RSMB是从MQTT协议引申出来的另外一种解决方案:简单的MQTT代理,详情请点击
2.5 XMPP协议
定义:Extensible Messageing and Presence Protocol,可扩展消息与存在协议,是基于可扩展标记语言(XML)的协议,是目前主流的四种IM协议之一
其他三种:
---即时信息和空间协议(IMPP)
---空间和即时信息协议(PRIM)
---即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)
【Android开发】 如何实现android和服务器长连接呢?推送消息的原理
分析问题:这种功能实际上就是数据同步,同时要考虑手机本身、电量、网络流量等等限制因素,所以通常在移动端上有一下两个解决方案:
1.一种是定时去server查询数据,通常是使用HTTP协议来访问web服务器,称Polling(轮询);
2.还有一种是移动端和服务器建立长连接,使用XMPP长连接,称Push(推送)。
从耗费的电量、流量和数据延迟性各方面来说,Push有明显的优势。但是使用Push的缺点是:
对于客户端:实现和维护相对成本高,在移动无线网络下维护长连接,相对有一些技术上的开发难度。
对于服务器:如何实现多核并发,cpu作业调度,数量庞大的长连接并发维护等技术,仍存在开发难点。