Jabberd/XMPP 学习之七:xml流和xml节

前端之家收集整理的这篇文章主要介绍了Jabberd/XMPP 学习之七:xml流和xml节前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
XML流的定义:
XML流是一个容器,用于任何两个实体通过网络进行XML元素的交换. XML流的开始明确表达为一个打开的 "流头" (即,一个包含了适当树形和命名空间声明的 XML <stream> 标签),而这个XML流的结尾明确表达为一个关闭的XML </stream> 标签. 在流的生存期间,发起方实体可以通过这个流发送不限数量的XML元素,这些元素或用来协商这个流 (例如,完成TLS协商SASL协商) 或用于 XML节. "发起流" 是从发起方实体 (通常是一个客户端或服务器) 到接收方实体 (通常是一个服务器),也可视为对应发起方 "连接到" 或 "和......开启会话" 接收方实体. 发起流允许从发起方实体到接收方实体的单向通讯; 为了让接收方实体能够向发起方实体发送节,接收方实体必须(MUST) 协商一个相反的流 ("应答流").
XML节的定义:

XML节是一个XMPP中的基本语义单位. 一个节就是一个第一层元素 (在流的深度=1),它的元素名是 "message","presence",或 "iq" ,而它的合格命名空间是 'jabber:client' 或 'jabber:server'. 相比之下,任何其他命名空间限定的第一层元素都不是一个XML节 (stream errors,stream features,TLS相关的元素,SASL相关的元素,等等.),由'jabber:client' 或 'jabber:server' 命名空间限定的 <message/>,<presence/>,或 <iq/> 元素但不在第一层 (例如,包含在一个扩展元素中的 <message/> 元素 ( 做报告用的8.4)也不是一个XML节,不是命名空间 'jabber:client' 或 'jabber:server'限定的 <message/>,或 <iq/> 元素也不是一个XML节. 一个XML节典型的包含一个或多个必要的子元素 (以及相关的属性,元素,和 XML 字符串数据) 来传达所需的信息,子元素可以(MAY)使用任何XML命名空间.

有三种节: message,presence,和 IQ ("Info/Query"的缩写). 这些节类型提供三种不同的通讯原语: 一个 "推送" 机制用于已生成的消息,一个特定的 "发行-订阅" 机制用于广播网络可用性信息,和一个 "请求-应答" 机制用于更结构化的数据交换。

打开流

连接到接收方实体的适当的IP地址和端口之后,发起方实体通过发送一个流头 ("发起流头") 来打开到接收方实体的流.

I: <?xml version='1.0'?>
   <stream:stream
       from='juliet@im.example.com'
       to='im.example.com'
       '1.0'
       xml:lang='en'
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'>

然后接收方实体通过发送一个它自己的流头 ("应答流头") 来回复发起方实体.

R: <?xml id='++TR84Sm6A3hnt3Q065SnAbbk3Y=' 'http://etherx.jabber.org/streams'>

接着实体们就可以再进行流协商过程的剩余步骤了.

猜你在找的XML相关文章