没有合适的资源?快使用搜索试试~ 我知道了~
XMPP高级编程——使用JavaScript和jQuery.pdf

温馨提示
从最基本的层次来说,XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理 现场协议)是一种用来在两个地点之间传递小型的结构化数据段的协议。在此基础上,XMPP 被用来构建大规模即时通信系统、Internet游戏平台、搜索引擎、协作空间以及语音和视频会 系统。 每天都会出现更独特的应用程序, 这进一步说明了XMPP协议功能是如此多样和强大。 XMPP由几个小的构造块组成,并已经在这些原语的基础之上构建了许多更大的构造。在 PP中有众多系统:构建发布-订阅服务、多人聊天、表单检索和处理、服务发现、实时数据 输、隐私控制以及远程过程调用。XMPP程序员通常会创建自己的、独特的、完全为手头上 题量身定做的构造。 大多数社交媒体构造(它们已经将网站(比如 Facebook、MySpace 和 Twitter)推向最前端)也 采用 XMPP 协议。在 XMPP 内部,可以找到由联系人组成的花名册,可以用它们来创建定 或无向社交图。当联系人上线或下线时自动发送出席通知,而个人消息和公共消息是XMPP 统的基础应用。 有时候开发人员之所以选择XMPP作为底层技术层只是因为它已经为开发人 提供了许多现成的社交功能,他们只需要关注自己的应用程序的一些独特方面即可。
资源推荐
资源详情
资源评论














了解 XMPP 协议
本章内容
● XMPP 历史
● XMPP 网络和连接
● XMPP 的三种构造块节
从最基本的层次来说,XMPP(eXtensible Messaging and Presence Protocol,可扩展消息处理
和现场协议)是一种用来在两个地点之间传递小型的结构化数据段的协议。在此基础上,XMPP
已被用来构建大规模即时通信系统、Internet 游戏平台、搜索引擎、协作空间以及语音和视频会
议系统。每天都会出现更独特的应用程序,这进一步说明了 XMPP 协议功能是如此多样和强大。
XMPP 由几个小的构造块组成,并已经在这些原语的基础之上构建了许多更大的构造。在
XMPP 中有众多系统:构建发布-订阅服务、多人聊天、表单检索和处理、服务发现、实时数据
传输、隐私控制以及远程过程调用。XMPP 程序员通常会创建自己的、独特的、完全为手头上
问题量身定做的构造。
大多数社交媒体构造(它们已经将网站(比如 Facebook、MySpace 和 Twitter)推向最前端)也
都采用 XMPP 协议。在 XMPP 内部,可以找到由联系人组成的花名册,可以用它们来创建定
向或无向社交图。当联系人上线或下线时自动发送出席通知,而个人消息和公共消息是 XMPP
系统的基础应用。有时候开发人员之所以选择 XMPP 作为底层技术层只是因为它已经为开发人
员提供了许多现成的社交功能,他们只需要关注自己的应用程序的一些独特方面即可。
XMPP 为我们带来了无限的可能,但在开始之前,我们还需要了解 XMPP 的各种组成部分
以及它们如何有机地构成一个整体。
1.1 什么是 XMPP
与所有协议一样,XMPP 定义了在两个或更多通信实体之间传递数据所采用的格式。对于
XMPP,实体通常是客户端和服务器,但它也允许两台服务器或两个客户端之间进行对等通信。
Internet 上有许多 XMPP 服务器,彼此之间能够相互访问,从而构成了一个由互联系统组成的
1
第 章

第Ⅰ部分 XMPP 协议和架构
4
联合网络。
在 XMPP 上交换的是 XML 数据,这让通信具有丰富的、可扩展的结构。为了获得更具人
类可读性(因此更易于调试)这项更实用的功能,许多现代协议都放弃了二进制编码带来的带宽
节省的优势。XMPP 选择使用 XML,这意味着,它能够充分利用大量与处理 XML 有关的知识
和支持软件。
XMPP 通过使用 XML 而获得的一项主要功能就是 XML 的可扩展性。向 XMPP 协议中添
加能同时保持向前和向后兼容的新功能是一件极其简单的事情。在已向 XMPP Standards
Foundation 注册的 200 个协议扩展中,这种可扩展性得到了大量运用,它为开发人员提供了丰
富的、实际上没有限制的工具。
XML 主要以文档格式闻名,但在 XMPP 中,XML 数据被组织成一对流,每个流分别用于
通信的一个方向。每个 XML 流均由一个开始元素、后跟 XMPP 节和其他顶级元素、然后是一
个结束元素组成。每个 XMPP 节(可带有子元素和属性)均是该流的一级子元素。在 XMPP 连接
末尾,这两个流形成了一对有效的 XML 文档。
XMPP 节构成了该协议的核心部分,而 XMPP 应用程序则关注如何发送和响应各种类型的
节。节可能包含网络上其他实体的信息、类似于电子邮件的个人消息或为计算机处理而设计的
结构化通信数据。下面给出了一个示例节。
<message to='elizabeth@longbourn.lit'
from='darcy@pemberley.lit/dance'
type='chat'>
<body>What think you of books?</body>
</message>
在一个典型的客户端-服务器 XMPP 会话中,一个与此类似的由 Elizabeth 发给 Darcy 的节
将从 Elizabeth 的客户端传送到她的服务器。她的服务器将注意到该节的目的地是某个远程服务
器上的一个实体,因此它与该远程服务器建立 XMPP 连接,并将该消息转发到该处。服务器之
间的通信与电子邮件网络类似,但与电子邮件服务器不同的是,XMPP 服务器之间总是能够直
接通信,而不需要借助中间服务器。
这种直接通信省去了垃圾消息和未经授权消息的常见传播媒介。这也是众多 XMPP 安全设
计中的一环。它还支持通信端点之间通过使用 TLS(Transport Layer Security,传输层安全)来加
密通信并通过 SASL(Simple Authentication and Security Layers,简单身份验证和安全层)实现强有
力的身份验证机制。
XMPP 是为交换短小信息片段而设计的,而不是针对大型二进制数据块。但 XMPP 能够用
来协商并建立可在端点之间传递大型数据块的带外或带内传输。对于这种传送而言,XMPP 相
当于信令层。由于专注于小型结构化数据块,XMPP 协议的延迟极短,这使得它极其适用于实
时应用程序。在开发人员试验实时 Web 时,这些应用程序(包括协作空间、游戏以及同步)正驱
动着 XMPP 变得越来越流行。
我们将从本书中看到建立实时 Web 应用程序是多么简单的事情。当读完本书,读者应该对
为什么如此多的人都被 XMPP 的强大功能所折服有一个透彻的理解。

第 1 章 了解 XMPP 协议
5
1.2 XMPP 简史
XMPP 协议问世已经超过十年时间,从最初的简陋功能一路发展到今天,它已经取得了很
大的进展。XMPP 的大部分设计均缘于 XMPP 创建时所处的环境,而 XMPP 的历史为我们了
解开放协议如何被采用和创新提供了一个有趣的案例。
1996 年 Mirabilis 发布了 ICQ,这使得 Internet 用户之间能够进行快速的个人通信。ICQ 得
以快速传播,而当时并没有其他公司发布类似的产品。1997 年 AOL 发布了 AOL Instant
Messenger。Yah o o 也紧随其后于 1998 年发布了 Yahoo Pager(最终改名为 Yahoo Messenger),而
微软也最终于 1999 年凭借 MSN Messenger(现在的 Windows Live Messenger)加入竞争行列中。
所有这些即时通信应用程序都各自绑定到它们公司运营的专有协议和网络。ICQ 的用户不
能与 Yah o o 用户交谈,反过来也一样。因此,常常出现这种情况:用户运行多种即时通信应用
程序,这样才能够与自己的所有联系人聊天,因为尚无一家公司宣称占据 100%的市场份额。
不久之后,开发人员期望为这些专有 IM 网络编写自己的客户端。有些开发人员希望编写
能够联合两种或更多种 IM 网络的多协议客户端,还有一些开发人员希望将这些应用程序移植
到微软的 Windows 以及 Apple 的 Mac OS 之外的操作系统。这些开发人员遇到了许多障碍,他
们必须对这些没有文档资料的协议进行逆向工程,而 IM 网络则主动频繁地修改协议以挫败第
三方开发人员的努力。
开放的、去中心化(decentralized)的 IM 网络和协议的思想正是在这样的气候中诞生了。
Jeremie Miller 于 1999 年 1 月发布了 Jabber 项目。Jabber 是一种基于 XML 的去中心化的即
时通信协议,同时也是一个名为 jabberd 的服务器实现。立即形成了一个围绕该协议和实现的社
区,并不断衍生出越来越多的客户端和新想法。在 2000 年 5 月,
Jabber 的核心协议得以稳定,
而 jabberd 被正式发布。
JSF(Jabber Software Foundation,Jabber 软件基金会)于 2001 年成立,旨在协调围绕 Jabber
协议及其实现而展开的各项工作。在 2002 年年底,JSF 已经向 IETF 标准化进程提交了核心协
议规范,并成立了一个 IETF 工作小组。2004 年 10 月,这个标准化进程产生了 Jabber 协议的改
进版,改名为 XMPP,其文档成为 RFC 标准,编号分别为 3920、3921、3922 和 3923。
在该协议的早期,开发人员持续通过向 JSF 提交协议扩展的方式来扩展它的可能性。这些
扩展被称为 JEP(Jabber Extension Proposal,Jabber 扩展提议)。最终 JSF 及其扩展遵循 Jabber 到
XMPP 的名称改变,变成了 XSF(XMPP Standards Foundation,XMPP 标准基金会)和 XEP(XMPP
Extension Proposal,XMPP 扩展提议)。
2005 年XMPP 技术的大规模部署已经展开,比较突出的就是 Google Talk(Google 基于 XMPP
的 IM 服务)的发布。
现今 XMPP 生态系统已经相当庞大。已经有接近 300 种扩展被接受作为 XEP,并且创建了
数十种客户端和服务器实现,既有商业产品也有开放源代码产品。实际上使用任何编程语言的
软件开发人员都能够找到一个库来加速 XMPP 应用程序的开发进程。
XMPP 应用程序起初是以 IM 为中心的,这反映出它的出身,但开发人员已经发现 XMPP
能轻松胜任多种最初未能预见的应用程序,包括搜索引擎和同步软件。这种效用确实证明了开
放系统和开放标准化进程的强大威力。

第Ⅰ部分 XMPP 协议和架构
6
最近,IETF 已经组成了一个新的 XMPP 工作组来准备 XMPP 规范的下一版本,把自从最
初的 RFC 发布以来人们获取的所有认识整合起来。XMPP 不断得到精炼和扩展,这样应用程序
开发人员和 Internet 用户将总能够拥有一个开放的、去中心化的通信协议。
1.3 XMPP 网络
任何 XMPP 网络都是由若干角色组成的。这些角色可分为服务器、客户端、组件和服务器
插件。XMPP 开发人员将编写代码来创建或修改这些角色类型中的一种。每种角色均在 XMPP
网络中发挥着各自的作用。
1.3.1 服务器
XMPP 服务器(更精确地说是使用服务器-服务器协议的 XMPP 实体或客户端-服务器协议中
的服务器端)是任何 XMPP 网络的循环系统。服务器的任务就是为 XMPP 节提供路由,无论这
些节是从内部的一个用户发往另一个用户,还是从本地用户发往远程服务器。
一组能够相互进行通信的 XMPP 服务器构成了一个 XMPP 网络。一组公开的 XMPP 服务
器形成了全局的 XMPP 联合网络。如果某个服务器不能使用服务器-服务器协议,那么它将变
成一个孤岛,不能与外部服务器通信。
XMPP 服务器总是允许用户连接到自己。但也可以编写直接使用服务器-服务器协议的应用
程序或服务,通过减轻路由开销来提高效率。
任何人都能够运行 XMPP 服务器,而且几乎所有平台都有全功能的服务器可用。Ejabberd、
Openfire 和 Tigase 是三种能够在 Windows、Mac OS X 和 Linux 系统上运行的流行的开放源代码
服务器。还有几个商业 XMPP 服务器可用,包括 M-Link 和 Jabber XCP。
1.3.2 客户端
大多数 XMPP 实体均是客户端,它们通过客户端-服务器协议连接到 XMPP 服务器。这些
实体中许多都是由人类驱动的、传统的 IM 用户,但也有一些以机器人形式运行的自动化服务。
客户端必须向某个地方的 XMPP 服务器进行身份验证。服务器将该客户端发送的所有节路
由到适当的目的地。服务器还负责管理客户端会话的其他几个方面,包括它们的花名册以及裸
地址,稍后我们就会看到。
本书中的所有应用程序均被编写为客户端应用程序。这通常是大多数 XMPP 开发的起点。
对于不需要用户参与或者有着苛刻要求的应用程序,更好的做法通常是创建一个不同类型的实
体,比如服务器组件。
1.3.3 组件
并不只有客户端能够连接到 XMPP 服务器,大多数服务器还支持外部服务器组件。这些组
件通过添加某种新服务来增强服务器的行为。这些组件在服务器内部有各自的身份和地址,但
在外部运行并通过组件协议通信。
组件协议(由 XEP-0114 定义)可以让开发人员以一种服务器不可知的方式创建服务器扩展。
剩余16页未读,继续阅读

wuguoweiii
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
- 5
- 6
前往页