XMPP协议概述

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Jabber协议概述PeterSaint-Andrestpeter@jabber.org1.4版Jabber服务协议的概述1.介绍Jabber是一个由开源社区发起并领导开发的即时消息和在线状态的系统。Jabber系统和其它即时消息(IM)服务的一个功能上的差别在于Jabber拥有开放的XML协议。在保持Jabber1.0版本有关消息核心以及在线状态的协议的基础上,增加了一些必要的扩展。本文档将对Jabber服务器1.4版的Jabber协议进行介绍。在XML上下文的数据流中,Jabber开放的XML协议包括三个顶级XML元素:message/presence/iq/(info/query)每一个元素通过属性和名字空间包含大量的数据,这些属性和名字空间都是Jabber的组成部分(但不包括为特殊应用的名字空间应用)。下面将描述整个Jabber协议。如果您想获得关于Jabber系统结构的信息,请查看名为Jabber技术概述的文档()。2.XML流一个Jabber会话由两个平行的XML流组成,一个从客户端到服务器端,另一个从服务端到客户端。当一个Jabber客户端连接上一个Jabber服务器时,这个客户端将发起一个客户端-服务器的XML流,同时作为响应,服务器也将发起一个服务器-客户端的XML流。所有message/,presence/,以及iq/元素都被放在这些XML流的上下文中。下面就有一个例子:SEND:?xmlversion=”1.0”encoding=”UTF-8”?SEND:stream:streamSEND:to=’jabber.org’SEND:xmlns=’jabber:client’SEND:xmlns:stream=’’RECV:stream:streamRECV:xmlns:stream=’’RECV:id=’39ABA7D2’RECV:xmlns=’jabber:client’RECV:from=’jabber.org’(XMLforusersessiongoeshere)*SEND:/stream:streamRECV:/stream:stream*注意:必须等到当一个iq/元素(特别指一个’jabber:iq:auth’名字空间下的query/元素)发送了认证信息后,服务器才会同意用户会话进行工作。3.message/元素message/元素是Jabber开放XML协议三个顶级元素中的一个。它被用来包含两个Jabber用户间互相发送消息内容,或者两个JabberIDs之间更一般的消息(因为,通过神奇的传输器,另一个IM系统可以用JabberID代替,如70902454@icq.jabber.org)。3.1.消息类型-“type”属性Jabber支持几种不同的消息,这些消息通过message/的“type”属性来进行区分。下面就是“type”属性的有效值:3.1.1.[default](不设置“type”属性)表示本消息是一个普通消息。默认的情况下,客户端在没有设置属性时,将消息类型定为普通消息。例子:messageto=romeo@montague.net/orchardbodyWhereforeartthoughRomeo?/body/message3.1.2.type=”chat”表示消息需要被一个接一个的显示在聊天界面上(一般是一条接一条的界面,不过实际界面可以被用户自己定义。)例子:messageto=romeo@montague.net/orchardtype=chatbodyWhereforeartthoughRomeo?/body/message3.1.3.type=”error”表示消息被描述成一个错误条件。实际的错误在消息中用一个error/元素来描述。一个message/元素包括一个body/和一个error/。下面的例子将演示,当Juliet对一个不存在的用户发送一个“hi”的消息时,将收到的包体:例子:messageto=juliet@capulet.comfrom=flomeo@montague.nettype=errorbodyhi/bodyerrorcode=404NotFound/error/message3.1.4.type=”groupchat”表示本消息需要在一个聊天室的界面中进行显示。例子:messageto=cauldron@conference.witches.orgtype=groupchatbodyDouble,doubletoilandtrouble/body/message3.2.message/其它属性除了设置“type”属性,还可以通过下面的属性修改message/元素:3.2.1.“from”属性消息发送者的标志。总得来说,JabberID的”from”必须是user@host/resource的格式。从XML的观点来说,这个属性必须包含于所有的message/元素中,为了对付一些欺骗,实际应用中服务器添加或置换这个属性。因此,它并不是客户端开发者需要关心的问题。例子:messagefrom=juliet@capulet.com/balconybodyWhereforeartthouRomeo?/body/message3.2.2.“id”属性“id”属性是作为消息的一个唯一标志。它由Jabber客户端或客户库(类似WinJab或JabberCOM),生成,客户端用它来为跟踪消息(比如将发送到一个群组聊天室的信息和从这个聊天室收到的消息相关联,或将一个消息与它可能产生的错误相关联)进行标识。“id”属性是可选的,并且在系统的别的方是不可用的。例子:messageto=romeo@montague.net/orchardid=JCOM_85bodyWhereforeartthouRomeo?/body/message3.2.3.“to”属性表示消息的接收者。JabberID的“to”属性一般是user@host/resource格式,user@host也可以被接受。如果接收者在线,通过user@host/resource方式解决,如果用户不在线,直接发送离线存储器。这个属性是所有message/元素必须的。例子:messageto=romeo@montague.net/orchardbodyWhereforeartthouRomeo?/body/message3.3.message/中的子元素下面的子元素是用来定义一个Jabber消息的上下文或数据元。3.3.1.body/这个元素包含消息的主要文本。body/元素只存在于一个message/元素中,并且只能包含明文。不过,它可以由其它子元素构成(如error/、x/)。3.3.2.error/当消息类型属性被置为“error”时,这个元素将被使用。错误代码被一个”type”属性定义,这个”type”属性包含代码数,通过error/元素来包含一个这个错误的文本描述。error/元素必须包含在原始消息的body/中。下面的例子将演示,当Juliet向一个不存在的用户发送“hi”消息后的包体:例子:messageto=juliet@capulet.comfrom=flomeo@montague.nettype=errorbodyhi/bodyerrorcode=404NotFound/error/message附文中有非法代码与它们所定义的含义表。3.3.3.html/html/元素结合XHTML名字空间(),为一个消息提供一个交替的名字空间,就像在email世界中规定同时发送普通文本与HTML版本的邮件消息一样。这个功能使用的是W3C开发的基本XHTML格式(),关于Jabber在消息中的XHTML执行细节,请看Jabber消息的暂定格式规范()。所有XHTML的根元素都必须是htmlxmlns=””/html。这个根元素中,支持任何一个基本XHTML格式中定义的元素,但不是每一个元素可以通过即时消息的上下文来进行理解。3.3.4.subject/这是一个可选元素,包含消息的标题。3.3.5.thread/当一个Jabber客户端发送一个”chat”类型的消息,将生成唯一的线程ID(通常是由发送者的JabberID和当前时间生成的一个hash)。消息发送者和接收者在聊天中后续的消息都包含一个thread/子元素,这个子元素包含原始线程ID。这使得消息发送者和接收者对回复进行认证并创建一个对话线程。下面的是例子:messagefrom=juliet@capulet.com/balconyto=romeo@montague.net/orchardtype=chatthreadAAC96FEFDE226C2C04BE8F2E19A2151B/threadbodyArtthounotRomeoandaMontague?/body/messagemessagefrom=romeo@montague.net/orchardto=juliet@capulet.com/balconytype=chatthreadAAC96FEFDE226C2C04BE8F2E19A2151B/threadbodyNeither,fairsaint,ifeithertheedislike./body/message3.3.6.x/x/元素作为一个扩展机制来使用,或发送从服务器发送命令给客户端,或从一个客户端发送命令到另一个客户端。每次用到这个元素时,必须指明相关的XML名字空间。单一消息可以包含多个x/子元素实例。下列已定义的名字空间可以被x/子元素使用:jabber:x:autoupdatejabber:x:delayjabber:x:encryptedjabber:x:oobjabber:x:roster这些名字空间在下面的Jabber名字空间中被更完整地描述。下面是一个使用jabber:x:delay名字空间在加入的群组聊天室的显示上下文的例子:messagetype=’groupchat’from=’cauldron@conference.witches.org’bodyThricethebrindedcathathmew’d./bodyxxmlns=’jabber:x:delay’stamp=’10541031T21:43:40’CachedInGCHistory/x/message4.presence/元素presence/元素提供关于一个Jabber实体的可用性信息。任何一个通过一个JabberID确认的实体可以与另一个实体进行在线状态信息的通信,这种通信大多以订阅在线状态信息的方式进行。所有实体表现出的在线状态不是“可用”就是“不可用”。“可用”状态表示发送者可以立即收到消息。“不可用”状态表示发送者不能在当前时间收到任何数据。默认情况下,所有presence/元素除非包含type=”unava

1 / 98
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功