Android基于xmpp的即时通信应用

  xmpp是一个通讯协议。由于这是个开放的协议,为了节俭开发成本,不少即时应用都采用了这个协议。Android上最经常使用的组合asmack +openfire。Asmack是smack的android版,是对xmpp协议进行了封装,并提供了丰富的api,简化了操做。Openfire是一个开源的IM服务器,基于Xmpp实现。换句话说使用xmpp开发即时通信应用的话,服务器端已经开发好了,就是openfire。html

 

        如今我作的一个android应用就是采用asmack+openfire。说实在的,xmpp协议太多了,大多都是英文的,去学这个东西成本高,可是若是不学,仅仅依赖openfire+asmack提供的功能很难知足多样性的需求。Openfire由于是开源的,因此能够进行插件开发或者二次开发去知足本身业务需求。xmpp还增长了Jingle扩展协议来支持面向链接的业务,如语音和视频。java

        以前业界xmpp最典型的例子就是Google talk,并且以前Google一直力推xmpp协议。可是Google最新的IM软件Hangouts并无采用xmpp协议,对这一作法Google也没有一个明确的回答。Google这一作法的确下降的xmpp的热度。另外不少人说xmpp传输效率低,xmpp使用xml格式数据进行通讯,过多的标签的确可能下降传输效率。再说如今的国内主流的IM软件,QQ,微信等,都是采用本身私有的通讯协议。Openfire采用的TCP链接,QQ采用TCP+UDP。android

        是开发本身的协议,是使用xmpp协议,仍是用封装好的xmpp协议(smack)+现成的服务器(openfire)就是你们的决定了。不过要说的是三种方案灵活性依次下降,成本也依次下降。咱们项目的预算比较低因此采用了asmack+openfire。不过这里我要说的是仅仅依赖asmack+openfire是知足不了常规的业务需求的。因此咱们的项目引入了webservice,同时尝试对openfire进行插件开发。git

        这里我能够说说asmack+openfire开发遇到的一些无力的地方,好比:github

        用户没法接受离线的图片,语音。web

        群成员在离线后就会离开群(细来讲,smack没有群的概念,只有个聊天室)算法

        群聊里没有办法发图片(点对点的时候发送图片使用的是文件传输,只能一对一,不能一对多)api

 

        其余的问题就不在细说。对于上述的问题会在后续的文章中分享本身的解决方案。服务器

Xmpp最大的优点是什么,在我看来就是开源。这种开源可让任意两个使用xmpp协议的软件进行通讯。微信

开发以前有必要了解一些xmpp的一些数据结构。Xmpp链接使用xml流,这个XML流至关于一个会话期间全部XML节的一个信封

 

  |--------------------|
  | <stream>           |
  |--------------------|
  | <presence>         |
  |   <show/>          |
  | </presence>        |
  |--------------------|
  | <message to='foo'> |
  |   <body/>          |
  | </message>         |
  |--------------------|
  | <iq to='bar'>      |
  |   <query/>         |
  | </iq>              |
  |--------------------|
  | ...                |
  |--------------------|
  | </stream>          |
  |--------------------|

 

上图中的几个节点 presence、message、IQ对应着asmack的3个对象。这些都是packet的子类。

 

        关于asmack的api,没有找到单独的asmack api,更没有中文的。你们能够再下载jar包的同时选择下载源码。Eclipse引用源码后,经过javadoc就能够看到接口说明了,和api无异。

 

 

asmack官网:https://github.com/Flowdalic/asmack

asmack下载地址:http://asmack.freakempire.de/

openfire下载地址:http://www.igniterealtime.org/downloads/index.jsp

smack使用指南:http://www.igniterealtime.org/builds/smack/docs/latest/documentation/index.html

下载openfire的同时,你们能够下载Spark测试

 

更新2015-3-12

如今smack(4.1以上版本)已经能够直接跑在Android平台上了,之后asmack也没有更新的必要了。此次smack作了针对Android平台作了不少的优化,也是smack一次里程碑式的更新。

此外设计方案上用openfire+smack+webservice 也许是更优秀的方案。也就是说 只使用smack的通信功能,诸如好友关系,用户资料这些东西都交给webservice去管理维护。

Smack参考:https://community.igniterealtime.org/blogs/ignite/2015/01/14/smack-410-beta1-available

相关文章
相关标签/搜索