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
更新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