以下是重构后的内容,同时保持了段落结构:

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存在一些缺点,如协议较复杂、冗余(基于XML)、费流量、费电以及部署硬件成本高等,但在消息内容上,只推送少量关键数据,主要的数据还是靠HTTP拉取的方式。而且现在都是4G的情况下,XMPP的协议的缺点都是可以接受的。此外,XMPP的很多实现我们都可以使用,这大大减少了我们的开发时间。

XMPP技术简介:

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

2. Java开发库Smack:Smack是一个开源、易于使用的XMPP(jabber)客户端类库。通过使用Smack,我们可以在Android和iOS等客户端平台上实现基于XMPP的消息推送功能。

3. 客户端组件Spark:Spark是一个使用XMPP实现的聊天工具,它是xmpp客户端组件的一种。

在我们的项目中,我们使用了smack库来实现XMPP消息的推送。客户端Android和iOS也分别有相应的类库来实现这一功能。这里就不详细介绍客户端部分的实现了。希望通过下一篇文章,能够为大家详细讲解如何搭建和使用基于XMPP协议的消息推送服务。