美文网首页程序员
java推送技术的选择(一)

java推送技术的选择(一)

作者: 水花一现 | 来源:发表于2017-07-27 18:57 被阅读1088次
    image.png

    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的实现也有相应的类库。这里不作介绍,我了解的都是服务器端的实现。

    详细实现,请看下一篇文章

    相关文章

      网友评论

        本文标题:java推送技术的选择(一)

        本文链接:https://www.haomeiwen.com/subject/xxktlxtx.html