前 言 采用XMPP的应用程序范围广泛,包括即时通信、多用户聊天、语音和视频会议、协作空间、实时游戏、数据同步,甚至包括搜索。虽然XMPP起初是作为专有即时通信系统(比如ICQ和AOL Instant Messenger)的开放的标准化替代技术,但它已经成长为一个极为健全的、适用于各类扣人心弦的创新应用程序的协议。 Facebook在其聊天系统中使用了XMPP技术。Google则采用XMPP来架构Google Talk以及它的令人兴奋的新型Google Wave协议。Collecta基于XMPP的发布-订阅系统构建了一个实时搜索引擎。有几款Web浏览器正在试验使用XMPP作为同步和共享系统的基础。还有许多公司在它们的Web应用程序中使用XMPP来提供增强的用户体验和实时交互。 XMPP的核心是小型结构化信息块的交换。与HTTP类似,XMPP是一种客户端-服务器协议,但它与HTTP的不同之处在于,它允许任何一端向另一端异步发送数据。XMPP使用长连接,数据以推(而不是拉)的形式发送。 由于XMPP的不同,使得它成为HTTP极佳的补充协议。采用XMPP的Web应用程序将能够实现AJAX提供给静态网站的所有功能,而且它们将实现进一步的交互性和动态性。JavaScript和动态HTML已经将桌面应用程序功能带到Web浏览器,而XMPP将为Web带来新型通信机制。 由于其即时通信传统,XMPP内置了许多常见的社交Web功能。联系人列表和订阅机制建立了社交图,出席更新机制可帮助用户了解别人在做什么,而个人通信机制可以保护用户之间通信的私密性。XMPP还拥有将近300种扩展,这为我们构建复杂应用程序提供了范围广泛的、实用的工具。只须使用核心协议以及这些扩展中的少数几个,我们就可以构建出神奇的应用程序。 本书讲解如何在自己的应用程序中利用XMPP来构建具有社交功能的、协作式的、实时的应用程序。我们将开发一系列逐渐变复杂的XMPP应用程序,从“Hello, World!”开始,最后将开发出一个协作式文本编辑器、一个共享的涂鸦板以及一个实时的、多玩家游戏。最终,您将拥有使用XMPP构建下一代应用程序或向当前应用程序中添加新型的实时、推送或社交功能所需的所有工具。 目标读者 本书是为那些对开发XMPP应用程序感兴趣的开发人员而编写的。读者不需要具备任何XMPP经验,但如果先前有过这方面的经验,那么当然会对学习有所帮助。本书假设读者已经对XMPP有所耳闻,并希望深入研究。 本书中的所有应用程序均采用JavaScript语言开发,这是因为它易于理解,而且许多程序员比较熟悉它,每台带有Web浏览器的计算机都支持它。虽然本书使用JavaScript,但所有的概念和应用程序都可以使用任何语言开发,绝大多数“核心部分”与编程语言、所用的库以及Web浏览器没有任何关系。理解和处理本书中的代码并不要求读者是一位JavaScript专家。 本书假设读者理解基本的前端Web技术,即CSS和HTML。如果您曾经手工编写过少量的HTML并修改过了CSS样式属性,那么您已经具有足够的经验了。 本书还使用两个库,即jQuery和Strophe。如果以前曾经使用过jQuery,那么会有所帮助,但如果没有用过,那么可以参见附录A提供的一个简短入门指南。在开发应用程序的过程中,我们将充分讲解Strophe库。 涵盖内容 XMPP协议及其扩展涵盖面非常广泛。本书关注那些得到广泛应用的XMPP部分。以下主题得到更多关注: ● XMPP的即时通信功能,比如花名册、出席和订阅以及个人聊天 ● XMPP节、节错误消息、客户端协议语法和语义 ● 扩展XMPP节 ● 服务发现(XEP-0030) ● 数据表单(XEP-0004) ● 多人聊天(XEP-0045) ● 发布-订阅(XEP-0060) 尽管这些主题全部位于客户端,但几乎所有这些主题也同样适用于XMPP机器人或服务器组件和插件。 本书还涵盖XMPP编程相关的主题,比如应用程序设计、事件处理以及将简单的协议元素组合成一个更强大的整体。在这个过程中,我们还将讨论几个Web编程主题,比如Canvas API。 XMPP问世已经超过10年,现在已经相当成熟。本书内容涵盖核心协议的1.0版。对于XMPP协议的未来版本,本书的XMPP协议部分应该仍然有效,就像HTTP 1.0客户端能够很容易与HTTP 1.1服务器通信一样。 XMPP有很多扩展,本书也同样讨论了其中的一些扩展。本书所关注的大多是处于稳定成熟状态的扩展。对于每一个用到的扩展,给出了它们的文档编号,这样如果有疑问就可以检查该扩展的最新版本,看看是否已经改变或已被取代。 本书中的应用程序采用jQuery的1.3系列版和jQuery UI的1.7系列版。通常这些库在很大程度上保持向后兼容。此外本书使用了Strophe库的1.0版,但未来的1.X版也应该能够运行。 本书结构 本书内容主要按照一系列示例XMPP应用程序的指导教程来进行组织。每个应用程序在难度上逐渐增加,分别用来展示XMPP协议及其扩展的一个或多个有用部分。出于清晰考虑,这些应用程序经过缩减,但它们确实是XMPP开发人员每天建立的应用程序类型。 全书划分为Ⅲ个部分。 第Ⅰ部分介绍XMPP协议、它的用途以及XMPP应用程序的设计。第1章讲解了XMPP的用例、该协议的历史以及它的组成部分。第2章解释XMPP适用于哪些场合并深入研究了XMPP应用程序的工作原理,特别是在Web环境下。 第Ⅱ部分是本书的重点,它包含了9个解决不同问题的XMPP应用程序。每个应用程序均要比前一个应用程序更加复杂,并且构建在前几个应用程序的概念之上。从第3章的简单的“Hello, World!”示例开始,最终在第11章中构建一个实时的、多玩家游戏。 第Ⅲ部分讲解了几个高级的但重要的主题。第12章讨论会话接入,这是一项有关安全、优化和持久化方面的技术。第13章深入研究如何最佳地部署和扩展基于XMPP的应用程序。第14章讲解如何使用Strophe的插件系统以及如何创建自己的插件。 使用本书的前提条件 本书使用Web技术,因此几乎不需要任何特殊的工具。我们可以在任何平台上使用、构建和运行本书中的应用程序。第3章讲解这些应用程序所需的库,而且大多数均可以使用而无须下载任何代码。 还将需要一种提供网页服务的方式,比如本地Web服务器或托管账号。如果不方便采用这些方式,那么可以使用Tape程序来提供文件服务。Tape是一种简单的Web服务器,我们将在附录B中讲解。由于浏览器安全策略的需求,我们无法轻易地直接从本地文件系统中运行这些应用程序。 为了运行这些应用程序,还需要一个XMPP账号(如果要自行测试代码,那么在某些情况下还需要多个账号)。虽然可以借助任何公共XMPP服务器来完成这个任务,但还需要确保该服务器支持发布-订阅和多用户聊天功能,大多数服务器均支持这些功能。此外,还可以下载并运行自己的XMPP服务器,但本书并没有讲解这方面的内容。 第12章还需要在服务器端执行一些操作。该示例使用Python编程语言以及Django框架来完成这些操作。该章属于高级主题,本书中的普通应用程序并不需要它。 源代码 在研读本书示例的过程中,可以选择采用手工方式录入所有代码,也可以选择本书所附的源代码文件。本书中所用的所有源代码均可以从和http://www.tupwk.com. cn/downpag下载。在该网站上,只要搜索本书的书名(可以通过搜索栏或使用书名列表),然后在本书详细信息页面上单击Download Code链接来获取本书的源代码。 因为许多书籍都有着相似的书名,所以最简单的方式是按照ISBN搜索。本书的ISBN是978-0-470-54071-8。 在下载代码之后,使用解压缩工具解压。或者,可以打开Wrox主代码下载页面,查看本书以及所有其他Wrox书籍的代码。 勘误表 尽管我们已经尽了各种努力来保证文章或代码中不出现错误,但是错误总是难免的,如果您在本书中找到了错误,例如拼写错误或代码错误,请告诉我们,我们将非常感激。通过勘误表,可以让其他读者避免受挫,当然,这还有助于提供更高质量的信息。 请给wkservice@vip.163.com发电子邮件,我们就会检查您的反馈信息,如果是正确的,我们将在本书的后续版本中采用。 要在网站上找到本书的勘误表,可以登录,通过Search工具或书名列表查找本书,然后在本书的细目页面上,单击Book Errata链接。在这个页面上可以查看Wrox编辑已提交和粘贴的所有勘误项。完整的图书列表还包括每本书的勘误表,网址是/misc-pages/ booklist.shtml。 P2P邮件列表是为作者和读者之间的讨论而建立的。读者可以在上加入P2P论坛。该论坛是一个基于Web的系统,用于传送与Wrox图书相关的信息和相关技术,与其他读者和技术用户交流。该论坛提供了订阅功能,当论坛上有新帖子时,会给您发送您选择的主题。Wrox作者、编辑和其他业界专家和读者都会在这个论坛上进行讨论。 在上有许多不同的论坛,帮助读者阅读本书,在读者开发自己的应用程序时,也可以从这个论坛中获益。要加入这个论坛,必须执行下面的步骤: (1) 进入,单击Register链接。 (2) 阅读其内容,单击Agree按钮。 (3) 提供加入论坛所需的信息及愿意提供的可选信息,单击Submit按钮。 (4) 然后就可以收到一封电子邮件,其中的信息描述了如何验证账户,完成加入过程。 提示: 不加入P2P也可以阅读论坛上的信息,但只有加入论坛后,才能发送自己的信息。 加入论坛后,就可以发送新信息,回应其他用户的帖子。可以随时在Web上阅读信息。如果希望某个论坛给自己发送新信息,可以在论坛列表中单击该论坛对应的Subscribe to this Forum图标。 对于如何使用Wrox P2P的更多信息,可阅读P2P FAQ,了解论坛软件的工作原理,以及许多针对P2P和Wrox图书的常见问题解答。要阅读FAQ,可以单击任意P2P页面上的FAQ链接。