XMPP协议简介

  XMPP协议简介

  可扩展消息处理现场协议(eXtensible  Messaging  and  Presence  Protocol  XMPP)是一种基于可扩展标记语言(eXtensible  Markup  Language,  XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML  结构化数据中,  使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP  协议已被批准为互联网即时通信协议标准。

XMPP 的地址和数据结构

1.1 实体地址

  XMPP 整体框架下图 所示。图中, XMPP 框架的各类实体(如XMPP 客户、服务器和网关等) 的地址称为Jabber地址 (Jabber Identifier, JID)。JID 惟一确定进行即时消息和在线状态信息通信的独立对象或实体, 并可兼容其他即时通信系统 ( 如MSN 等) 相应的实体标识及其在线状态信息。其语法规则为: [节点″@″] 域名[″/″资源], 其中各个域的长度不能超过1 023 字节, 总长度最大为3 071 字节。

XMPP协议简介此主题相关图片如下:
按此在新窗口浏览图片

  域名指定了实体连接的XMPP 服务器。每个可用XMPP 服务器都拥有一个完整域名, 域名可在域名系统(DNS)中查找; 节点可表示某用户、一类应用或某项服务,所有节点都对应一个精确的域名; 资源用来识别属于用户的特殊对象(如设备或位置), 允许一个用户同时以多个资源与同一XMPP 服务器连接, 如yb@sdpt.com/lab、yb@sdpt.com/chat。

1.2 XMPP 的数据结构

  由于XMPP 是基于XML 的协议, 因此用户可根据自己的需要定义标记, 表述几乎任何一种结构化数据, 并可方便地创建定制的应用或增加功能。

1.2.1 三个顶级XML 元素
  XMPP 定义的3 个关键顶级XML 元素为<message/>、<presence/>和<iq/> (info/query), 每个元素都可以通过属性和名字空间包含大量数据, 其属性和名字空间都是XMPP的组成部分。

  <message/>元素用来包含2 个XMPP 实体间互相发送的消息内容; <presence/>元素表示实体可用性信息, 可用性信息有“可用”和“不可用”2 种; <iq/>元素用来构建2 
实体间的会话, 并且允许实体间来回传送XML 格式的请求和响应以便取得或设置公共的用户信息, 如名字等。

  即时通信中名字冲突问题使用XML 的命名空间特性来解决。XML 命名空间定义了一种将XML 中使用的元素和属性与统一资源定位符(Uniform Resource Locator,URL)引用联系起来对元素和属性进行定义的方法。

1.2.2 XMPP 的数据结构

  从结构上看, XMPP 有3 种数据: XML 流、流认证和XML 节。XML 流是实体交换XML 元素的容器, 以<stream>开始, 以</stream>结束, 是通信双方采用异步方式进行数据传输的标准方法, 在整个XMPP 通信过程中处于最外层; XML 节是实体通过XML 流传输的结构化信息单元, 在XML 流中以深度为1 的子标记开头, 并以深度为1 的子标记结束, 这些标记为<message/>、<presence/>和<iq/>。XML 节也可通过包含其他子元素来传送结构化信息, 是实际需要交换的信息所在地; 流认证是在XML 流中有关协商传输层安全协议、简单认证与安全层协议和服务器回拨认证协议完成通信认证、加密等目的的数据交互, 是XMPP 安全机制的重要组成部分。

  XMPP 为XML 流扮演通用“传输层”的角色。XML 流中包含传输的认证信息和现场消息, XMPP 能使数据高效路由至最合适的请求源, 并最大限度地简化客户机上的实现, 使跨应用实时交流信息成为可能。

工作过程

(1)节点(如yb、pt)向本地服务器连接。

  ①XMPP 用户通过开启一个从客户端到服务器端的XML 流, 来申请一个在服务器上的Socket 连接。

  SEND: <stream: stream
     to=′sdpt.com′
     xmlns=′jabber: client′
     xmlns: stream=′http: //etherx.jabber.org/streams′>

  ②服务器通过开启一个从服务器到客户端的XML 流进行回复。

  RECV: <stream: stream
     from=′sdpt.com′
     id=′180763465′
     xmlns=′jabber: client′
     xmlns: stream=′http: //etherx.jabber.org/streams′>

(2)节点向本地服务器申请登录。
  ①用户询问登录服务器时需提供的信息。

  SEND: <iq id=′2′type=′get′>
     <query xmlns=′jabber: iq: auth′>
     <username>yb</username>
     </query>
     </iq>

  ②服务器回应用户, 告知用户登录所需要的信息。
  ③用户提供所需的信息。
  ④服务器响应一个空的类型为“result”的iq 元素, 表明登录成功。
  
  RECV: <iq id=′3′type=′result′/>  

  ⑤yb 用户发送当前状态给服务器, 表明其在线。

  SEND: <presence>
     <status>Online</status>
     </presence>

(3)用户获得花名册, 好友增加一个联系人( 如yb 获知朋友sd 在线) 

(4)用户间发送消息( 如yb 向sd 发送消息) 
  用户发送一条消息:

  SEND: <message to′sd@jabber.org′>
     <body>Where are you?</body>
     </message>
 
 
  服务器会根据XMPP 用户的会话信息加上一个源地址, 这样接收者收到消息时, 消息中已经包含了源地址。

(5)XMPP 服务器根据目标JID 中的域名查找、连接到目标服务器并进行认证(如sdpt.com 使用DNS 查找jabber.org, 连接到jabber.org 服务器上并进行认证) 

(6)XMPP 服务器jabber.org 证实sd 连接到该服务器上, yb 被授权与sd 进行通信。

(7)数据在yb 与sd 间流动。

(8)用户退出, 退出时只需要关闭<stream>。

结束语

  简单的接口、开放的协议、互联的架构、权威的标准再加上坚实的用户基础是XMPP 的优势。相信XMPP 将为即时通信技术的运用提供更为广阔的空间。

--------------------------------------

XMPP

  1、什么是XMPP ?
  XMPP(可扩展消息处理现场协议)是基于可扩展标记语言( XML)的协议,它用于即时消息( IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
  XMPP的前身是 Jabber,一个开源形式组织产生的网络 即时通信协议。XMPP目前被 IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
  核心的XML流传输协议
  基于XML流传输的即时通讯扩展应用
  XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
  XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如 AIM,QQ等有功能完整,完善等先进性。
  XMPP的扩展协议Jingle使得其支持语音和视频。
  2、XMPP的基本网络结构是怎样的?
  XMPP中定义了三个角色,客户端,服务器,网关。 通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括 SMS(短信), MSNICQ等。基本的网络形式是单客户端通过 TCP/IP连接到单服务器,然后在之上传输XML。
  3、XMPP通过 TCP传什么了?
  传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如 QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。
  4、举个例子看看所谓的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>
  以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...< /message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值