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> | | <------------------------- | | |
- “id”属性是必须的
- “type”属性是必须的,并且它的值只能是如下这些值中的一种,否则预期接受者或者中间路由必须返回一个<bad-request/>错误节。
- 收到“get”或“set”请求的实体必须回应一个“result"或 “error"响应。响应的 "id"属性要与请求的保持一致。
- 收到"result"或"error"响应的实体千万不要回应"result"或"error"节。然而,请求实体可以发送另外的请求。
- 一个"get"或"set"IQ节必须包含一个子元素,用于指定请求的语义。
- 一个"result"IQ节必须包含0个或1个子元素。
- 一个"error"IQ节可以包含一个子元素,这个子元素一般是包含在相关的"get"或"set"请求中的,另外必须包含<error/>子元素。