在客户端和服务器(或者服务器与服务器)完成协商之后,双方就可以互相发送XML Stanza。定义了3中基本的节:
<message/>, <presence/>, and <iq/>. 为这些节定义了5种通用的属性。XMPP实体之间的交互正是通过XML节
的交换来完成的,这些节的交换可以是任意顺序、任意数量的。XMPP核心协议定义了这些节的基本结构和语义,
至于具体的“有效载荷”由相关的XEP来定义。
<message/>定义了一种“推送”机制,一个实体可以通过<message/>把信息推送到另一个实体,这类似于Email系统中的通信方式。所有的message 节
都会有一个“to”属性,指定消息的预期接收者,除非这个消息是被发送给一个已连接客户端账户bare JID。收到一个message节时,服务器应该根据“to"
属性把消息路由或发送到预期接受者。
<presence/>是一种专门的”广播“或”发布-订阅“机制,借助于这种机制,多个实体可以收到它们已订阅的关于某个实体的信息(比如,在线情况)。通常
一个发布客户端应该发送一个不带“to”属性的”presence"节到它连接到的服务器,然后服务器就会把这个presence节广播到所有订阅该客户端的实体。然而,
一个发布客户端也可以发送一个带"to"属性的“presence”节,服务器收到这样的节,就会把它路由或发送到预期接收者。<presence/>节常常是由Client使用的
,但它也可以被服务器、附加服务、或者其他种类的实体使用。
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> | | <------------------------- | | |
搜索