进行交互。通过开源服务端Openfire,可轻松解决以上问题。
(2)资源数据库
资源数据库中保存着企业内部的基本信息,此处只需使用表5.1 所要求的数据。一般企业内会使用Orcale数所库,同时也可选用开源数据库MySQL。
(3)IM系统数据库
此数据库与资源数据库不一样,它是专门为IM系统而设的。其中包括消息的存读、用户办公状态的存读等。
(4)客户端
如果采用B/S结构,则可集中管理客户端,开发及维护成本高,但很难利用本地资源,其实现方式很多,一般使用javascript和css丰富页面效果。若采用C/S结构,则需要在客户端安装应用程序,虽然维护成本高,但可展现丰富的效果,可使用功能强大的Java语言及Smack API开发。
(5)通信协议
通信协议是沟通客户端与服务端的桥梁。互相通信的信息都是遵守XMPP通信协议并进行封装,使得多种产品(如:MSN、QQ、GTalk)互通成为可能。其中XMPP是著名的开源通信协议。
通过以上开源产品,则可构建企业IM系统,如图5:
图5 整体结构
12
5.2 客户端框架
客户端采用MVC结构设计,应用多种设计模式,如单例模式、门面模式、工厂模式,优化设计过程,使得软件内部低耦合、高内聚,如图6。
图6 客户端框架图
5.3 服务端框架
服务端主要由应用服务层及数据层组成,并与客户端进行遵守XMPP协议的通信。其中应用服务层采用Openfire集成各种IM系统功能,或与OA系统集成。其优点如下[16]:
(1)Openfire内部集成ResinWeb服务器,可以设计其于Web的管理程序。 (2)实现了插件机制,方便扩展。服务器在运行的时候,会定时地扫描一个特定的录下的文件,当发现有新的Jar包出现时,就读入它所有的类,分析类中有没有支持插件接口的类,如果有,就加载并运行它。
(3)用户容量方面,单台服务器可支持上万并发用户。在测试环境下可以支持5000用户同时在线,每秒可以转发2000个包。
(4)Openfire安装和使用都非常简单。
13
6 详细设计
详细设计将根据需求分析及系统分析,对企业即时通信系统进行更细致的设计,为编码阶段作出充分准备。在详细设计阶段,我们将看到该系统界面的大体轮廓,以及相关技术的解决方法。 6.1 开发语言及开发平台 6.1.1 开发语言:Java
选用Java作为开发语言,除了它简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言外,由于Openfire是由Java编写的,所以使用Java语言作为开发语言,能够简单地实现相关接口,并制作插件。同时Java有很好的跨平台能力,其客户端能够轻松地运行各种平台。而JavaFX的推出,使得Java的桌面应用能力将更上一层楼。
图7 用户界面设计[17]
14
6.1.2 开发平台
作为投入到实际应用的生产活动,开发者应该使用一套专业的开发软件。而Netbeans作为多语言开发平台,在Java开发上,能使开发者快速构建项目,团队协作开发,便于代码优化、查错。再加上Netbeans有SUN公司的大力支持,使得越来越多的开发者选择Netbeans作为开发平台。 6.2 XMPP协议 6.2.1 XMPP协议简介
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性,这表明XMPP是可扩展的。可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
XMPP目前在免费源代码开放Jabber IM系统中被广泛采用。2002年,这个产品有超过5万的下载量。XMPP拥有成千的Jabber开发者,以及大约数万台配置的服务器和超过百万的终端用户。
图8 XMPP框架图
XMPP在设计上很大程度上沿袭了Internet上最成功的消息系统即e-mail。框架中有三种实体(不包括外部即时消息服务器)[18]:(1)用户客户端,(2)
15
XMPP服务器,(3)XMPP协议网关。负责 XMPP与非XMPP系统互联的实现就是协议网关,XMPP服务器间相互通信形成一个使用XMPP协议的服务器组成的分布式网络。连接这个网络的客户端,可以象接收消息一样发送消息给同一个服务器或其他Internet上的服务器上的客户(图8)。
在实际操作中,会使用基于XMPP的Jabber系统作为客户服务中心信息交换系统的核心。Jabber分布式、开放、在线和即时消息的特点非常适合信息交换服务,它提供了一个统一和通用的通信交换平台架构[19][20]。 6.2.2 XMPP传输基理
XMPP通过TCP传输的是与即时通信相关的指令。在以前这些命令要么用二进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通信指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读,方便了开发和查错。而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通信指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流[21]。
以下为XMPP流的具体例子。 客户端:
xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> 服务器: xmlns:stream='http://etherx.jabber.org/streams' version='1.0'> ...其他通信... 客户端: 客户端: 16