Jade Dungeon

硕士专业学位论文

Web 2.0时代的机遇与挑战

进入Web 2.0时代以后由于用户直接参与网络内容的生产,信息交换越来越频繁。为了实现 不同的应用和用户之间相互通信,一个通用的、开放的、具有强大可扩展能力的应用层 通信协议是非常有必要的。而XMPP(eXtensible Messaging and Presence Protocol, 可扩展通讯和表示协议)协议正好就具有这些优点。

同样因为用户直接参与到内容的生产,许多网络应用迅速进入了海量数据的时代,需要 面对大数据、高并发场景的新挑战。函数式语言因为其先天的无副作用特性与灵活的 语法,渐渐取代了面向对象语言,受到了业界的广泛使用。所以在本项目中选择Scala 作为开发语言。

研究内容以及目标

本文主要研究XMPP协议及其基于Scala语言的实现,具体研究内容及目标为:

  1. XMPP协议的基本规范。描述XMPP协议这一基于XML文本的应用层协议及其优点。
  2. XMPP协议的基本实现,以及可能的应用范围。通过实现基本的连接、登录、认证、消息 的发送接收功能,可以使用的应用场景。
  3. XMPP连接建立的验证过程。通过从建立连接到登录验证的过程研究XMPP协议的连接特点 和安全措施。
  4. XMPP基本的文本传输实现。通过实现消息的发送与接收来研究XMPP协议如果实现格式 丰富的各种信息。
  5. 使用函数式编程的必要性,以及如何替代传统的设计模式。在实现各种功能的过程中 体现函数式编程所具有的简洁语法与功能强大的语义。
  6. 如何基于Scala本身的语言特性实现面向切面(AOP)编程。通过Scala语言内置的Trait (特质)可以不借助Spring等外部框架,直接实现面向切面编程。
  7. 如何基于Scala本身的语言特性实现依赖注入(IOC)。通过Scala语言内置的Trait (特质)可以不借助Spring等外部框架,直接实现依赖注入。

国内外研究现状

国外发展现状

除了客户端与服务器之间的通讯功能,XMPP还支持服务器与服务器之间的通信。这样就 形成了一个去中心化的服务器群,不同公司、不同网络之间的服务器可以通过XMPP协议 连接在一起,目前国外的Jabber、ICQ、Google Talk、Yahoo Message、MSN Messenger都 已经通过XMPP协议连接,这样一个Jabber用户就可以直接与MSN Messenger通信,而不是 需要同时打开Jabber与MSN Messenger两个客户端。

国外比较著名的XMPP库:

  1. Smack:基于Java实现。在实现协议的同时,将复杂的XMPP协议封装成了几个常用的 API接口以方便重用,在国外非常受欢迎。通过SAX解析XML文本,并结合Java语言内置的 线程控制方式实现多线程异步通讯。
  2. Gloox:一个基于C++实现的XMPP协议客户端开源类库,实现了XMPP协议核心XML传输机制 以及基于XML流的一些扩展应用。通过Gloox可以很容易的与XMPP服务器进行即时通讯, 发送接受XMPP消息。
  3. AnyQ:按照国际标准XMPP协议开发的一套即时通讯系统。使用VC++开发。
  4. Converse.js:一个开源的web聊天客户端,运行于浏览器中。因此,能够集成到任何 网站,能连接任何支持XMPP/Jabber的服务端,不管是类似Jabber.org这样的公共聊天 服务端,还是私有的服务器。

Scala语言在国外受到了广泛地使用,如:LinkedIn、EDFT、Twitter、Novell、the Guardian、Xebia、Xerox、FourSquare、Sony、Siemens、Thatcham、OPower、GridGain, AppJet、Reaktor。著名的社交网站twitter在创业初始使用Ruby实现快速开发与更新。但 由于Ruby性能瓶颈的限制,twitter经常由于服务器承受不住激增流量而频频崩溃。2012年 ,twitter把核心服务由Ruby转移到Scala后,服务器的吞吐量有了极大地提高。

XMPP一开始就是作为即时消息通信协议(IM协议)而定制的,但由于协议的文本本身是以 XML元素的形式展现,所以在XML的强大语义支持下,XMPP也同时具有了强大的语义与 高度的可扩展性。XMPP不仅可以作为即时消息通讯协议,还被用于实现带有状态的 Web Service。

国内发展现状

Scala语言在国内互联网公司使用的不多,如:阿里巴巴,还有一些投资银行。某投行上海 研发部核心业务用的是Java,然后用Scala针对公司自身的业务逻辑自己定义了一套DSL (Domain-Specific Language领域定制语言)给客户使用。这样很多不是程序员出身的员工 不用学习Java或Scala等编程语言,只要用这套DSL就可以用来编写程序,定制一些业务流程 。而Scala对DSL的良好支持可以实现这一点。

国内XMPP的主要使用群体是程序员与其他互联网相关技术人员,大公司为了封闭生态圈, 使用XMPP协议的比较少见。但这一情况已经在渐渐改变,比如人人网、如意通等国内企业 也已经开始使用XMPP协议,相信以今后XMPP在中国一定会有更广阔地发展前景。

全文结构

本文总共分为九章,每章的主要内容如下:

  • 第一章:前言。
  • 第二章:介绍XMPP协议的基础概念,基本格式与连接生命周期。
  • 第三章:介绍XMPP协议中客户端的登录过程。
  • 第四章:介绍Scala开发环境的搭建。
  • 第五章:规划应用的基础架构,包括系统的架构、IO模块与验证模块。
  • 第六章:实现具体的登录过程。
  • 第七章:实现从服务器取得联系人列表。
  • 第八章:实现消息发送与接收。
  • 第九章:总结与展望。