Android推送服务有几种实现方式分别是轮询、SMS通知和长链接。主要记录下轮询和长链接的区别
轮询:
客户端通过Timer或AlarmManager定期询问服务器有没有新的消息, 这样服务器不用管客户端的地址是什么直接告诉它新消息即可.
这种方案最简单, 对于一些实时性要求不高的客户端来说比较适合,但对于即时通讯来说, 这种方案完全不能用. 对于即时通讯为了需要消息尽快达到客户端只能讲定时的时间尽量的缩小,这样对手机的网络和电量来说都是很大的考验。
长链接:
长连接就是客户端和服务器建立连接之后, 不主动断开. 双方互相发送数据, 发完了也不主动断开连接, 之后有需要发送的数据就继续通过这个连接发送.客户端和服务器建立TCP长连接之后, 客户端定期向服务器发送心跳包,以保活连接 有消息的时候, 服务器直接通过这个已经建立好的TCP连接通知客户端即可。
那轮询和心跳包有什么区别呢
轮询耗费性能,因为每次轮询都要经过一次TCP的连接和断开。
轮询是为了获取数据,而心跳包是为了保活TCP连接,防止NAT超时(内网和外网的映射表)
轮询设定的时间大小决定了数据获取的及时性,心跳包的发送时间间隔和数据的及时性没有太大的关系,如果心跳包发送的时间间隔大于NAT淘汰的时间会导致长连接断开