jabber协议概述中文版(转载三)
4.
元素
元素提供关于一个Jabber实体的可用性信息。任何一个通过一个Jabber ID确认的实体可以与另一个实体进行在线状态信息的通信,这种通信大多以订阅在线状态信息的方式进行。
所有实体表现出的在线状态不是“可用”就是“不可用”。“可用”状态表示发送者可以立即收到消息。“不可用”状态表示发送者不能在当前时间收到任何数据。默认情况下,所有
元素除非包含type=”unavailable”属性外,都表示“可用”。“可用”的更多特殊形势通过和子元素进行指定。
4.1. “type”属性
的“type”属性根据不同目的使用。除了提示其它用户本用户的可用性状态的“普通”用法外,还包括订阅、取消订阅、以及探测在线状态信息。下面是“type”属性的可用值:
4.1.1. type=”available”
如果没有包含任何“type”属性,在线状态包将被设为type=”available”,用来提供用户在线时的信息。一个type=”available”的在线状态包通常包含一个元素以详细说明Jabber实体的可用类型,以及一个元素,该元素包含人能看懂的关于该可用类型的描述。在线状态包还可以包含一个
元素,来指明该连接的Jabber ID的优先级。
例子:
from=”juliet@capulet.com/balcony”
to=”romeo@montague.net/orchard”/>
away
Stay but a little, I will come again.
元素的可用值为:
l away――Jabber用户或实体在线,但不能马上联系上
l chat――Jabber用户或实体在线并有兴趣聊天
l dnd――Jabber用户或实体在线,但不想被打扰(“dnd”表示“do not disturb”)
l xa――Jabber用户或实体在线,但已经离开很长时间了(“xa”表示“extended away”)
可以包含任意特性数据,这些数据通常包含对于用户状态的描述,如,“开会中”是“away”的一个表现值,或者“忙于编码”可以是“dnd”的一个表现。
4.1.2. type=”error”
当一个在线状态包发送给一个不存在的JID时,或在发送在线状态请求时发生一个错误时,服务器都将返回一个type=”error”的在线状态包。
下面是一个例子(注意域名的类型):
type=”subscribe”
to=”romeo@montague.nett”/>
回复的例子:
from=”romeo@montague.nett”
to=”juliet@capulet.com/balcony”
type=”error”>
Remote server timeout. Unable to deliver
packet.
4.1.3. type=”probe”
向一个特定实体(实体不能发送在线状态消息给自己)发出在线状态信息请求。服务器而非客户端,进行一个探测请求。实际上,虽然Jabber客户端也可以发送一个探测一个指定Jabber用户是否在线的请求,但通常都是服务器端发出探测请求。注意,只有在发起请求的用户在请求所对应的用户的花名册上,并且拥有“from”或“both”订阅类型时,服务器才会发出探测请求。在下面的例子中,我们将看到我们的英雄Romeo向Juliet发出一个探测请求,Juliet所在服务器回复一个“状态报告包”(包含jabber:x:delay名字空间中指明的上次在线状态更新的时间戳)
探测请求的例子:
from=”romeo@montague.net”
to=”juliet@capulet.com”
type=”probe”/>
回复探测请求的例子:
from=”juliet@capulet.com/.”
to=”romeo@montague.net”>
Stay but a little, I will come again.
away
xmlns=”jabber:x:delay”
from=”juliet@capulet.com/.”
stamp=”15310309T23:47:15″/>
4.1.4. type=”subscribe”
发送一个请求,这个请求是接收者在其在线状态改变时,自动发送在线状态信息给发送者。
例子:
from=”romeo@montague.net”
to=”juliet@capulet.com”
type=”subscribe”/>
4.1.5. type=”subscribed”
发送一个消息,表明发送者接受了接受者对其再现状态订阅的请求。从现在起,当发送者的在线状态信息改变时,服务器将会把状态信息发送给接收者。
例子:
from=”juliet@capulet.com”
to=”romeo@montague.net”
type=”subscribed”/>
4.1.6. type=”unavailable”
例子:
from=”juliet@capulet.com”
to=”romeo@montague.net”
type=”unavailable”>
Disconnnected
4.1.7. type=”unsubscribe”
发送一个请求,表明接收者停止发送在线状态信息给发送者。
例子:
from=”juliet@capulet.com”
to=”romeo@montague.net”
type=”unsubscribe”/>
4.1.8. type=”unsubscribed”
这种类型的在线状态包有两个用途:
1. 发送一个表明发送者接受接收者关于不订阅其在线状态信息的请求的通知。服务器将不再发送发送者的在线状态信息给接收者。
2. 拒绝一个订阅请求。服务器将不再发送发送者的在线状态信息给试图订阅其在线状态信息的用户。
例子:
from=”romeo@montague.net”
to=”juliet@capulet.com”
type=”unsubscribed”/>
4.2. 其它
属性
除了设置“type”属性,还可以通过下列属性修改
元素:
4.2.1. “from”属性
标识在线状态包的发送者。一般Jabber ID再“from”属性中必须写成user@host/resource的格式。从XML的观点来说,这个属性是所有
元素所必须的,而在实际应用中,都是服务器对该属性进行添加和修改(防止一些欺骗的手段),因此客户端开发者不需要考虑它。
例子:
4.2.2. “id”属性
为在线状态请求包配置唯一的验证符。“id”属性由Jabber客户端或客户库(如Gabber或JabberCOM)生成,客户端用其为在线状态包的轨迹进行验证。“id”属性是可选的,并且不能用于系统其它任何地方。
例子:
4.2.3. “to”属性
标识在线状态包的接收者。一般Jabber ID在“to”属性中都是user@host/resource的格式,user@host的格式也是可以的,但当接收者在线时,它将转化为user@host/resource。在Jabber的一般用法中,Jabber客户端向服务器发出在线状态包,服务器将这些在线状态包发送到该用户花名册上所有的用户。当一个Jabber客户端发送的
元素中不含“to”属性时,服务器将将其转化为在线状态包发送给指定的Jabber实体。下面的例子将演示这一过程。
发送给服务器的在线状态的例子:
Stay but a little, I will come again.
away
服务器发给指定用户的在线状态例子:
to=”romeo@montague.net/orchard”
from=”juliet@capulet.com/balcony”>
Stay but a little, I will come again.
away
4.3.
的子元素
下面的元素用于
协议。
4.3.1.
在Jabber中,根据Jabber知道的设备数或位置数,一个用户可以建立相同数量的连接。用户可以给每一个资源赋予一个数字优先级(通过对指派给该资源的Jabber客户端进行设置),这个优先级与
元素的子元素
方法进行通信。
当在线状态包发送到服务器后,服务器有能力决定哪一个连接资源需要指派一个单一的Jabber ID,该资源将收到发往该Jabber ID的消息,这是因为数字最高的资源是默认或第一资源。如果最高优先级的资源不可用,消息和其它Jabber通信将发送给次高优先级的资源(当其它资源都不可用时,一个没有从默认数到0的优先级的客户端,也可以成为第一资源)
举例来说,Julie可以通过两个资源:the balcony 和 the chamber连接她的帐号juliet@capulet.com。如果“balcony”资源的优先级被设置为“2”,而“chamber”资源的优先级被设为“1”,而且两个资源都可以连接,消息将发送到juliet@capulet.com/balcony,而不是juliet@capulet.com/chamber。
4.3.2.
可选的元素告诉Jabber客户端如何显示一个用户的在线状态。标签是一个典型的标签的伴随标签,标签包含更多在线状态改变理由的描述信息。如果元素不在
元素中,Jabber接收客户端将指明该用户处于“普通”状态。下面是四个可选项:
标签
含义
chat
该客户可以马上联系上
away
该客户在线,但刚刚离开(如吃午饭,开会)
xa
该客户在线,但已经处于非活动状态很长时间了。
dnd
该用户处于谢绝打扰的模式
4.3.3.
元素包含更多关于用户在线状态的描述。大多数Jabber客户端都包含一些元素的默认设置;另外,它们还允许我们提供富有个性的描述如“我在吃午饭”或者“钓鱼中”。
4.3.4.
元素作为一个扩展机制来使用,或发送从服务器发送命令给客户端,或从一个客户端发送命令到另一个客户端。每次用到这个元素时,必须指明相关的XML名字空间。单一消息可以包含多个子元素实例。下列已定义的名字空间可以被子元素使用:
l jabber:x:autoupdate
l jabber:x:delay
l jabber:x:encrypted
l jabber:x:oob
l jabber:x:roster
这些名字空间在下面的Jabber名字空间中被更完整地描述。
没有评论▼