消息推送入门学习

关于消息推送

用户从服务器端获取消息的渠道莫非就是两种:pull和push

先来说说pull,也就是我们常说的消息牵引,它实现的方式是客户端主动向服务器发送请求来请求某些信息,然后服务器根据自己的业务流程将信息返回给客户端。这种方式实现起来很简单,几乎是最原始的消息获取方式,它具有非常明显的缺点:缺乏时效性。
如果一个用户A非常关心他的股票信息,他需要不停地向某一股票软件的服务器来发送请求来查询,此时,他的同事来找他帮忙完成一项工作,他就没有时间来不停地查询信息,如果这段时间内他关注的股票动态有了新的变化,直到他完成了工作再一次使用该软件来进行查询时,他才能获取该消息。
一种改进的pull方式是客户端定时向服务器发送请求,来询问服务器是否有新的消息。这种方式虽然能在时效性方面有一定的提升,但是需要更多的资源付出,比如客户端需要更多的电量和流量,服务器在没有消息推送的情况下也要不停的处理客户端的询问请求。所以该方式只会用在小规模的系统当中。

再来说说push,可以字面地理解为推送,消息推送的产生就是为了弥补pull方式中消息时效性差的缺点。只要服务器端有什么新的信息更新,它就会通过推送的方式将消息推送给客户端。

消息推送的主流技术

1.C2DM云端推送平台
C2DM是一个用来帮助开发者从服务器向Android应用程序发送数据的服务。该服务提供了一个简单的、轻量级的机制,允许服务器可以通知移动应用程序直接与服务器进行通信,以便于从服务器获取应用程序更新和用户数据。C2DM服务负责处理诸如消息排队等事务并向运行于目标设备上的应用程序分发这些消息。
这里写图片描述
1)客户端向C2DM发起注册
2)C2DM响应客户端Registration ID
3)客户端将Registration ID发送给自己对应的消息服务器
4) 服务器通过https://www.google.com/accounts/ClientLogin 获取Auth Token并保存。以后就可以通过这个Auth Token调用C2DM服务发送消息了。

但这个服务存在很大的问题:
1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统; 2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的;
3)C2DM要求用户拥有Gmail账号,而Gmail在国内并不普及

2.APNS服务
APNS(Apple Push Notification services)是苹果公司推出的一款推送 通知服务。简单来说,就是苹果用专门的服务器来接收我们自己的服务器发 送过去的推送消息,然后再转发到指定的 IOS 设备上面去,接收到消息的设 备再把推送消息通知给应用程序,应用程序采用一些手段如铃声或者是通知 的方式来提醒用户收到了通知消息。

C2DM和APNS都是通过长连接的方式来实现消息推送的,长连接的意思是客户端向服务器发送请求并得到响应后,依然保持着链接,一旦服务器端有新的消息要推送,就推过这条连接来完成。APNS相比于C2DM而言,提供的是一种可靠的长连接服务,不会因为资源不足而杀死长连接的进程。显而易见的是,长连接会消耗客户端更多的电量。

3.基于XMPP协议的消息推送
XMPP: The Extensible Messaging and Presence Protocol ,中文全称:可扩展通讯和表示协议 。是一种基于XML的协议,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的。可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。XMPP目前在免费源代码开放Jabber IM系统中被广泛采用。
优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

4.基于MQTT协议的消息推送
MQTT:Message Queuing Telemetry Transport,中文全称:消息队列遥测传输。是一个客户端服务端架构的发布/订阅模式的消息传输协议,它的设计思想是轻巧、开放、简单、规范,因此易于实现,如ActiveMQ上的发布/订阅和很多第三方推送平台都是基于MQTT来实现的。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。
优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域,且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

该篇文章只用于简单地介绍了几种推送方式的实现以及它们的比较,之后我会分别介绍下MQTT、XMPP协议以及基于此实现的推送源码

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值