XMPP简单介绍

XMPP简介
XMPP(Extensible Messaging and Presence Protocol)可扩展消息和展示协议,是一种以XML为基础的开放式实时通信协议,它将需要实时通信的消息嵌入到XML结构体中,不仅具有很好的可扩展性,还具有较强的可读性。它是IM(instant messaging,即时消息)协议之一,同时它也是IM协议中最灵活的。

XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP原本是为即时通讯而量身定制,但由于XML Stanza本身是XML元素,在基于XML灵活发展的特性下,使得XMPP也可以适用其他方面,已经得到了IETF的批准。XMPP与IMPP(即时信息和空间协议)、PRIM(空间和即时信息协议)、SIP(SIMPLE)(针对即时通讯和空间平衡扩充的进程开始协议)合称四大IM协议主流。


XMPP通过TCP传输的内容
传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。


XMPP的优缺点

优点:
1. 开放性
XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。
2. 可扩展
XML名字空间的威力可使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展由XMPP标准基金会。
3. 标准性
互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的即时通讯及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
4. 跨平台
不限定与任何开发语言和运行环境,都可以使用此协议来进行编程。
5. 分布式
XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的即时传讯体验。
缺点:

  1. 数据负载太重
    发送起始标签就必须要发送结束标签,没能做到像JSON数据格式那么精简,给客户端带来的问题就是流量消耗。
  2. 没有二进制数据
    XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。

XMPP协议工作原理
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


使用XMPP协议的客户端与服务器端对话的例子
客户端(kuusipuu)连接到一个XMPP服务器(amessage.de:5222/TCP),发送一条消息(主题和内容均为“test 1449”)到另一个客户端(tero),然后注销。

kuusipuu:

<?xml version="1.0"?>
<stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client" to="amessage.de">

amessage.de:

<stream:stream xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
from='amessage.de' id='1461777714'>

kuusipuu:

<iq type="set" id="auth_2" to="amessage.de" >
<query xmlns="jabber:iq:auth">
  <username>kuusipuu</username>
  <password>mypassword</password>
  <resource>Work</resource>
 </query>
</iq>

amessage.de:

<iq from="amessage.de" id='auth_2' type='result'/>

kuusipuu:

<message to="tero@example.com" >
<subject>test 1449</subject>
<body>test 1449</body>
</message>
<presence type="unavailable" >
<status>Logged out</status>
</presence>
</stream:stream>

amessage.de:

</stream:stream>

以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream></stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream></stream>中间的那些<message></message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。


XMPP系统特点
1)客户机/服务器通信模式;
(2)分布式网络;
(3)简单的客户端;
(4)XML的数据格式。


通俗解释
其实XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装–〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。


参考自http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值