XMPP -- XML节

XMPP Stanzas - XMPP 节

在客户端和服务器(或者服务器与服务器)完成协商之后,双方就可以互相发送XML Stanza。定义了3中基本的节:

<message/>, <presence/>, and <iq/>. 为这些节定义了5种通用的属性。XMPP实体之间的交互正是通过XML节

的交换来完成的,这些节的交换可以是任意顺序、任意数量的。XMPP核心协议定义了这些节的基本结构和语义,

至于具体的“有效载荷”由相关的XEP来定义。


Message语义

<message/>定义了一种“推送”机制,一个实体可以通过<message/>把信息推送到另一个实体,这类似于Email系统中的通信方式。所有的message 节

都会有一个“to”属性,指定消息的预期接收者,除非这个消息是被发送给一个已连接客户端账户bare JID。收到一个message节时,服务器应该根据“to"

属性把消息路由或发送到预期接受者。


Presence语义

<presence/>是一种专门的”广播“或”发布-订阅“机制,借助于这种机制,多个实体可以收到它们已订阅的关于某个实体的信息(比如,在线情况)。通常

一个发布客户端应该发送一个不带“to”属性的”presence"节到它连接到的服务器,然后服务器就会把这个presence节广播到所有订阅该客户端的实体。然而,

一个发布客户端也可以发送一个带"to"属性的“presence”节,服务器收到这样的节,就会把它路由或发送到预期接收者。<presence/>节常常是由Client使用的

,但它也可以被服务器、附加服务、或者其他种类的实体使用。


IQ语义

Info/Query, 或者IQ是一种“请求/响应”机制,在某些方面类似于HTTP。一个实体可以使用IQ发送一个请求道另外一个实体,并从该实体接收一个响应。请求和

响应的内容由于XML命名空间相关的模式或其他结构化定义来定义,请求者通过"id"属性来跟踪交互。因此,IQ交互遵循一个结构化数据交互的通用模式,比如

get/result 或者 set/result(如果发生错误也会返回一个error作为对request的回应)


Requesting                  Responding
  Entity                      Entity
----------                  ----------
    |                            |
    | <iq id='1' type='get'>     |
    |   [ ... payload ... ]      |
    | </iq>                      |
    | -------------------------> |
    |                            |
    | <iq id='1' type='result'>  |
    |   [ ... payload ... ]      |
    | </iq>                      |
    | <------------------------- |
    |                            |
    | <iq id='2' type='set'>     |
    |   [ ... payload ... ]      |
    | </iq>                      |
    | -------------------------> |
    |                            |
    | <iq id='2' type='error'>   |
    |   [ ... condition ... ]    |
    | </iq>                      |
    | <------------------------- |
    |                            |
为了加强这些语义,应该遵守如下规则:

  1. “id”属性是必须的
  2. “type”属性是必须的,并且它的值只能是如下这些值中的一种,否则预期接受者或者中间路由必须返回一个<bad-request/>错误节。
    • get -- 请求信息,查询为了完成进一步的操作需要哪些数据等等
    • set -- 提供需要的数据
    • result -- 响应一个成功的get或set请求
    • error -- 报告一个错误
  3. 收到“get”或“set”请求的实体必须回应一个“result"或 “error"响应。响应的 "id"属性要与请求的保持一致。
  4. 收到"result"或"error"响应的实体千万不要回应"result"或"error"节。然而,请求实体可以发送另外的请求。
  5. 一个"get"或"set"IQ节必须包含一个子元素,用于指定请求的语义。
  6. 一个"result"IQ节必须包含0个或1个子元素。
  7. 一个"error"IQ节可以包含一个子元素,这个子元素一般是包含在相关的"get"或"set"请求中的,另外必须包含<error/>子元素。

搜索

你可能感兴趣的:(XMPP -- XML节)