xmpp definitive guide笔记_概述

孤人 提交于 2020-01-05 05:08:14

overview(概述)

Domains:
XMPP Server部署的域名。大小不敏感。DSN风格。

Users:
在某个域名下用户的虚拟标识,JID的一部分,即用户名@domain.tld, 一般开发者把用户等同于JID?

Resources:
客户端连接到XMPP Server里,你可以选择或者服务器分配给你的一个段字符串,可以是任何字符。一般会是使用机器名,位置,或者使用的客户端软件名称。usr@domain.tld/resourceId

Internationalization
用户名部分支持所有unicode字符。如 尘@d.cn或者dust@d.cn

XMPP URIs
xmpp:user@domain.tld?message 将发送a "message" to user@domain.tld.

XML流
XMPP的精髓就是xml流。客户端/服务端双向xml流。客户端/服务端交互过程中可以看作为以增量的方式建立一个xml文档。

客户端和服务端之间交互xml片段(snippets),如<message/>,<presence/>和</q>这些片段就叫做xml stanzas. 它是xmpp里面的基本单位。一次可以发送不限数量的stanzas通过(socket)stream.

Communication Primitive:
决定stanza含义的几个因素:
1. 元素名。message, presence或iq,各种stanza都会路由到不同的服务器及客户端被处理。
2.type属性值的会随着stanza在不同情况下变化,它的不同的值会被各种接收者做不同的处理。
3.子元素,作为stanza的实用信息。它可能被呈现给一个用户或者由实用信息命名空间定义的规范在自动完成时确定。

Message:
xmpp的<message> stanza是一个在从一个地方到另一个地方伟递信息的基本“PUSH"方法。因为消息通常得不到接收通知,这是一种快速传递信息的“fire-and-forget"机制。消息被用作IM, 聊天组,警告,通知和其它类似的信息。
有五种风格的消息,它被作为消息的type属性。
normal:
最近似于email消息,因为它们将是一个能得到或不能得到回复的消息。
chat:
是在两个实体之间正在实时会话的消息,它象两个朋友在实时聊天。
groupchat:
它象一个多人聊天室,类似于互联网上的IRC(Internet Relay Chat).
headline:
它被用于发送一个警告或者通知。并且不预期得到回应。(一个客户端收到了一条警告不应该允许用户去回复。)
error
如果先前已发送的消息出现错误,该实体检测到这一问题将返回一条消息的类型错误。

消息还包括to和from属性。并且它能包含一个id属性,用于追踪意图。to地址是意向的接收者,from地址则是发送的JID. 发送客户端不提供from地址,服务器会使用从连接信息戳里替代。

消息还包含一些实用信息元素。xmpp规范定义一些非常基本的实用信息元素:<body/>和<subject/>,它们被用到p2p的聊天消息。I.E.
<message from="madhatter@wonderland.lit/foo" to="alice@wonderland.lit" type="chat">
<body>Who are you?</body>
<subject>Query</subject>
</message> 属性一般以字母顺序出现,但是它们可以以任何顺序出现。

<message>或其它stanzas也可以包含核心xmpp及本书没有定义的实用信息元素。

Presence:
presence是实时通信系统最独特的特征。它向其它实体广播网络的可用性。它允许你知道其它实体是否在线或可以沟通的状态。未通过验证时,别人是看不到你的在线状态的。这个验证被称为:presence subscription,订阅模型使用xmpp<presence/>stanza很精简地实现,指定一个“publish-subscribe"方法。在你上线、开会,离开,下线的时候,订阅了你的人能收到更新的presence信息。

它最基本的特点是,"presence"是一个实体是否在线的开关标识,然而xmpp的presence经常被被扩展一些比较通常的状态,象"away","do not disturb". 这些状态消息能被个性化,象"on a train"或者“I'm writing, don't bother me right now"如:
<presence from="alice@wonderland.lit/pda">
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>

在xmpp的IM应用里,presence在你的roster中典型地被显示。它是一个"presence-enable"联系列表(能看到presence状态的联系人列表)。你的roster包含一组JID及相对你的presence subscriptions状态。当你上线时,公告你的presence给服务器并交给处理,同时也会通知你的联系人你在线了。并且遍历们它们的当前状态显示到客户端界面。


IQ
Info/Qery stanza提供一个结构化的请求-回应交互和简单的工作流。类似于你可能更熟悉的HTT中GET, POST和PUT方法。不象<message/>stanza,IQ stanza只能包含一个有效负载(实用信息),它定义了被处理的请求或者希望接收者处理的一个动作。另外,发送一个IQ stanza的实体必须能收到一个回应。(通常由意向的接收或者接收者的服务器产生)。request和response能被id属性跟踪,它被请求的实体产生,然后由响应的实体包含。IQ stanzas有如下几种type属性值:
get:
请求实体询问信息,象要求注册一个账户。(类似于HTTP GET)。
set:
请求实体提供了一些信息或产生一个相关的请求。(类似于HTTP POST or PUT)
result:
回应实体返回一个get操作的结果,或者对set请求的一个确认。类似于(HTTP 200 statue code).
error:
响应实体或者象XMPP server这样的中间实体,通知请求实体它不能处理get或set请求。(可能因为请求格式不正确,或请求实体没有权限执行此操作等)。它能用扩展xml元素代替类似http风格的状态错误码。

** message stanzes 提供发生立即忘记的转送方式,通常用于传递人类可读的文字,警告,通知,而且你不需要保证内容是否真的送达。 IQ stanzas提供了一个更可靠的结构化数据交换传送方式,它通常是人类不可读的数据。(通过高级消息处理扩展xep-0079提供了一个能使用message stanzas更可靠传输,它仍末被广泛实现或部署)

Extensibility:
一个xml stanza能包含任意数量的字元素。包含xhtml格式消息体。指向一个url, RSS or Atom通知,表单能被填充或提交。webservice的XML-RPC或者SOAP数据,地理位置和宽范围的其它实用信息。(所以xmpp标准是可扩展的,所以playload(负载的实用信息)只受制于你的想象。)

因为xmpp是一个纯xml技术,它使用xml命名空间作为扩展stanza playload一个办法。你能想象这些命名空间等同于编程中的包名。迄今为止,xmpp开发者社区已经定义了许多核心xmpp stanza layer之上的扩展。最经常使用的扩展被发布到xmpp标准基金。(http://xmpp.org),你也可以定你自己的私有扩展为你自定义的功能。

扩展被同时匹配元素名和命名空间,本书中你将看到例如<query xmlns="jabber:iq:roster"/>这样的命名空间,很重要的是意识到这种用法仅仅是一而传统。后续扩展的时候,你不必继承同样的经验。

**你将注意到xml命名空间有很多不同类型,一般最早的看上去象jabber:iq:roster, 2001-2005年是http://jabber.org/protocol/muc,最近(2009)则象urn:xmpp:jingle。不必在意这些区别,它们只是一个命名空间的名称而已。

Asynchronicity:
在xmpp中,你和其它实体在网络上异步交换stanzas。它不同于HTTP模型。你的客户端发送一个请求到服务器上,并且在处理另一个请求之前一直等待回复。相反在XMPP中,你的客户端能用管道请求你的服务器或者其它实体,然后当他们回来的时候接收回复。紧急事件也能通过推到你的客户端去触发信息。(当你的一个设备增加了一项到你的roster,这一项将被推送到你所有的其它设备上,以便它们保持同步)。

Error Handling:
不象其它通信技术,xmpp不能确认每个packet或message都正确送达。一般都假定如果没有收到错误,都认为message或者presence stanza被送达。IQ stanzas是更结构化一些,在IQ-get或者IQ-set之后,你总是能收到一个IQ-result或者IQ-error的回应。错误用stanza's type属性值error进行报告。它会被限定命名空间为urn:ieft:params:xml:ns:xmpp-stanzas的子元素。
<message from="sister@realworld.lit" to="alice@wonderland.lit" type="error">
<error type="cancel">
<service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</message>
error元素的type属性是"auth, cancel, continue,modify or wait"之一。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!