第Ⅰ部分 XMPP协议和架构 3
第1章 了解XMPP协议 3
1.1 什么是XMPP 3
1.2 XMPP简史 5
1.3 XMPP网络 6
1.3.1 服务器 6
1.3.2 客户端 6
1.3.3 组件 6
1.3.4 插件 7
1.4 XMPP寻址 7
1.5 XMPP节 8
1.5.1 通用属性 9
1.5.2 presence节 10
1.5.3 message节 12
1.5.4 IQ节 14
1.5.5 error节 15
1.6 连接生命周期 16
1.6.1 连接 17
1.6.2 流的建立 17
1.6.3 身份验证 18
1.6.4 连接断开 18
1.7 小结 19
第2章 设计XMPP应用程序 21
2.1 他山之石 21
2.2 XMPP与HTTP的比较 24
2.2.1 XMPP的优势 24
2.2.2 XMPP的不足 25
2.3 桥接XMPP与Web 27
2.3.1 长轮询 27
2.3.2 管理连接 28
2.3.3 让JavaScript理解XMPP协议 28
2.4 构建XMPP应用程序 29
2.4.1 浏览器平台 29
2.4.2 基本的基础设施 29
2.4.3 协议设计 30
2.5 小结 31
第Ⅱ部分 应用程序 35
第3章 Hello World:第一个应用程序 35
3.1 应用程序预览 35
3.2 Hello应用程序设计 36
3.3 准备 36
3.3.1 jQuery与jQuery UI 37
3.3.2 Strophe 38
3.3.3 fiXHR 38
3.3.4 XMPP账户 38
3.4 开始构建第一个应用程序 39
3.4.1 用户界面 39
3.4.2 应用程序代码 40
3.5 建立连接 43
3.5.1 连接生命周期 43
3.5.2 创建连接 43
3.5.3 连接Hello 44
3.5.4 运行应用程序 48
3.6 创建节 48
3.6.1 Strophe构建器 49
3.6.2 打招呼 51
3.7 处理事件 52
3.7.1 添加和删除处理程序 52
3.7.2 节匹配 52
3.7.3 节处理程序函数 53
3.7.4 处理Hello响应 54
3.8 给Hello程序添加新功能 57
3.9 小结 57
第4章 探索XMPP协议:一个调试控制台 59
4.1 应用程序预览 59
4.2 设计Peek 60
4.3 构建控制台 61
4.3.1 用户界面 61
4.3.2 显示流量 63
4.3.3 美化XML 66
4.3.4 处理XML输入 69
4.3.5 简化输入 71
4.4 研究XMPP 76
4.4.1 控制出席 76
4.4.2 探测版本 77
4.4.3 处理错误 78
4.5 更好的调试 80
4.6 小结 80
第5章 实时微博:一个Identica客户端 83
5.1 应用程序预览 83
5.2 Arthur的设计 84
5.3 Identica微博 84
5.3.1 建立账户 85
5.3.2 开启XMPP 85
5.4 构建Arthur 86
5.4.1 开始 86
5.4.2 接收消息 89
5.5 XHTML-IM 90
5.5.1 将XHTML-IM添加到Arthur 91
5.5.2 发送消息 91
5.6 离线消息 93
5.7 创建更好的微博客户端 96
5.8 小结 97
第6章 与好友交谈:一对一聊天 99
6.1 应用程序预览 99
6.2 Gab的设计 100
6.2.1 出席 100
6.2.2 消息 101
6.2.3 聊天区域 101
6.2.4 花名册区域 101
6.3 制作界面 101
6.4 构建花名册 105
6.4.1 请求花名册 106
6.4.2 处理IQ 109
6.4.3 更新出席状态 110
6.4.4 添加新联系人 111
6.4.5 响应花名册变化 112
6.4.6 处理订阅请求 114
6.5 构建聊天对话 117
6.5.1 处理标签页 117
6.5.2 创建新的聊天对话 118
6.5.3 发送消息 119
6.6 即时通信最佳实践 122
6.6.1 理解消息路由 122
6.6.2 更好地寻址消息 123
6.7 添加活动通知 125
6.7.1 理解聊天状态 25
6.7.2 发送通知 126
6.7.3 接收通知 127
6.8 收尾工作 128
6.9 更多Gab功能 138
6.10 小结 138
第7章 探索服务:服务发现与浏览 141
7.1 应用程序预览 141
7.2 Dig的设计 142
7.3 查找信息 142
7.3.1 disco#info查询 142
7.3.2 disco#items查询 144
7.3.3 disco节点 144
7.4 仓建Dig 145
7.4.1 初始disco查询 148
7.4.2 浏览disco树 151
7.5 挖掘服务 156
7.5.1 查找代理服务 156
7.5.2 发现功能 157
7.5.3 寻找聊天对话 157
7.6 服务发现的更多功能 158
7.7 小结 158
第8章 群聊:多人聊天客户端 159
8.1 应用程序预览 159
8.2 Groupie的设计 160
8.3 公开发言 161
8.3.1 群聊服务 161
8.3.2 进入和离开房间 161
8.3.3 发送和接收消息 164
8.3.4 匿名性 165
8.3.5 创建房间 165
8.3.6 理解角色和岗位 166
8.4 构建界面 168
8.5 加入房问 172
8.6 处理出席和消息 175
8.6.1 处理房间消息 176
8.6.2 跟踪出席状态变化 178
8.6.3 聊天历史 179
8.6.4 保持私密性 180
8.6.5 描述动作 182
8.7 管理房间 184
8.7.1 更换主题 184
8.7.2 处理麻烦制造者 185
8.7.3 招募管理员 187
8.8 改进Groupie 194
8.9 小结 194
第9章 发布与订阅:共享画板简介 195
9.1 SketchCast预览 196
9.2 SketchCast的设计 196
9.2.1 一切都是pubsub 196
9.2.2 展示者的流程 197
9.2.3 观众的流程 197
9.3 填写表单 198
9.3.1 Data Forms扩展 198
9.3.2 表单元素、字段和类型 199
9.3.3 标准化的表单字段 201
9.4 处理pubsub节点 202
9.4.1 刨建节点 202
9.4.2 配置节点 204
9.4.3 pubsub事件 206
9.4.4 发布到节点 206
9.4.5 订阅和退订 207
9.4.6 检索订阅情况 210
9.4.7 获取项 210
9.4.8 订阅管理 212
9.5 使用pubsub广播绘图 213
9.5.1 构建用户界面 214
9.5.2 使用Canvas绘制草图 216
9.5.3 登录并建立节点 219
9.5.4 发布和接收绘图事件 225
9.6 改进SketchPad 240
9.7 小结 240
第10章 与好友一同写作:协作式文本编辑器 243
10.1 应用程序预览 243
10.2 NetPad的设计 244
10.3 操作转换 245
10.3.1 基本原理 245
10.3.2 算法细节 246
10.3.3 实现 248
10.4 扩展XMPP协议 258
10.4.1 忽略未知数据 258
10.4.2 XML命名空间 258
10.4.3 扩展元素 259
10.4.4 扩展属性 261
10.4.5 贡献扩展 261
10.5 设计协议 262
10.5.1 测试支持 262
10.5.2 请求和控制会话 263
10.5.3 编辑操作 264
10.6 构建编辑器 265
10.6.1 初始骨架 265
10.6.2 启动编辑会话 268
10.6.3 谈论工作 275
10.6.4 进行编辑 278
10.7 扩展NetPad 288
10.8 小结 288
第11章 玩游戏:面对面的Tic-Tac-Toe 291
11.1 应用程序预览 291
11.2 Toetem的设计 293
11.3 设计游戏协议 294
11.3.1 跟踪用户 294
11.3.2 管理玩家 295
11.3.3 管理游戏 297
11.3.4 玩游戏和观看游戏 299
11.4 Toetem起步 302
11.5 实现会话和等待列表 308
11.5.1 裁判员(版本1) 308
11.5.2 Toetem客户端(版本1) 313
11.6 实现游戏管理 316
11.6.1 裁判员(版本2) 316
11.6.2 Toetem客户端(版本2) 324
11.7 实现游戏逻辑 329
11.7.1 Tic-Tac-Toe库 329
11.7.2 裁判员(版本3) 333
11.7.3 Toetem客户端(版本3) 336
11.8 让游戏更有趣 363
11.9 小结 363
第Ⅲ部分 高级主题分构 367
第12章 加入已有会话:引导BOSH 367
12.1 会话接入 367
12.1.1 会话技术 368
12.1.2 用例 369
12.2 利用会话接入实现自动登录 370
12.3 小结 374
第13章 部署XMPP应用程序 375
13.1 横向扩展 375
13.1.1 多个连接管理器 376
13.1.2 XMPP服务器集群 378
13.1.3 扩展组件 380
13.1.4 内部联合 380
13.1.5 成为服务器 380
13.2 纵向扩展 381
13.2.1 减少延迟 381
13.2.2 尽量减少XML序列化 383
13.2.3 优化DOM操作 384
13.3 小结 385
第14章 编写Strophe插件 387
14.1 使用插件 388
14.1.1 加载插件 388
14.1.2 访问插件功能 388
14.2 构建插件 389
14.3 创建花名册插件 390
14.3.1 保存联系人 390
14.3.2 获取并维护花名册 392
14.3.3 操纵花名册 397
14.4 试用插件 398
14.5 改进花名册插件 402
14.6 小结 402
附录A jQuery入门 405
附录B 设置BOSH连接管理器 415