目录
1.1
1.2
1.3
1.4
1.5
2.1
2.2
2.3
2.4
1. 介绍........................................................................................................................................... 6
你可以用 XMPP 做什么 ......................................................................................... 6
1.1.1 服务 ................................................................................................................... 6
1.1.2 应用 ................................................................................................................... 7
历史概述 ................................................................................................................... 9
开源和开放标准 ....................................................................................................... 9
延伸性 ..................................................................................................................... 10
总结 ......................................................................................................................... 10
2. XMPP 基础 .............................................................................................................................. 11
架构 ......................................................................................................................... 11
地址 ......................................................................................................................... 13
2.2.1 域 ..................................................................................................................... 14
2.2.2 用户 ................................................................................................................. 14
2.2.3 资源 ................................................................................................................. 14
2.2.4 国际化 ............................................................................................................. 14
2.2.5 统一资源标识 ................................................................................................. 15
XML 流 ................................................................................................................... 15
通讯原语 ................................................................................................................. 16
2.4.1 消息 ................................................................................................................. 16
2.4.2 出席 ................................................................................................................. 17
2.4.3 信息/查询 ........................................................................................................ 17
2.4.4 扩展性 ............................................................................................................. 20
2.4.5 异步 ................................................................................................................. 20
2.4.6 错误处理 ......................................................................................................... 20
建立一个基本的 XMPP 应用程序、 .................................................................... 21
总结 ......................................................................................................................... 23
3. 出席......................................................................................................................................... 24
有人在家吗 ............................................................................................................. 24
3.1
授权需要:握手订阅 ............................................................................................. 24
3.2
出席是怎样传播的? ............................................................................................. 25
3.3
可用性状态 ............................................................................................................. 27
3.4
出席优先级 ............................................................................................................. 27
3.5
定向出席 ................................................................................................................. 28
3.6
下线 ......................................................................................................................... 28
3.7
丰富出席 ................................................................................................................. 29
3.8
出席和名单 ............................................................................................................. 29
3.9
3.10 使用出席 ................................................................................................................. 32
出席为基础的路由 ................................................................................. 32
访问控制 ................................................................................................. 33
出席传输 ................................................................................................. 33
3.11 综述 ......................................................................................................................... 33
3.10.1
3.10.2
3.10.3
2.5
2.6
4.7
4.8
5.1
5.2
5.3
5.4
6.1
6.2
6.3
6.4
6.5
4.1
4.2
4.3
4.4
4.5
4.6
4. 即时消息 ................................................................................................................................. 35
IM ............................................................................................................................ 35
聊天会话 ................................................................................................................. 36
你在吗?聊天状态通告 ......................................................................................... 37
格式化消息 ............................................................................................................. 40
vCard ....................................................................................................................... 41
阻止和过滤通讯 ..................................................................................................... 42
4.6.1 阻止:一个简单方法 ..................................................................................... 43
4.6.2 高级阻止和过滤 ............................................................................................. 44
更多的消息扩展 ..................................................................................................... 45
总结 ......................................................................................................................... 45
5. 发现世界 ................................................................................................................................. 46
物品和信息 ............................................................................................................. 46
使用服务器和服务进行服务发现 ......................................................................... 48
使用客户进行服务发现 ......................................................................................... 51
5.3.1 明确的服务发现 ............................................................................................. 51
5.3.2 实体能力:服务快速发现 ............................................................................. 53
综述 ......................................................................................................................... 54
6. 数据表单 ................................................................................................................................. 55
基本结构 ................................................................................................................. 55
使用数据表单 ......................................................................................................... 57
Defining your terms:Form types ........................................................................... 59
数据表单中包含多媒体 ......................................................................................... 59
总结 ......................................................................................................................... 60
7. 多方通讯互动 ......................................................................................................................... 61
开始聚会 ................................................................................................................. 61
群聊基础 ................................................................................................................. 62
人群控制 ................................................................................................................. 65
昵称的意义? ......................................................................................................... 68
配置相关任务! ..................................................................................................... 70
隐私,安全,和所有这些事情 ............................................................................. 73
MUC 作为数据传输 ................................................................................................ 74
综述 ......................................................................................................................... 75
8. 发布/订阅 ............................................................................................................................... 76
Why it matters ......................................................................................................... 76
入门 ......................................................................................................................... 77
订阅 ......................................................................................................................... 78
发布和接收通告 ..................................................................................................... 81
Payloads: To send or not to send? ........................................................................... 82
Items:To store or not to store? ............................................................................. 83
发现节点 ................................................................................................................. 84
节点管理 ................................................................................................................. 87
8.8.1 创建和删除节点 ............................................................................................. 87
8.8.2 配置节点 ......................................................................................................... 88
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
③
9.
10.
9.2
9.3
9.4
9.5
9.6
9.7
8.8.3 管理节点读取 ................................................................................................. 91
8.8.4 通过容器节点聚集条目 ................................................................................. 94
因为 Suke 移除了所有的关联,所以她发送一个空的元素。 ....................... 96
Personal Eventing:PubSub simplified ................................................................... 96
8.9
8.10 总结 ....................................................................................................................... 100
Jingle:Jabber 作为多媒体 .................................................................................................. 101
即时通讯与其他 ................................................................................................... 101
9.1
Jingle 版本 .................................................................................................................................... 101
Jingle 模型 ............................................................................................................. 101
拨打电话 ............................................................................................................... 105
网络地址群转换 ................................................................................................... 108
基于 ICE 的 Jingle ................................................................................................. 109
附加 Jingle 行动 .................................................................................................... 111
综述 ....................................................................................................................... 111
发送二进制数据 ........................................................................................................... 113
10.1 从小开始: Bits of Binary ....................................................................................... 113
10.2 向上移:通过 In-Band 传输中等大小文件 ........................................................ 114
10.3 考虑更大数据:通过 Out-of-Band 发送大文件 ................................................. 117
10.3.1 直接发送数据 ............................................................................................... 117
10.3.2 通过代理发送数据 ....................................................................................... 118
10.4 文件传输协商 ....................................................................................................... 120
10.4.1 使用 Stream Initiation 进行文件传输 .......................................................... 121
10.4.2 使用 Jingle 进行会话协商 ............................................................................ 123
10.5 总结 ....................................................................................................................... 126
远程命令 ....................................................................................................................... 127
11.1 控制客户端 ........................................................................................................... 127
11.1.1 一个简单命令 ............................................................................................... 128
11.1.2 命令和数据表单 ........................................................................................... 129
11.2 提供自定义命令 ................................................................................................... 133
11.3 先进的工作流程:SOAP,RPC,IO 数据 ........................................................... 137
11.4 综述 ....................................................................................................................... 137
连接方法和安全性 ....................................................................................................... 138
Negotiating an XMPP stream ................................................................................ 138
12.1
12.2 认证选项 ............................................................................................................... 142
12.3 连接加密 ............................................................................................................... 143
12.4 联邦服务器 ........................................................................................................... 144
12.5 服务器组件 ........................................................................................................... 147
BOSH:XMPP over HTTP ...................................................................................... 148
12.6
12.7 无服务器消息 ....................................................................................................... 157
XMPP 安全性 ........................................................................................................ 159
12.8
加密 ....................................................................................................... 160
12.8.1
12.8.2 认证和标识 ................................................................................................... 160
12.8.3 垃圾邮件和滥用 ........................................................................................... 161
12.9 总结 ....................................................................................................................... 161
11.
12.
13.
14.
15.
16.
13.4
设计决策 ....................................................................................................................... 162
XMPP 协议是正确的选择吗? ............................................................................ 162
13.1
XMPP 的社区如何工作 ........................................................................................ 163
13.2
13.3 写 XMPP 软件 ....................................................................................................... 164
13.3.1 混合,匹配和扩展现有的 XMPP 软件 ....................................................... 164
客户端扩展,BOT 方式,构件,或者服务器模块? ....................... 165
13.3.2
13.3.3 打造你自己的客户端或服务器 ................................................................... 166
XMPP 协议扩展 .................................................................................................... 167
13.4.1 如何设计自定义扩展 ................................................................................... 167
13.4.2 新扩展规范 ................................................................................................... 168
13.5 综述 ....................................................................................................................... 169
建立一个 XMPP 应用程序 ........................................................................................... 170
CheshiR 微博平台 ................................................................................................. 170
14.1
14.2 第一阶段:ChishiR XMPP 即时通讯机器人....................................................... 171
14.2.1 分析 ............................................................................................................... 171
14.2.2 设计 ............................................................................................................... 171
14.2.3 编码 ............................................................................................................... 173
14.3 第二阶段:配置 CheshiR XMPP 即时通讯机器人 ............................................. 175
14.3.1 分析 ............................................................................................................... 175
14.3.2 设计 ............................................................................................................... 175
编码 ....................................................................................................... 175
14.3.3
14.4 第三阶段:使用一个服务器组件来收缩 CheshiR XMPP 服务 ........................ 177
14.4.1 分析 ............................................................................................................... 177
14.4.2 设计 ............................................................................................................... 177
编码 ....................................................................................................... 177
14.4.3
14.5 第四阶段: 使用 CheshiR 服务器组件注册 ....................................................... 179
14.5.1 分析 ............................................................................................................... 179
14.5.2 设计 ............................................................................................................... 179
14.5.3 编码 ............................................................................................................... 180
14.6 第五阶段:通过花名册扩展服务器组件 ........................................................... 181
14.6.1 分析 ............................................................................................................... 181
设计 ....................................................................................................... 182
14.6.2
14.6.3 编码 ............................................................................................................... 182
14.7 下一阶段: ........................................................................................................... 184
14.8 是一个 CheshiR 服务器模块还是一个专用服务器? ....................................... 185
14.9 总结 ....................................................................................................................... 185
附录 A XMPP 的技术规格指南 .................................................................................... 187
XMPP 协议的 RFC ................................................................................................. 187
15.1
XMPP 扩展协议 .................................................................................................... 187
15.2
15.3 诙谐的 XEPs .......................................................................................................... 199
XMPP 套件 ............................................................................................................ 199
15.4
附录 B 流行的服务器、客户端和库 .......................................................................... 200
16.1 服务器 ................................................................................................................... 200
16.2 客户端 ................................................................................................................... 201
16.2.1 跨平台(Linux、Mac OS X、Windows) .................................................... 201
16.2.2
Linux .............................................................................................................. 202
16.2.3 Mac OS X ....................................................................................................... 202
16.2.4 Windows ....................................................................................................... 203
16.2.5 Web 浏览器 .................................................................................................. 203
16.3 代码库 ................................................................................................................... 204
ActionScript ................................................................................................... 204
16.3.1
C .................................................................................................................... 204
16.3.2
C++................................................................................................................. 204
16.3.3
C#................................................................................................................... 205
16.3.4
Flash .............................................................................................................. 205
16.3.5
Java ................................................................................................................ 205
16.3.6
JavaScript ....................................................................................................... 206
16.3.7
Perl ................................................................................................................ 206
16.3.8
16.3.9
PHP ................................................................................................................ 207
16.3.10 Python ........................................................................................................... 207
16.3.11 Ruby .............................................................................................................. 207
附录 C 深入实践的思考 .............................................................................................. 209
入门 ....................................................................................................................... 209
调试工具 ............................................................................................................... 209
网络设置 ............................................................................................................... 212
术语 ............................................................................................................................... 214
17.1
17.2
17.3
17.
18.
1. 介绍
1.1 你可以用 XMPP 做什么
可扩展通讯与表示协议(XMPP)是一项用于实时通讯的开放技术。它使用可扩展标记
语言(xml)作为交换信息的基本格式。本质上看,XMPP 提供了一种近乎实时的在实体之
间传递 xml 片段的方式。
XMPP 在应用程序中被广泛使用,同样,你也在你的程序中使用 XMPP。为了实现这种
可能性,从抽象视角具体到服务和程序的视角来看待 XMPP 是很有帮助的。XMPP 的服务在
IETF 的两个主要规格以及几十个扩展规格中被定义。XMPP 应用一般是组织和个人共同关心
的软件程序和部署情景,当然核心服务也允许你建立其他种类的应用程序。
RFC 修订
关于这篇文章,[RFC 3920]]和[RFC 3921]正在积极修订和勘误,阐明含糊不清的地方,
提高它们的可读性,修正额外的错误代码,等等。这些文件在 IETF 中被叫做[rfc3920bis]和
[rfc3921bis] ,它们提供 XMPP 最准确的定义。在你阅读这本书的时候,现有的 XMPP 定义
可能已经被新的取代。要最新版本的修订,访问 http://XMPP.org。
1.1.1 服务
在本书中,服务定义为可以被任何给定应用使用的功能。XMPP可以提供以下核心服务:
信道加密
这个服务,定义在[RFC 3920],并在在这本书的第 12 章进行解释。它在客户端和服务器,
或者是在两台服务器之间提供了加密连接。虽然信道加密不一定是令人兴奋的,但它是构造
安全程序的重要步骤。
认证
这个服务,同样定义在[RFC 3920],并在这本书的第 12 章进行解释。它是安全应用开发
的另一重要组成部分。认证系统能保证试图通过网络进行通信的实体首先被服务器验证,它
能起到一种网络访问的“守门人”的作用。
出席
这个服务,定义在[RFC 3921],在这本书的第 3 章进行解释。它允许你发现其他实体的
网络可用性。在最基础的水平上,出席服务回答了这样一个问题,“一个实体是在线而且可
以通信的、还是离线并不能通信的呢?”出席数据也可以包括更详细的信息(如一个人是否正
在会议中)。典型的情况是,出席信息的共享是基于两个实体之间一个显式的出席订阅,以
此来保护用户的隐私信息。
联络清单
这个服务,也被定义在[RFC 3921],并在这本书的第 3 章解释。它使你可以在 XMPP 服
务器上存储一个联系人名单或者花名册。这一服务最常见的用法是使用即时消息的好友名
单,但是任何在服务器有账户的实体都可以使用这个服务,来维持一个已知的信任的实体的
列表(例如,它可以被机器人使用)。
一对一消息
这个服务,定义在[RFC 3920],在这本书的第 4 章说明。它允许你发信息给另一个实体。
它常用于个人即时通信,但信息的形式可以是任意 XML,而且同一网络的任何两个实体可以
交换信息,包括程序,服务器,组件,开启 XMPP 的 web 服务,或是其他的 XMPP 实体。
多方通讯消息
这个服务,定义在[XEP-0045],在这本书第 7 章说明。它允许你加入一个虚拟聊天室来
在众多参与者之间交换信息,这类似于互联网多线交谈(IRC)。信息可以是普通的文本,或者
可以包含 XML 延伸来实现更先进的功能,如房间配置、室内投票,以及各种对话控制信息。
通知
这项服务定义在[XEP-0060],在本书的第 8 章说明。它允许你创建一个通知并把它传递
给众多的订阅者。它类似于多方通讯消息,但是它适合用于具有明确的频道或者主题订阅的
一对多传递(称为“节点”)。
服务发现
这个服务,定义在[XEP-0030],在这本书的第 5 章说明。它允许你发现被另一个实体支
持的特性,以及任何与它相连的附加实体(如聊天房间服务中的一个房间)。
能力广告
这个服务,定义在[XEP-0115],说明在这本书的第 5 章。它是出席服务的延伸服务,它
为服务发现数据提供一种简化符号,从而使你能够轻易地缓存被网络上其他实体支持的特
性。
结构化数据表单
这项服务,在[XEP- 0004]定义,在这本书的 6 章解释。它允许你和其他实体交换结构化
但是灵活的表单(类似于 HTML 表单)。它常用于你需要收集其他实体的 ad-hoc 的信息的场
合,如配置和其他任务。
工作流管理
这个服务,定义在[XEP-0050],说明在这本书第 11 章。它能让你与另一实体在一个结构
化工作流中互动。它支持典型的工作流程的行动,例如移动到业务流程的下一个阶段或执行
一个指令。它经常与数据表单一起使用。
对等网络媒体会话
这个服务,定义在[XEP-0166]说明在这本书的第 9 章。它允许你来协调和管理与另一实
体的媒体会话。这样的会话可用于语音聊天,视频聊天,文件传输,以及其他实时互动等目
的。
这些都是你(或者你的应用程序)作为一个参与者,在一个 XMPP 网络中能得到的核心服
务。XMPP 社区的开发者在各种 XMPP 扩展中定义了一些附加功能,但在这里,我们将着重
于对构建实时应用程序最有益的服务。
1.1.2 应用
假设你有一些核心服务,你能用它们构建什么应用呢?这里有一些可能性:
即时消息
绝大多数人都熟悉的经典的即时消息系统结合了三个核心服务:出席,联络清单,和一
对一的通讯。这些系统往往包括更多的服务和特征,如果你有这三方面的服务,你就可以建
立一个基础的即时消息应用程序。
群组聊天
多方通讯消息服务使您和 IRC 建立相近的群组聊天系统。通常,群组聊天系统是用于特
定的应用程序,例如金融行业的实时交易系统,消防人员和军事人员的情况室,及虚拟教室。
游戏
结合定制的扩展,一对一的消息和多方通讯消息,你可以建立简单的游戏系统。例如,
Chesspark 服务(http://www.chesspark.com/)完全是利用 XMPP 服务建成的。另一些游戏开发
者使用 XMPP 来添加出席和联络列表特性到已有的多人游戏中。
系统控制
结合一对一的通信和数据表单服务,可以部署轻量级系统用于远程系统的控制和交互。
在这一领域的部署应用包括网络管理、遥感勘测和机器人的控制。
地理定位
XMPP 通知服务是不可知负载(payload-agnostic)的。 一个定义有效载荷的格式是地理
定位,让您建立很好的基于地理位置的应用,如汽车跟踪。
中间件和云计算
有很多公司和研究小组正积极地研发基于 XMPP 的计算服务系统、轻量级中间件和云计
算基础设施管理。使用 XMPP 的效果是令人惊叹的,因为这些应用传统地依靠重量级的通讯
技术。我们看到,XMPP 正在占领低端市场。已经使用 XMPP 架构的公司认为,它也可以在
非 IM 的用途中被很好的使用。这些系统通常使用工作流扩展来传输结构化数据,关于这部
分的内容将在 6 到 11 章提到。具体的应用包括生物信息学。
数据同步
受欢迎的社交网络应用越来越多地使用了 XMPP 通知服务来解决特定的问题:不断查询
更新信息。现有的基于 HTTP 的部署被认为效率是不高的,因为有些时候,feed 从上次查询
以来没有发生改变。相比之下,XMPP 的通知服务只有当 feed 已经改变时才发送一个更新,
节省了可能被浪费在查询上的带宽和服务器资源量。
网络语音通话
2005 年 4 月开始的谷歌语音通话应用使 XMPP 在语音通话方面的应用得到发展。自那
时以来,XMPP 的媒体会话扩展通过 XFS 逐渐形成,并应用于诺基亚手机和“让每个孩子拥
有一台笔记本电脑”的项目。同样的扩展也可以被用于广泛的媒体会议类型,包括视频,文
件传输,书写板,和协作编辑。
身份服务
给定稳定的标识符(JabberIDs)和强大的认证服务,就可能使用 XMPP 对身份进行授权建
设服务如 Openid 和 OAuth 等。
其他的应用实例,包括数据转移、基于网页的即时聊天、移动设备通讯、允许出席的目
录。 我们将在这本书中,说明最受欢迎和最有趣的 XMPP 的用途。
虽然我们强调了 XMPP 许多应用,但令人遗憾的是我们不能覆盖所有的应用。我们不仅
缺乏空间和时间,而且应用的名单每天都在增加。此外,XMPP 最前沿的应用还没有标准化,
它们的变动太大,不适合在本书中描述。在写这篇文章的时候正在进行的工作有很多,例如
协同文档编辑、白色书写板、日历集成、文件共享、个人媒体网络。关于这些话题,如果你
想了解更多,我们建议你参与 XMPP 社区(见第 13 章)。在那里,我们定义了使用 XMPP 的新
方法。
XMPP 技术的未来会是怎样的?虽然我们不能确定,但趋势是清晰的:更多组织和服务系
统供应者选择去部署 XMPP,更多的网络应用程序选择 XMPP 接口, XMPP 被用于解决更多
的商业问题,XMPP 社区正在继续发展。使用 XMPP 技术是令人兴奋的,我们邀请你来加入!