android基于xmpp的即时通讯应用
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的即时通讯应用相关推荐
- Android学习笔记--基于XMPP的即时通讯
一.常见即时通讯实现 socket openfire+asmack 环信 信鸽 融云 二.XMPP优势 1. 开放性 XMPP协议是自由.开放.公开的,并且易于了解.而且在客户端.服务器.组件.源码库 ...
- Android基于XMPP Smack openfire 开发的聊天室
公司刚好让做即时通讯模块,服务器使用openfire,偶然看到有位仁兄的帖子,拷贝过来细细研究,感谢此仁兄的无私,期待此仁兄的下次更新 转自http://blog.csdn.net/lnb333666 ...
- java smack jar_Smack:一个开源的XMPP用于即时通讯的客户端类库
原标题:Smack:一个开源的XMPP用于即时通讯的客户端类库 本资源由 伯乐在线- oneDay整理,您也想贡献一份力量?欢迎加入我们 » Smack是一个用于和XMPP服务器通信的类库,可以实现即 ...
- notTX FLV探测/播放和基于P2P的即时通讯多功能软件
软件名称:notTX FLV探测/播放和基于P2P的即时通讯多功能软件 软件版本:1.0 建议分类:应用工具-> 网络相关 联系EMAIL:lqjnet@sohu.com 软件网站:htt ...
- 【总结】开发基于XMPP协议的通讯工具
转载请注明出处:http://blog.csdn.net/chziroy/article/details/30047889 初学android,做了一个基于XMPP协议的即时通讯工具,实现了基本的文字 ...
- 基于XMPP的即时通信系统的建立(一)— XMPP基础概念
相关背景 IM(Instant Messaging)正在被广泛使用,特别是公司与它们的客户互动连接方案以及互联网与Web2.0相关的应用.为了解决即时通信的标准问题,IETF(互联网工程任务组 The ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat v8.3版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- 基于开源IM即时通讯框架MobileIMSDK:RainbowChat-iOS端v6.1版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级.高度提炼,一套API优雅支持UDP .TCP .WebSocket 三种协议,支持iOS.A ...
- ios视频通话三方_iOS基于Socket.io即时通讯IM实现,WebRTC实现视频通话
Socket.io-FLSocketIM-iOS 基于Socket.io iOS即时通讯客户端 iOS IM Client based on Socket.io 实现功能 文本发送 图片发送(从相册选 ...
最新文章
- 42所双一流大学校长情况简介(2019年)
- python解析json_【python学习】json解析
- 数据库MYSQL学习系列三
- JSBridge的思考
- Javascript中的0,false,null,undefined,空字符串对比
- linux创建线程未定义,Linux中未定义的对p线程_CREATE的引用
- Fedex Ship Manager Software安装
- Vue.js学习过程
- springmvc+mongodb+maven 项目搭建配置
- selenium webdriver - 截图
- PreScan快速入门到精通第三讲快速搭建第一个自动驾驶仿真模型
- 2020 HDU多校联合训练
- Python绘制bezier曲线
- 计算三角形的周长和面积
- 生产注意事项(分片集群)
- 蓝桥杯 历届试题 小数第n位(C语言)
- 最长非降子序列 动态规划 java
- 虚拟机桥接模式下连接网络失败解决
- 2015华北水院c语言实验报告5,华北水利水电大学C语言实验5.doc
- DDD Domain Drive Design