【XMPP协议】开发Android即时通讯APP之了解XMPP(一)
来源:互联网 发布:老滚5捏脸数据导入 编辑:程序博客网 时间:2024/04/28 01:35
目前正在忙公司项目,制作基于XMPP的即时通讯APP,为此必须先了解下XMPP协议,所以写篇博客加深下印象。
关于XMPP协议的相关介绍:
XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。
在这四种协议中,XMPP是最灵活的。XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 核心的XML流传输协议 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
举个例子看看所谓的XML流是什么样子的?
客户端:<?xml version='1.0'?> <stream:stream to='example_com' xmlns='jabber:client' xmlns:stream='http_etherx_jabber_org/streams' version='1.0'> 服务器:<?xml version='1.0'?> <stream:stream from='example_com' id='someid' xmlns='jabber:client' xmlns:stream='http_etherx_jabber_org/streams' version='1.0'> ...其他通信... 客户端:<message from='juliet_example_com' to='romeo_example_net' xml:lang='en'> 客户端: <body>Art thou not Romeo, and a Montague?</body> 客户端:</message> 服务器:<message from='romeo_example_net' to='juliet_example_com' xml:lang='en'> 服务器:<body>Neither, fair saint, if either thee dislike.</body> 服务器:</message> 客户端:</stream:stream> 服务器:</stream:stream>
XMPP通过TCP传什么了?
传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而 XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而 XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。
XMPP的特点:
- 客户端/服务器通讯模式
- 分布式网络
- XML数据格式
同时XMPP也是存在不足的地方:
**数据负载太重:随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
没有二进制数据:XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此,文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。**
服务器端:
openFire
客户端:
Smack
关于OpenFire
Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。您可以使用它轻易的构建高效率的即时通信服务器. Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。由于是采用开放的XMPP协议,您可以使用各种支持XMPP协议的IM客户端软件登陆服务.
关于Smack
Smack是一个开源,易于使用的XMPP(jabber)客户端类库。Smack API, 是一个 Java 的XMPP Client Library,也是由Jive Software开发。 优点:编程简单。 缺点:API并非为大量并发用户设计,每个客户要1个线程,占用资源大,1台机器只能模拟有限(数千个)客户.smack是一个用 java 写的XMPP客户端代码库, 是 spark 的核心.
- 【XMPP协议】开发Android即时通讯APP之了解XMPP(一)
- Android之基于XMPP协议即时通讯软件(一)
- Android之基于XMPP协议即时通讯软件(一)
- Android之基于XMPP协议即时通讯软件(一)
- Android之基于XMPP协议即时通讯软件(一)
- Android之基于XMPP协议即时通讯软件(一)
- Android之基于XMPP协议即时通讯软件(一)
- 基于xmpp的协议即时通讯软件开发--理论(一)
- 开发手记——基于XMPP的Android即时通讯APP(一)
- android 初入坑xmpp即时通讯(一)
- Android之基于XMPP协议即时通讯软件(二)
- Android之基于XMPP协议即时通讯软件(三)
- Android之基于XMPP协议即时通讯软件(二)
- Android之基于XMPP协议即时通讯软件(二)
- Android之基于XMPP协议即时通讯软件(三)
- Android之基于XMPP协议即时通讯软件(二)
- Android之基于XMPP协议即时通讯软件(三)
- Android之基于XMPP协议即时通讯软件(三)
- Github contributions 故障处理
- HTML文件和SHTML文件的区别
- 华为oj 字符串最后一个单词的长度
- 基类和派生类的关系
- Spring事务管理
- 【XMPP协议】开发Android即时通讯APP之了解XMPP(一)
- Java中如何遍历Map对象的4种方法
- 相似图片搜索的原理(二)
- ubuntu下的ssh远程连接
- html中id和name的区别
- CentOS下安装Jenkins
- Struts2验证
- 各个算法
- HTML元素、标签、属性的区别