java推送技术的选择(一)

来源:互联网 发布:善用佳软 知乎 编辑:程序博客网 时间:2024/05/28 18:45

java推送技术

这段时间一直在做关于服务器端向APP端推送消息,查阅了大量的资料,这里做下总结。

关于推送我们常见的推送有APP外推送,APP内推送。APP外推送有各大平台极光,友盟等,而APP内的推送可以用的服务基本需要自己去实现,这里我给大家介绍的就是关于APP内的推送技术,我会再下面的文章介绍如何实现APP内推送。

推送协议分类

这些是我从网上查询出的协议对比

方案1、 使用GCM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代的G2DM。
优点:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。

方案2、 使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。
优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

方案3、 使用MQTT协议(更多信息见: http://mqtt.org/ )
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考: http://mqtt.org/software ),且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

方案4、 使用HTTP轮循方式
简介:定时向HTTP服务端接口(Web Service API)获取最新消息。
优点:实现简单、可控性强,部署硬件成本低。
缺点:实时性差。

从以上协议对比,可以看出第一种国内不可以使用排除,第四种效率太低不建议使用,然后就只有第二,三种可以选择,然后我们继续筛选。

mqtt协议比较灵活,但是需要实现东西太多,如果团队人数足够,时间充足可以自己去实现。
但是团队人太少,我建议使用XMPP实现,因为实现简单,开发快速,成本较小。

使用框架

在公司项目中经过各种讨论对比,最终我们选择了XMPP协议实现的推送服务。

经过对比在公司产品上,使用XMPP时,XMPP的缺点(协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高)
可以接受,在消息内容上,只推送少量关键数据,主要的数据还是靠http拉取的方式,并且现在都是4G的情况下,XMPP的协议的缺点都是可以接受。XMPP的很多实现我们都可以使用,减少了我们开发的时间。

xmpp技术介绍

服务端组件Openfire

是开源的、基于可拓展通讯和表示协议(XMPP)、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。

Java开发库Smack

Smack是一个开源,易于使用的XMPP(jabber)客户端类库。

客户端组件Spark

xmpp 客户端组件,使用XMPP实现的聊天工具。


在项目中我们使用的就是smack库进行XMPP消息的推送,客户端android和ios的实现也有相应的类库。这里不作介绍,我了解的都是服务器端的实现。

原创粉丝点击