Jabberd/XMPP 学习之四:服务器处理XML节的规则

前端之家收集整理的这篇文章主要介绍了Jabberd/XMPP 学习之四:服务器处理XML节的规则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
兼容的服务器实现必须(MUST)确保两个实体之间的XML节按次序处理.
在按次序处理的需求之外,每个服务器实现将包含它自己的递送树"delivery tree"以处理它接收到的节.这个树决定一个节是否需要路由到其他域,在内部处理,还是递送到和一个已连接的节点相关的资源. 以下规则适用:

没有'to'地址

如果这个节没有'to'属性,服务器应该(SHOULD)为发送它的实体处理这个节. 因为所有从其他服务器收到的节必须(MUST)拥有'to'属性,这个规则仅适用于从一个连接到这台服务器的已注册实体(如一个客户端)收到的节.如果这个服务器收到一个没有'to'属性的出席信息节,服务器应该(SHOULD)向那些订阅了这个发送实体的出席信息的所有实体广播它,如果可能的话(即时消息和出席信息应用程序中出席信息广播的语义定义在[XMPP-IM|XMPP文档列表/XMPP正式RFC标准/RFC3921]). 如果服务器接收到一个类型为"get" 或 "set" 的没有'to'属性的节并且它理解这个节的名字空间下的内容,它必须(MUST)为这个发送实体处理节(在这里"process"的含义是由相关的名字空间的语义所决定的)或返回一个错误给发送实体.

外部域

如果'to'属性中的JID的域ID部分的主机名和服务器自身或其子域配置的主机名不匹配,服务器应该(SHOULD)路由这个节到外部域(取决于本地服务规定或安全策略关于域间通信的规定).有两种可能的情况:
- 一个服务器之间的流已经存在于两个域之间: 发送者的服务器通过这个已存在的流为这个外部域路由这个节到授权服务器
- 两个域之间不存在服务器间的流: 发送者服务器 (1) 解析这个外部域的主机名(定义在服务器间的通信Server-to-Server Communications (第十四章第四节)),(2) 在两个域之间进行服务器到服务器的流协商(定义在 Use of TLS (第五章) 和 Use of SASL (第六章)),然后 (3) 通过这个新建的流为外部域路由这个节到授权服务器
如果路由到接收者的服务器不成功,发送者的服务器必须(MUST)返回一个错误给发送者; 如果接收者的服务器联系上了但是从接收者的服务器递送到接收者不成功,接收者服务器必须(MUST)通过发送者的服务器返回一个错误给发送者.

子域

如果'to'属性中的JID的域ID部分的主机名和服务器自身配置的主机名的一个子域名匹配,服务器必须(MUST)自己处理这个节或路由这个节到专门负责这个子域的特定服务(如果子域被配置了),或者返回一个错误给发送者(如果子域没有配置).

纯粹的域或特定的资源

如果'to'属性中的JID的域ID部分的主机名和服务器自身配置的主机名本身匹配,并且'to'属性中的JID类型是<domain> 或 <domain/resource>,服务器(或其中定于的资源)必须(MUST)根据节的类型适当的处理这个节或返回一个错误节给发送者.

同一域中的节点

如果'to'属性中的JID的域ID部分的主机名和服务器自身配置的主机名本身匹配,并且'to'属性中的JID类型是<node@domain> 或 <node@domain/resource>,服务器应该(SHOULD)递送这个节到节的'to'属性中的JID所指明的预定的接收者. 以下规则适用:
  1. 如果这个JID包含一个资源ID(例如,格式是<node@domain/resource>)并且存在一个连接的资源符合这个全JID,接收者服务器应该(SHOULD)递送这个节给正确符合这个资源ID的流或会话.
  2. 如果这个JID包含一个资源ID(例如,格式是<node@domain/resource>)并且不存在一个连接的资源符合这个全JID,接收者服务器应该(SHOULD)返回一个<service-unavailable/> 节错误给发送者.
  3. 如果这个JID的格式是<node@domain>并且存在至少一个此节点的连接资源,接收服务器应该( SHOULD)递送这个节给至少其中一个已连接的资源,依据应用程序定义的规则(一系列即时消息和出席信息应用程序的递送规则定义在[XMPP-IM|XMPP文档列表/XMPP正式RFC标准/RFC3921])。
转载:http://wiki.jabbercn.org/RFC3920#.E8.B5.84.E6.BA.90.E7.BB.91.E5.AE.9A

猜你在找的XML相关文章