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

现在我做的一个android应用就是采用asmack+openfire。说实在的,xmpp协议太多了,大多都是英文的,去学这个东西成本高,但是如果不学,仅仅依赖openfire+asmack提供的功能很难满足多样性的需求。Openfire因为是开源的,所以可以进行插件开发或者二次开发去满足自己业务需求。xmpp还增加了Jingle扩展协议来支持面向连接的业务,如语音和视频。

之前业界xmpp最典型的例子就是Google talk,而且之前Google一直力推xmpp协议。但是Google最新的IM软件Hangouts并没有采用xmpp协议,对这一做法Google也没有一个明确的回答。Google这一做法的确降低的xmpp的热度。另外很多人说xmpp传输效率低,xmpp使用xml格式数据进行通信,过多的标签的确可能降低传输效率。再说现在的国内主流的IM软件,QQ,微信等,都是采用自己私有的通信协议。Openfire采用的TCP连接,QQ采用TCP+UDP。

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

这里我可以说说asmack+openfire开发遇到的一些无力的地方,比如:

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

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

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

其他的问题就不在细说。对于上述的问题会在后续的文章中分享自己的解决方案。

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

android基于xmpp的即时通讯应用相关推荐

  1. Android学习笔记--基于XMPP的即时通讯

    一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库 ...

  2. Android基于XMPP Smack openfire 开发的聊天室

    公司刚好让做即时通讯模块,服务器使用openfire,偶然看到有位仁兄的帖子,拷贝过来细细研究,感谢此仁兄的无私,期待此仁兄的下次更新 转自http://blog.csdn.net/lnb333666 ...

  3. java smack jar_Smack:一个开源的XMPP用于即时通讯的客户端类库

    原标题:Smack:一个开源的XMPP用于即时通讯的客户端类库 本资源由 伯乐在线- oneDay整理,您也想贡献一份力量?欢迎加入我们 » Smack是一个用于和XMPP服务器通信的类库,可以实现即 ...

  4. notTX FLV探测/播放和基于P2P的即时通讯多功能软件

    软件名称:notTX FLV探测/播放和基于P2P的即时通讯多功能软件  软件版本:1.0  建议分类:应用工具-> 网络相关 联系EMAIL:lqjnet@sohu.com  软件网站:htt ...

  5. 【总结】开发基于XMPP协议的通讯工具

    转载请注明出处:http://blog.csdn.net/chziroy/article/details/30047889 初学android,做了一个基于XMPP协议的即时通讯工具,实现了基本的文字 ...

  6. 基于XMPP的即时通信系统的建立(一)— XMPP基础概念

    相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...

  7. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.3版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  8. 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.1版已发布

    关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...

  9. ios视频通话三方_iOS基于Socket.io即时通讯IM实现,WebRTC实现视频通话

    Socket.io-FLSocketIM-iOS 基于Socket.io iOS即时通讯客户端 iOS IM Client based on Socket.io 实现功能 文本发送 图片发送(从相册选 ...

最新文章

  1. 42所双一流大学校长情况简介(2019年)
  2. python解析json_【python学习】json解析
  3. 数据库MYSQL学习系列三
  4. JSBridge的思考
  5. Javascript中的0,false,null,undefined,空字符串对比
  6. linux创建线程未定义,Linux中未定义的对p线程_CREATE的引用
  7. Fedex Ship Manager Software安装
  8. Vue.js学习过程
  9. springmvc+mongodb+maven 项目搭建配置
  10. selenium webdriver - 截图
  11. PreScan快速入门到精通第三讲快速搭建第一个自动驾驶仿真模型
  12. 2020 HDU多校联合训练
  13. Python绘制bezier曲线
  14. 计算三角形的周长和面积
  15. 生产注意事项(分片集群)
  16. 蓝桥杯 历届试题 小数第n位(C语言)
  17. 最长非降子序列 动态规划 java
  18. 虚拟机桥接模式下连接网络失败解决
  19. 2015华北水院c语言实验报告5,华北水利水电大学C语言实验5.doc
  20. DDD Domain Drive Design

热门文章

  1. Elman神经网络与自适应共振网络(ART)
  2. [CS61A]Week03笔记1
  3. 解决IE浏览器再重复请求请求内容相同的情况下调用本地缓存的问题!
  4. 递归算法遍历并删除目录
  5. 金蝶云星空与钉钉对接集成采购订单查询打通发起审批实例(官方)
  6. vue导出excel表的时候有多张图片
  7. 汤家凤考研1080题-----常用公式
  8. 新增书籍类别下拉框加载、书籍上下架功能
  9. 如何在地址栏增加小图标
  10. 路由器和调制解调器和之间区别