基于JAVA的企业级即时平台设计与实现 - 图文

更新时间:2024-05-07 23:35:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

中 南 大 学

本科生毕业论文(设计)

题 目 基于JAVA的企业级即时

通讯平台设计与实现

学生姓名 胡海亮 指导教师 马本江 学 院 商学院 专业班级 信息管理及信息系统0601 完成时间 2010年5月

I

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

目 录

摘 要 ........................................................................................................................... 1 Abstract .......................................................................................................................... 2 第一章 绪 论 ............................................................................................................ 3

1.1本文研究背景及意义 ..................................................................................... 3

1.1.1本文研究背景 ...................................................................................... 3 1.1.2本文研究意义 ...................................................................................... 3 1.2 国内外即时通讯发展状况 ............................................................................ 4 1.3本文内容及结构 ............................................................................................. 5 第二章 相关技术理论概述 ......................................................................................... 7

2.1即时通讯常用技术简介 ................................................................................. 7 2.2 EIM通信系统相关技术 .................................................................................. 8

2.2.1 TCP/IP与UDP简介 .............................................................................. 8 2.2.2 Mina通信框架简介 ............................................................................. 9 2.2.3 XML解析简介 .................................................................................... 10 2.2.4 Hibernate框架简介 ........................................................................... 12 2.2.5 Swing美工技术 .................................................................................. 13

第三章 EIM系统通信协议设计 ................................................................................ 16

3.1 EIM系统网络结构 ........................................................................................ 16 3.2 EIM系统通信协议分析 ................................................................................ 16

3.2.1现行常用即时通信协议 .................................................................... 16 3.2.2 EIM通信协议分析 ............................................................................. 17 3.3 EIM系统协议设计 ........................................................................................ 17

3.3.1 消息结构设计 ................................................................................... 17 3.3.2 消息详细设计 ................................................................................... 18 3.3.3 EIM通信协议总结 ............................................................................. 23

第四章 EIM服务器设计与实现 ................................................................................ 25

4.1 EIM服务器分析 ............................................................................................ 25

4.1.1 EIM服务器可行性分析 ..................................................................... 25 4.1.2 EIM服务器需求分析 ......................................................................... 26 4.2 EIM服务器设计 ............................................................................................ 30

4.2.1服务器总体设计 ................................................................................ 30 4.2.2服务器数据库设计 ............................................................................ 31 4.2.3服务器详细设计 ................................................................................ 32 4.3 EIM服务器运行界面展示 ............................................................................ 36 第五章 EIM客户端设计与实现 ................................................................................ 37

5.1 EIM客户端分析 ............................................................................................ 37

5.1.1 EIM客户端可行性分析 ..................................................................... 37 5.1.2 EIM需求分析需求分析 ..................................................................... 37

II

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

5.2 EIM客户端设计 ............................................................................................ 38

5.2.1客户端总体设计 ................................................................................ 38 5.2.2客户端详细设计 ................................................................................ 39 5.3EIM客户端界面展示 ..................................................................................... 42 第六章 结 论 ........................................................................................................... 43 结束语 ......................................................................................................................... 45 参考文献 ..................................................................................................................... 46 附 录 ......................................................................................................................... 47

III

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

摘 要

即时通讯(IM:Instant Messenger)软件是我国目前上网用户使用率最高的软件之一,即时通讯系统(Instant Messaging system)可使人们在网上识别在线用户并与之实时交流。通过IM我们可以达到即时和沟通[1]。

在现代化的企业中,员工在工作时经常要与其他同事进行协同工作和跨部门合作,全方位地利用有限资源协同完成更多工作,因此各部门同事间需要进行即时的沟通。而很多公司内部员工的沟通是基于Email、电话、短信、传真。大公司在通信费用上的花销绝对不是个小数目,尤其是那些跨地域分公司众多的企业这块尤其突出。在竞争如此激烈的社会,企业节约这部分费用也是利率提高的手段。

本文对企业即时通讯系统所涉及的技术问题进行了比较系统的研究,针对即时通讯的特点,运用Java、Apache的开源通信框架Mina(Multipurpose Infrastructure for Network Applications)以及Mysql开发一个在基于TCP/IP面向连接的企业内部沟通平台。主要在一下几个方面做了研究:

① 通信框架Mina。用Apache的开源通信框架Mina作为本系统的应用层,通信连接类都是在Mina的基础上封装而成。

② Java技术。在系统中大量运用Java中的Swing、多线程,IO流,集合框架以及众多的设计模式

③ 数据持久。系统中运用了Mysql作为数据库,Hibernate作为ORM(Object Relational Mapping)层。

④ 解析XML。用XML文件去为系统做配置,大消息内容也是基于XML。所以此系统用了大量的XML解析。

本系统的最终目的是构造一个企业级的即时通讯软件,实现企业内部的即时通信。通过该系统,在服务器端可以向全公司的人员发布通知、公司新闻、行业动向,而在客户端可以即时消息、文件传输等功能。可实现使用者与各部门同事间协同办公的要求,满足企业内部进行更加高效沟通的需求,为企业提供一种公共的、可靠的内部沟通方式。

关键词:即时通讯;Java; Swing; Apache Mina; XML; Hibernate

1

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

Abstract

As to internet users in China at present ,IM(Instant Messenger) software is one of the highest rates of software .Instant Messenger System will enable people to identify online users and the Internet with real-time communication. We can achieve real-time via IM and communication.

In the modern enterprise, employees at work often were working together with other colleagues and cross-sectoral cooperation, all-round cooperative use of limited resources to do more work, hence the need for real-time colleagues to communicate. And many internal staff communication is based on Email, telephone, SMS, fax. Large companies spending on communication costs are definitely not a small number, especially those cross-regional branch pieces of a large number of enterprises in particular. In such a competitive society, business is also part of the cost savings it means higher interest rates.

In this paper, enterprise instant messaging systems technical issues involved in a more systematic study. For the instant messaging features, using of Java, Apache's open source communications framework Mina and Mysql , I develop one internal communication platform which base on TCP / IP connection and is connection oriented . Mainly in the following aspects have been studied:

①: Communication Framework (Mina). Apache's open source communications framework with Mina as application layer of the system. Communication connection class is based on Mina to package.

②: Parsing XML. Using XML file to configure the system, the message content is also based on XML. Therefore, the system spent a lot of XML parsing.

③: Java Technology. In the system make extensive use of Java in the Swing, multithreading, IO streams, Collections Framework and many of the design patterns

④: Data Persistence. In System, Mysql is used for the database and Hibernate as ORM layer.

The ultimate goal of this system is to construct an enterprise-class instant messaging software, instant messaging within the enterprise. Through the system, the server side can be issued to notify all the company's personnel, the company news, industry trends. In the client can instant messages, file transfer and other functions. Enables users with the collaboration between colleagues in the department office requirements, meet enterprise demands for more efficient communication, and provide a public good, reliable internal communication.

Key words:Instant Messenger; Java; Swing; Apache Mina; XML; Hibernate;

2

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

第一章 绪 论

1.1本文研究背景及意义 1.1.1本文研究背景

近些年来,随着网络通信技术的不断发展和社会信息化建设水平的不断提高,即时通讯系统在社会生活和经济生活中得到了越来越广泛的应用。即时通讯大大改变了人们的生活和工作方式也改变了企业的工作流程,规范了内部信息交互流程,减少了企业沟通的中间环节,降低了企业的沟通成本;并使沟通活动不再受地域和时间的限制,方便了企业的信息发布,密切了企业和员工的关系。因此越来越多的企业采纳即时通讯系统作为内部的沟通模式。随着互联网上的即时通讯工具大量出现,即时通信作为一种交流形式己经在社会经济生活中占据一定的地位。另一方面,互联网技术的发展在推动即时通讯进步的同时,也使即时通讯系统的构建实现技术面临新的挑战。作为网络信息技术前沿的Java,己经是软件界的一个热门话题,它提供的跨平台性、支持网络和数据库编程,为网络系统的开发提供了新的途径。

1995年,Sun公司的Java语言以其提供的跨平台应用程序开发与配置震撼了整个编程世界。几年来,Java从一种编程语一言发展到了开发企业级应用系统的Java2平台。1999年Sun公司推出J2EE,它包括Servlet, JSP和JavaBean等许多技术和规范。J2EE平台也为Web应用的开发提供了从客户层到Web服务层到业务逻辑层的全方位技术支持,而且得到了IBM, BEA和ORACLE等很多公司的认可,是一种很有前途的也是比较成熟的开发网络应用的技术选择方案。

1.1.2本文研究意义

即时通信的确是对企业非常有用的一项技术,它能实现快速人际交流、数据共享,从而提高效率和生产力。然而对于个人即时通信,企业主管们却是又爱又恨。一个显而易见的顾虑是:你没法知道你的属下正在用它做什么,而个人即时通信软件与生俱来的娱乐性,让这一顾虑看上去似乎更有道理。于是针对企业用户的即时通信(Enterprise Instant Messenger,以下简称EIM)产品应运而生,其易于管理的特性和相对“严肃”的风格,有理由使公司的老板们相信用友CRM趋利避害是可能的。QQ,MSN等即时通讯面向全社会,会将与工作无关的人进入办公室,从而影响工作效率;而企业即时通讯客户端则是将工作相关的人引入电脑,从而提高工作效率。” 原因很简单,企业即时系统不仅可以使公司内外各个作业流程在电脑上表现出来,还能提高工作效率,简化业务流程。以企业即时通讯客户端系统为例,其所具备的点对点、一点对多点、多点对多点群发消息、文件传

3

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

输、文件共享、白板交流、协同浏览、在线支付、数据统计、发送手机短信等功能,完全可以帮助企业降低内外交易成本,增进工作效率。而MSN等个人即时通讯系统,则更重视娱乐方面的功能,无法适应企业需求。而且,由于缺乏监督和实名制等手段,个人即时通讯更容易与工作无关的陌生人取得联系。这反而会降低工作效率,对企业即时通讯客户通的作用恰得其反。 首先,企业时常需要面对内部员工发布一些信息。传统的文件方式需要先打印出来,然后人工分发,若要收集员工的反馈信息则还要另外准备,因此效率比较低。使用客户通之后,向员工发布信息通知则变得相当简单,同时还可以即时得到反馈信息。

此外,召开内部会议是企业经常性的事务。有了客户通,利用其网络会议功能,可以方便地在员工电脑前召开或者参加会议。随着手机的普及,收发短信已经成为企业一种重要的联系方式。因此手机短信功能也被集成到企业IM之中,用友CRM让信息传达变得非常方便快捷。

1.2 国内外即时通讯发展状况

目前国内即时通讯产品市场竞争异常激烈,以腾讯QQ微软MSN网易POPO 等为代表的众多即时通讯产品显然拥有大批使用者!而其具备的高交互性特点和日新月异的新功能也让更多的网民对其爱不释手.现对国内几款主流即时通讯工具做一简要分析[2].

①腾讯QQ

据腾讯QQ 官方消息,2009年QQ在国内已拥有10.57亿多的注册用户,4.84亿活跃用户,同时在线人数1亿以上.目前腾讯QQ已成为国内用户最多的个人即时通讯工具。占据着国内约65%以上的市场份额

1999 年2 月,腾讯推出基于互联网的即时通讯工具--QQ,支持在线消息收发,即时传送语音,视频和文件,并且整合移动通讯手段!,可通过客户端发送信息给手机用户. 目前QQ已开发出穿越防火墙、 动态表情、给好友放录像、捕捉荧屏、共享文件夹、提供聊天场景、聊天时可显示图片等强大的使用功能. 另外, QQ 还增加了QQ群、 QQ秀、 QQ宠物 、QQ游戏等娱乐功能.由于QQ良好的开放功能、休闲娱乐服务,使其拥有了庞大的用户群,在近几年内突飞猛进,牢牢占据着国内即时通讯霸主地位.

②微软MSN

MSN是微软公司开发的即时聊天工具, 由于微软产品用户众多,操作简单,运行稳定,且与Windows XP 进行了无缝结合,使得MSN 的普及速度非常快,现在已经是世界主流的聊天工具,在国内即时通讯软件中稳占了第二的位置. MSN支持手写功能,但与其他即时通讯软件最大的不同是不支持离线消息. 微软会愚蠢到放弃功能强大的离线消息市场吗?盖茨肯定没那么傻,MSN 采用邮件地址作为用户名,借此建立MSN与HotMail之间的连接,当对方不在线时,你可以选择给对

4

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

方的MSN 邮箱或HotMail 发送邮件. 这样MSN就不仅是一个简单的即时通讯软件,而演变为以MSN 为中心的整合服务.

③网易POPO

网易POPO是由网易公司开发的一款免费多媒体即时通讯工具,可谓即时通讯软件中杀出的一匹黑马,虽然推出时间不长,但POPO融合了QQ 与MSN 的优点,解决安全与隐私问题的功能非常完善,特别是好友的权限设置功能,优于其他即时通讯软件。 POPO既有即时文字聊天、语音通话、视频对话、文件传输等基本即时通讯功能,还提供邮件提醒、多人兴趣组、在线及本地音乐播放、网络电台、发送网络多媒体文件、网络文件共享、自定义软件皮肤等多种功能,并可与移动通讯终端等多种通讯方式相连[3]。用户除了可以通过在线时长积分换取免费的短信服务,还可以设置在下线时将收到的信息转发到手机上。 另外,POPO还支持用户同时登录一MSN 账户,实现了与MSN 的互通互联.

④ ICQ

ICQ是1996 年11月在全世界范围推出的第一款即时通讯软件,是现在功能最强大、全球用户最多、应用最广泛的即时通讯工具。 但是,由于它的操作和设置比较复杂,再加上全英文的聊天界面,使许多中国用户对它望而生畏,在中国市场上所占份额逐渐萎缩。 近期,就在其他同行纷纷通过增加功能来吸引用户时ICQ 反而推出了功能精简版的ICQ LITE 试图在中国市场东山再起[2]。

1.3本文内容及结构

本文对企业即时通讯系统所涉及的技术问题进行了比较系统的研究,针对即时通讯的特点,运用Java、Apache的开源通信框架Mina以及Mysql开发一个在基于TCP/IP面向连接的企业内部沟通平台。这个系统除了没有用Web技术外几乎用了本人的全部技能,这大学4年里学的java技术都可以从这个项目中得以体会,主要在一下几个方面做了研究:

①通信框架Mina。用Apache的开源通信框架Mina作为本系统的应用层,通信连接类都是在Mina的基础上封装而成。

②Java技术。在系统中大量运用Java中的Swing、多线程,IO流,集合框架以及众多的设计模式。在Swing运用了窗体重绘、倒影、透明等一系列技术。在多线程方面研究了线程的同步、互斥、加锁。系统里有大量的计模式例如:单例模式、工厂模式、生产消费者模式、命令模式、责任链模式、观察者模式,适配器模式等等

③数据持久。系统中运用了Mysql作为数据库,Hibernate作为ORM(Object Relational Mapping)层。

④解析XML。用XML文件去为系统做配置,大消息内容也是基于XML。所以此系统用了大量的XML解析。本系统运用了最新的解析XML技术XStream,在本文中我会详细介绍下如何去现实Object和XML之间的转换。

5

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

◆本文研究背景及意义 ◆国内即时通讯发展状况 ◆内容与结构 ◆即时通讯常用技术 ◆通信系统相关技术 ◆TCP/IP与UDP简介 ◆Mina通信框架简介 ◆XML解析简介 ◆Hibernate数据持久 ◆Swing美工技术 EIM系统网络结构 EIM通信协议分析 EIM系统通信协议设计 EIM通信协议设计 EIM通信协议总结 EIM服务器分析 EIM服务器设计与实现 EIM服务器设计及实现 EIM服务器运行展示 EIM客户端分析 具 EIM客户端设计及实现 具 EIM客户端运行展示 具 EIM客户端设计与实现 结 论 结束语 图1-1:本文结构图

6

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

第二章 相关技术理论概述

2.1即时通讯常用技术简介

现在有许多的 IM 系统,如 AOL IM、Yahoo IM 和 MSN IM,它们使用了不同的技术,而且它们互不兼容。为了创建即时通讯的统一标准,人们经过了多次尝试:IETF 的对话初始协议(SIP)和即时通讯对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通讯协议(PRIM)及基于 XML且开放的可扩展通讯和表示协议(XMPP)协议(常称为 Jabber 协议)。人们多次努力,试图统一各大主要 IM 供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种 IM 仍然继续使用自己所拥有的协议[4]。

这些常用的即时通讯传送协议如下:

①可扩展通讯和表示协议(XMPP):用于流式传输准实时通信、表示和请求 -响应服务等的 XML 元素。XMPP 基于 Jabber 协议,是用于即时通讯的一个开放且常用的协议。尽管 XMPP 没有被任何指定的网络架构所融合,它还是经常会被用于客户机/服务器架构当中,客户机需要利用 XMPP 协议通过 TCP 连接来访问服务器,而服务器也是通过TCP连接进行相互连接[5]。

②即时通讯对话初始协议和表示扩展协议(SIMPLE):SIMPLE 协议为 SIP 协议指定了一整套的架构和扩展方面的规范,而 SIP 是一种网际电话协议,可用于支持IM/消息表示。SIP 能够传送多种方式的信号,如 INVITE 信号和 BYE 信号分别用于启动和结束会话。 SIMPLE 协议在此基础上还增加了另一种方式的请求,即 MESSAGE 信号,可用于发送单一分页的即时通讯内容,即分页模式的即时通讯。SUBSCRIBE 信号用于请求把显示信息发送给请求者,而 NOTIFY 信号则用于传输显示信息。较长 IM 对话的参与者们需要传输多种的延时信息,它们使用 INVITE 和一个叫做消息会话中继协议(MSRP)。与 SIMPLE 协议结合,MSRP 协议可用于 IM 的文本传输,正如与SIP协议相结合,RTP 协议就可以用于传输 IP 电话中的语音数据包一样。

③Jabber: Jabber 是一种开放的、基于 XML 的协议,用于即时通讯消息的传输与表示[4]。国际互联网中成千上万的服务器都使用了基于 Jabber 协议的软件。Jabber 系统中的一个关键理念是 “传输”,也叫做“网关”,支持用户使用其它协议访问网络如 AIM 和 ICQ、MSN Messenger 和 Windows Messenger、SMS 或 E-mail。

④即时通讯通用结构协议(CPIM):CPIM 定义了通用协议和消息的格式,即时通讯和显示服务都是通过 CPIM 来达到 IM 系统中的协作。

7

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

2.2 EIM通信系统相关技术

本系统的开发是基于Java的,开发工具用到了MyEclipse以及NetBeans,而相关技术则涉及众多 大体分为:Mina通信框架、XStream解析XML 、Hibernate数据持久、Swing美工 、Java多线程等等。 2.2.1 TCP/IP与UDP简介

在此系统做之前应该选定其最底层的通信协议,是基于TCP/IP还是UDP还是其他的一些协议。这要看系统的要求,因本人的时间有限以及UDP编程实战经验不足,所以选择了基于TCP/IP面向连接的网络连接。在下面本人介绍下TCP/IP和UDP。

因本人在网络基础课题上没好好认真听讲,网络知识不是很扎实,这些知识都是我在日常的编程中所体会到的,如有错误请见谅。那么它们是什么?TCP/IP和UDP他们都是网络协议,它们都规定了一组IO流或者数据在网络中的读写顺序和差错控制机制。没有TCP/IP就没有今天的网络,没有UDP就没有今天的QQ,当然现在QQ支持多种协议。TCP/IP和UDP最大的区别是: TCP/IP是面向连接而UDP则面向无连接。TCP/IP提供可靠的通信而UDP提供不可靠的通信,当然TCP/IP提供可靠的通信必然要付出代价,那就是UDP数据包简单快速。为啥?原因很简单TCP/IP数据包复杂,在解析它是时间比UDP长,所以UDP快。

UDP又称数据报通信,与TCP/IP想比,是不可靠的,非面向连结的;基于TCP/IP的通信,前提是双方选要建立一个连结管道,即程序中的Socket对象,然后双方在这个管道上收发数据;而UDP数据发送时,发送方只需要知它的目标地址即可发送,发送后,并不关心,也不保证会被接收方收到一个形象的例子是:二个人之间打电话,就是基于TCP/IP的Socket通信前提是双方必须建立一个通话信道;而UDP通信就像发短信,发送方只需发出即可。它们的通信模型见图2-1和图2-2。

图2-1: 基于TCP/IP的Socket通信模型

图2-2: 基于UDP数据包的通信模型

TCP/IP的Socket通信是面向连结的!双方必须先建立一个通信管道;而UDP

8

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

只需要知道目标地址(IP和端口)即可发送,至于目标端口是否打开,目标地址是否真正存在,数据是否被发送到了目标地址,发送者都不需知道,也无法知道,发送者只要发送即可。 2.2.2 Mina通信框架简介

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、Object RADIUS、Open fire 等等。

Mina能干什么?先写两个程序来演示一下:我们用它做两个小程序,一个为服务器,收到客户机的消息后,就回送给客户机;一个是简单的客户机,一连上服务器,就发一条消息报到,然后将从服务器接到的消息再发给服务器。 第一 MINA开发环境准备

①首先到官方网站下载最新的MINA 版本,地址是:http://mina.apache.org/downloads.html。下载之前先介绍一下 MINA 的两个版本:1.0.x 适合运行环境为 JDK1.4,1.1.x 适合 JDK1.5 的版本,两者的编译环境都需要 JDK1.5。JDK1.5 已经是非常普遍了,本文中使用 1.1.5 版本的 MINA,编译和运行所需的文件是 mina-core-1.1.5.jar。

②下载 MINA 的依赖包 slf4j。MINA 使用此项目作为日志信息的输出,而 MINA 本身并不附带此项目包,请到http://www.slf4j.org/download.html 地址下载 slf4j 包,slf4j 项目解压后有很多的文件,本例中只需要其中的 slf4j-api-1.4.3.jar 和 slf4j-simple-1.4.3.jar 这两个 jar 文件。如果没有这两个文件就会导致启动例子程序的时候报 org/slf4j/LoggerFactory 类没找到的错误 ③当然要求机器上必须装有 1.5 或者更新版本的 JDK。

④最好你应该选择一个顺手的 Java 开发环境例如 Eclipse 或者 NetBeans 之类的,可以更方便的编码和调试,虽然我们的最低要求只是一个简单的文本编辑器而已。

第二 编写代码并执行

① 编写Mina服务器代码

服务器端由两个类组成,一个是Min.java,启动服务器的主类;另一个是SamplMinaServerHandler.java,这个类负责处理连结上来的客户机,即消息处理器。SamplMinaServerHandler代码如附录中的程序1,MainServer代码如附录中程序2。

一个基于MINA的服务器创建流程如图2-3

9

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

创建一个编码器创建一个消息处理器创建一个IP地址创建非阻塞Socket创建接收数据的过滤器设定过滤器读取数据编码器设定Socket的消息处理器绑定端口,启动服务器 图2-3服务器创建流程

② 编写Mina客户机代码

一个基于Mina最简单的客户机包括一个启动主类Main Client,一个消息处理器(Client Handler)。启动主类代码见附录程序3,消息处理器类代码见附录程序4。

一个基于MINA的客户端创建流程如图2-4

创建一个编码器创建一个消息处理器创建一个IP地址创建非阻塞SocketConnector创建接收数据的过滤器设定过滤器读取数据编码器设定Connector的消息处理器绑定端口,连结到服务器 图2-4客户端创建流程

按照以上三个步骤就可以实现一个简单的客户/服务器的程序。需要复杂则可以在MINA的基础上封装成自己想要的类。本文在服务器设计时会详细介绍如何去封装。 2.2.3 XML解析简介

1. XML简介

XML(Extensible Markup Language)即可扩展标记语言,它与HTML一样,都是SGML(Standard Generalized Markup Language,标准通用标记语言)。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据占用更多的空间,但XML极其简单易于掌握和使用。

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。为了使得SGML显得用户友好,XML

10

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

重新定义了SGML的一些内部值和参数,去掉了大量的很少用到的功能,这些繁杂的功能使得SGML在设计网站时显得复杂化。

每个XML文档都由XML序言开始,在前面的代码中的第一行便是XML序言,,则是文档元素(document element),它是文件中最外面的标签(我们认为元素(element)是起始标签和结束标签之间的内容)。所有其他的标签必须包含在这个标签之内来组成一个有效的XML文件。XML文件的第二行并不一定要包含文档元素;如果有注释或者其他内容,文档元素可以迟些出现。XML文档结构如图2-5

图2-5 XML 文档结构

2. XStream简介

开源项目XStream是一套简单实用的类库,用于序列化对象与XML对象之间的相互转换。本文以XStream 1.1.2版进行说明,它具有以下几个特点:

①灵活易用:在更高的层次上提供了简单、灵活、易用的统一接口,用户无需了解项目的底层细节。

②无需映射:大多数对象都可以在无需映射的情况下进行序列化与反序列化的操作

③高速稳定:设计时力求达到的最重要的指标是解析速度快、占用内存少,以使之能够适用于大的对象处理或是对信息吞吐量要求高的系统

④清晰易懂:项目采用reflection机制得到无冗余信息的XML文件。所生成的XML文件较本地Java序列化产物更简洁,格式更清晰,更便于用户阅读

⑤无需修改:完全序列化包括private和final类型在内的全部内部字段。支持非公有类和内部类,类可以没有缺省的构造函数

⑥易于集成:通过实现特定的接口,XStream可以直接与其它任何树型结构进行序列化与反序列化操作(而不仅仅是XML格式)

⑦灵活转换:转换策略是可以定制的,允许用户自定义特殊类型的对象如何以XML格式存储。

⑧错误处理:由于XML资料不合法而造成异常时,会提供详细地诊断信息帮助处理问题。

11

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

XStream主要应用于以下场合:数据对象的持久化、数据交换、配置文件 3. XStream解析XML实例

在附录中代码5至7我们通过一个简单的例子来了解XStream是如何工作的。先定义一个Person类PhoneNumber类。我将会用XStream把他们转换为xml格式的字符串(将对象序列化为XML文档),之后我又从字符串转换成对象(从XML文件反序列化成对象)。源码及运行效果如附录代码5至7。 2.2.4 Hibernate框架简介

在系统开发中必然要用到数据库,在程序中操作数据库是件十分麻烦和繁琐的事情。所以在系统开发前选择好数据持久工具。在本系统开发时本人运用了Hibernate框架来做服务器系统的ORM。

Hibernate是一个开放源代码的对象关系映射框架[10],它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任[11]。Hibernate全面解决方案体系结构如图2-6。

图2-6 Hibernate体系结构

这个图上我们可以看出,Hibernate面向程序的是Hibernate的持久类,面向数据库的是Session。他是应用程序和数据库的桥梁。而我们编程是离不开数据的操作的,所以我的感觉是学好Hibernate是件很重要的事情。

Hibernate用hibernate_cfg_xml文件集中了数据库的配置信息,用* .hbm_xml规范了数据库表格的字段,连接了应用程序中的对象和数据库的表格[11]。在这里就不详细介绍如何使用Hibernate,因为Hibernate在java编程界是个基本工,这个资料网上书本上有很多。

12

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

2.2.5 Swing美工技术

Java 基础类(JFC)Swing 工具提供了使用Java 平台创建高度可交互性图形用户界面的类。Swing 是高度灵活的,但是也因此相当复杂,虽然新手能够使用Swing 创建基本的图形用户界面(GUI),但是真要创建一个复杂、专业的GUI 界面,你必须理解Swing 的体系架构的基础,尤其是使用Swing 创建复杂、像JTable 、JTree、JComboBox 以及JList 这样基于渲染器的组件,Swing 提供的基于模型和渲染器的组件是构建高性能、可扩展GUI 的关键。 1.Swing 体系结构

最初Smalltalk 系统的UI 工具使用所谓的模型-视图-控制(MVC)模式,MVC 引入这样一个概念:数据源应该同屏幕展现分开。这是一个优秀的体系设计结构,能促进代码重用和程序框架。Swing 使用的是一个变体的MVC 架构,如图2-7所示:

图2-7 Swing的MVC结构 图2-8 带渲染器的Swing MVC结构

典型的Swing GUI 组件包括至少三个对象:一个Component,一个Model 和一个UI Delegate,在这个框架中,Model 负责存储数据,UI Delegate 负责从Model 获取数据并渲染到屏幕上去,Component 通常协调Model 和Delegate 之间的操作,并同时负责将Swing 嵌入到AWT 窗口系统中[12]。

注意,UI Delegate 对象可以在运行的时候动态替换,这就使Swing 具备了可插拔的外观(Pluggable Look-And-Feel, PLAF)。

虽然Swing 的MVC 结构显然具备灵活性的好处,但是这个结构通常被指责为一些程序慢的根源。虽然基于MVC 结构需要更多的方法调用来支持额外的重定向,其实花费在这儿的消耗很小。对基于Swing 的应用程序profile 的结果显示,model-view 分隔的开销可以忽略不计,不到CPU 总开销的1%,复杂的Swing 用户界面的多数处理事件其实都花费在了底层的图形操作上了[12]。Swing 的model-vie w 结构并不是低性能的根源,它是构建可扩展程序的关键。

Swing还提供了一些处理大数据量数据集的组件,包括JTable、JTree、JList 以及JComboBox。这些矢量组件被设计成能够处理成千上万甚至数百万的数据,为了避免占用大量内存,这些组件在Swing 的体系架构增加了渲染器(renderer)概念。下图(图2-8)是增加了渲染器结构的Swing 体系架构。在客户端的有某些界面用了倒影效果、透明化效果、重绘组建技术。下面我分别把这几个技巧详细说下。在服务器个客户端详细设计时就不多说了。

13

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

2. Swing 透明和重绘技术

①Swing透明化

透明化在java中其实就是在窗体构造函数中增加一行代码,代码如下:

WindowUtils.setWindowAlpha(JFrame frame, float value)其中value就是对应的透明度,value值越小窗体就越透明。WindowUtils是JDK提供的窗体界面工具类。想了解WindowUtils可以去查看JDK的API,API中有很详细的介绍,

②Swing重绘

重绘窗体在做软件中是件必然的事情,想让你的软件漂亮并且是自己想象中的外型就非得用到窗体重绘技术。在我了解的java中窗体重绘可以有两种方法。

第一种是调用实现RectangularShape抽象类的工具类来绘制自己想要的形状,在JDK中 有Arc2D 、Ellipse2D 、Rectangle2D 、RoundRectangle2D实现了这个抽象类,本文介绍下RoundRectangle2D的实现过程。

RoundRectangle2D实现重绘过程如图2-9。

创建一个窗口创建RoundRectangle2D设置参数这个过程设置你想要的一些参数使用WindowUtils组装

如图2-9 RoundRectangle2D重绘

第二种是重写组件的paintComponent方法,在此方法中使用Graphics2D的绘制方法重绘组件。 3. Swing 倒影技术

首先Swing倒影技术是由Romain Guy和Chet Haase所创立的,我只是在本文中简单介绍下。非本人所创。首先看看我写的一个窗口如图2-9。

图2-9 Swing 倒影

14

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

图2-10 倒影创建序列图

从图2-9的表面分析,上面是个窗口(主窗口),下面也是个窗口,只是下面窗口是透明倒立的。其主要流程为:在主窗口创建时同时也把倒影窗口也创建,最后利用工具类把这两个窗口绑定。工具类是把倒影窗口加在主窗口的下方。倒影创建序列图如图2-10 。

15

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

第三章 EIM系统通信协议设计

每个IM都有其核心的通信协议,本EIM系统也定义了一组协议栈,规定了服务器与客户端的通信接口。此系统模拟腾讯QQ实现用户之间简单聊天的程序,其中涉及到图形界面的的设计,网络通信的实现,线程的应用等等。启动服务端后,用户点击登陆实现与服务端的连接,同时向服务器发送登陆消息包,服务器接收到一个用户消息包则启动一个客户线程,将当前用户加入到线程中。用户进入主界面便可通过服务端给在线好友发送消息、传送文件、创建好友分组等简单互操作。这些交互都是建立在通信协议的基础上,本章主要介绍该系统的通信协议。

3.1 EIM系统网络结构

如图3-1所示,服务器是客户之间的中介实体,它接受客服端A发送来的消息,对其进行处理并返回应答消息,根据EIM用户01的要求,转发给目的EIM用户04。服务器的核心任务就是解析收的消息,然后根据业务逻辑作相应的处理,再简洁点就是解析,处理,转发消息。而客户机就是个“消息解析器”,例如众所周知的浏览器就是解析Http协议的“消息解析器”。而本系统的客户机就是EIM协议的解析器。

图3-1通信网络结构

3.2 EIM系统通信协议分析 3.2.1现行常用即时通信协议

目前,多数IM软件都是采用IM服务提供商自己设计开发的IM协议,如美国在线的OSCAR协议、微软的MSNP协议等[6]。目前,IM通用标准的协议主要有三个[13-14]:

①即时消息在线协议(Instant Messaging and Presence Protocol,IMPP),由IETF(互联网工程任务组)的IMPP工作组制定;

②可扩展的即时消息在线会话初始协议(SIP for Instant Messaging and

16

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

Presence Leverage Extension,SIMPLE),由IETF的SIMPLE工作组制定,是对SIP协议的扩展;

③可扩展消息在线协议(Extensible Messaging and Presence Protocol,XMPP),由IETF的XMPP工作组制定。XMPP用XML(可扩展标记语言)语言定义和描述协议中的命令和数据,充分利用XML通用性强、易扩展的优点,方便了协议在应用中的扩展。

3.2.2 EIM通信协议分析

本通信协议就基于TCP/IP协议的,是面向连接的。如下图3-2所示。关于TCP/IP的相关知识在第二章的相关技术介绍中有详细说明。

图3-2 EIM通信协议 图3-3 交互过程

交互过程和网络上的其它协议一样都是一个消息对应一个相应响应消息。其过程如下图3-3。 3.3 EIM系统协议设计 3.3.1 消息结构设计

所有消息包的数据都是由byte组成,可分为整型和定长字符串两种。定长字符串部分的byte可被编码为字符串。消息结构的组成:所有消息结构都是由两部分组成,即消息头(header)+消息体(body)组成,如表3-1所示。

表3-1消息结构 组成成分 Header Body 说明 消息头,所有消息都是相同格式 消息体,不同消息格式不同

消息头的格式是固定的,所有消息都必须得有相同格式的消息头,其格式如下表3-2:

17

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

表3-2消息头格式

字段名 totalLen type srcID destID

字节数 4 4 4 4 类型 Unsigned Integer Unsigned Integer Unsigned Integer Unsigned Integer 描述 消息总字节长度 消息类型 发送消息方的ID号 接收消息方的ID号 3.3.2 消息详细设计

1.系统消息分类

本系统现行消息总共有19种消息,列举如下表3-3。

表3-3消息类型列表 消息 LoginMessage LoginResponseMessage RepeatLoginMessage FriendGroupMessage SysMessage UserRegMessage UserRegResponseMessage TalkMessage ShockFrameMessage OnlineMessage ExitMessage AddFridentMessage AddFridentResponseMessage FileRequestMessage FileResponseMessage FileSockectRegMessage 类型type 100013 800013 100113 100027 100010 100014 800014 100021 100026 100011 100012 100024 800024 100023 800023 100026 说明 登陆消息包 登录响应包 重复登陆消息包 好友列表消息包 系统消息应包 用户注册消息 用户注册响应消息 聊天消息包 震动窗口消息包 上线消息包 下线消息包 加好友消息包 加好友消息应答包 文件传送请求消息包 文件传送请求响应包 文件通道注册消息包 文件通道注册响应包 文件消息 收到文件消息响应包 18

FileSockectRegResponseMessa800026 ge FileMessage FileGetedResponseMessage

100022 800022 中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

2. 各种消息类型的结构设计

以下是系统各种消息包包体结构,所以消息包包头都是相同的格式如表3-2所示。完整的消息包格式是消息头(header)+消息体(body)组成,如表3-1所示。

(1) 登陆消息包

表3-4登陆消息包结构 字段名 srcQQ pwd state loginID

字节数 4 10 4 16 类型 String String 登录者的密码 描述 Unsigned Integer 登录者的QQ号 Unsigned Integer 登入者的状态 唯一登陆序号(单点登陆) (2)登录响应包

表3-5登陆消息响应包结构

字段名 loginResponse errorReason 字节数 4 4 类型 Unsigned Integer Unsigned Integer 描述 验证结果 1:正确 0:错误 登陆失败原因,如果验证结果错误 则有这个属性。0:服务器内部错误 1:QQ号不对 2:密码错误 3:版本错误 4:其他原因

(3) 登陆消息包

表3-6重复登陆消息包结构 字段名 loginIP

字节数 32 类型 String 描述 重复登陆消息IP地址 (4)好友列表消息包

表3-7好友列表消息包结构 字段名 friendXMLLen 4 friendGroupXML teamXMLLen teamXML 字节数 friendXMLLen 4 teamXMLLen 类型 Unsigned Integer XM格式(String) Unsigned Integer XM格式(String) 描述 好友列表信息长度 好友列表信息 群列表信息长度 群列表信息 19

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

(5)系统消息应

表3-8系统消息包结构 字段名 msgContentType msgContentLen sysMsg 4 4 字节数 类型 Unsigned Integer UnsignedInteger String 描述 消息内容的类型 系统消息内容长度 系统消息内容 msgContentLen

(6)用户注册消息

表3-9用户注册消息包结构 字段名 userName pwd headImageID 字节数 16 10 4 类型 String String Unsigned Integer 描述 用户姓名 用户密码 用户头像id

(7)用户注册响应消息

表3-10用户注册响应消息包结构 字段名 regResponse regID errorReason 字节数 4 4 4 类型 UnsignedInteger Unsigned Integer Unsigned Integer 描述 注册验证结果 1:正确 0:错误 注册成功还回用户ID 注册失败原因,如果验证结果错误 则有这个属性。0:服务器内部错误 1:协议版本错误 4:其他原因

(8)聊天消息包

表3-11聊天消息包结构 字段名 talkMsgLen talkMsg

4 字节数 talkMsgLen String 类型 Unsigned Integer 描述 聊天内容长度 聊天内容 (9)震动窗口消息包

表3-12震动窗口消息包结构 字段名

字节数 类型 描述 20

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

time

(10)上线消息包

4 Unsigned Integer 消息发送时间 表3-13上线消息包结构 字段名 time

(11)下线消息包

字节数 4 类型 UnsignedInteger 描述 上线消息发送时间 表3-14下线消息包结构 字段名 time 字节数 4 类型 Unsigned Integer 描述 下线消息发送时间

(12)加好友消息包

表3-15加好友消息包结构 字段名 AddReasonlen 字节数 4 AddReasonlen 类型 Unsigned Integer String 描述 添加理由内容长度 添加理由 AddReason

(13)加好友消息应答包

表3-16加好友消息应答包结构 字段名 isAgree

4 字节数 类型 Unsigned Integer 描述 是否同意加为好友 1:同意 0:不同意 (14)文件传送请求消息包

表3-17文件传送请求消息包结构 字段名 fileNameLen fileName fileLength 4 字节数 fileNameLen 8 String long 类型 Unsigned Integer 文件名 描述 文件名字长度 文件总长 文件发送方绝对路径名长度 文件发送方绝对路径 absolutePathLen 4 absolutePath absolutePatUnsigned Integer String 21

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

hLen

(15)文件传送请求响应包

表3-18 文件传送请求响应消息包结构 字段名 fileNameLen fileName fileResponse fileLength 4 字节数 类型 Unsigned Integer String Unsigned Integer long Unsigned Integer String Unsigned Integer String long 描述 文件名字长度 文件名 文件请求响应 文件总长 文件发送方绝对路径名长度 文件发送方绝对路径 接受方保存文件路径名长度 接受方保存文件路径 文件长度 以KB为单位 fileNameLen 4 8 absolutePathLen 4 absolutePath saveFilePathlen saveFilePath fileLength

(16)文件通道注册包

absolutePathLen 4 saveFilePathlen 8 表3-19文件通道注册消息包结构 字段名 time

4 字节数 类型 Unsigned Integer 描述 消息发送时间 (17)文件通道注册响应包

表3-20文件通道注册消息包结构 字段名 fileSockectRegResponse

(18)文件消息

4 字节数 类型 Unsigned Integer 消息响应 描述 表3-21文件消息包结构 字段名 字节数 类型 描述 22

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

fileNameLen fileName filePartID 4 Unsigned Integer 文件名字长度 文件名 文件的分段号 所有文件的分段数 文件的段数据 接受方保存文件路径名长度 此文件段数据长度 此文件段数据 是否发送完成 文件总长 文件发送方绝对路径名长度 文件发送方绝对路径 接受方保存文件路径名长度 接受方保存文件路径 文件长度 以KB为单位 fileNameLeString n 4 Unsigned Integer Unsigned Integer Unsigned Integer Unsigned Integer long byte[] byte long Unsigned Integer allFilePartNum 4 filePartAmount 4 saveFilePathle4 n filePartDatele8 n filePartDate isFinshed fileLength 8 1 8 absolutePathLe4 n absolutePath absolutePaString thLen Unsigned Integer saveFilePathle4 n saveFilePath fileLength saveFilePaString thlen 8 long

(19)收到文件消息响应包

表3-21文件收到应答消息包结构 字段名 fileID

4 字节数 类型 Unsigned Integer 描述 此文件段的分段号 3.3.3 EIM通信协议总结

本协议是本人在做此系统慢慢改进过来的,难免会有众多不足,总体来说基本可以现实简单的聊天以及文件传输等基本功能。此协议是面向连接的,所以在

23

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

差错控制方面没做很多设计,因为在TCP/IP层已经帮此协议做了这个层次上的控制,只是我们需要在应用层上做相应的控制,而非在数据链路层上。下面总结下此协议的优缺点和扩展点。

本协议简单易懂,扩展性强,因其建立在TCP/IP基础上所以实时性也强,数据不易丢失。但也正因为建立在TCP/IP上所以消息的发送速率不是很高,而且完全没设计加密解密,容易被盗取和窃听。也因人力和时间不足的原因,协议中的消息数量很少,和一个完整的通信协议来比是没可别性的,但麻雀虽小五脏具全。

本协议下一步就是扩展,第一就是增加文本消息和登陆消息的加密,防窃听。在文件传输方面该协议应该借鉴Http协议,达到断点续传的最终目标,总之一句话:该协议宽度和深度都有待改进。

24

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

第四章 EIM服务器设计与实现

4.1 EIM服务器分析 4.1.1 EIM服务器可行性分析

综合考虑企业内部的通信过程中出现的种种情况,结合企业的实际情况,应该从以下经济可行性、技术可行性和运行可行性几方面对企业即时通讯系统进行可行性分析。但本系统是本人一人全力开发,没设计任何经济所以在经济可行性及不做任何分析。本章就从技术可行性和运行可行性进行分析。

1. 技术可行性

根据该系统目标来衡量所需的技术是否具备,一般可从硬软件的性能要求、环境条件、操作人员水平和数量等方面去考虑和分析。

考虑到系统实施的可行性,在软件方面选择了如今较流行的Eclipse来进行开发管理平台的设计,使用MySql数据库存储数据;在语言方面使用了当今最流行JAVA来开发,通信框架用了性能很高的MINA通信框架;在XML解析技术上使用了使用简单效率高的XStream工具;在数据库持久上也选择了当今最流行的Hibernate框架。

在硬件方面,则选择空间较大,只要是PentiumIII系列及以上的计算机,内存在1G以上,硬盘在30GB,都可以满足系统的开发需要!当然,硬件的配置越高,系统的开发与运行会更流畅。考虑到如今的家用或商用电脑硬件的整体配置水平,系统在硬件方面是可行的。

在软件方面,由于Eclipse 和 MySql两个非常成熟的开发工具,无论在安全性、可用性、可靠性方面都毫无置疑,因此软件方面是可行的。而在java技术方面是绝对不会匮乏的。 2. 运行可行性分析

在现代化的企业中,员工在工作时经常要与其他同事进行协同工作和跨部门合作,全方位地利用有限资源协同完成更多工作,因此各部门同事间需要进行即时的沟通。而很多公司内部员工的沟通是基于Email、电话、短信、传真。大公司在通信费用上的花销绝对不是个小数目,尤其是那些跨地域分公司众多的企业这块尤其突出。在竞争如此激烈的社会,企业节约这部分费用也是利率提高的手段。

开发企业通信系统可以提高企业的工作效率和信息使用率,可以降低企业运行成本提高经济效益。经过以上分析,运行方面是可行的。

25

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

4.1.2 EIM服务器需求分析

1. 现行IM服务器的状况

当今,企业的规模不断扩大,区域分布越来越广,企业组织结构日益复杂,企业的信息化发展越来越快,企业即时信息的交互也越来越频繁,信息的快速传递对企业的发展也越来越重要。

目前,常用的企业即时通信平台有腾讯通、雅虎通等,但这些主流的企业即时通信平台在设计和开发时采用的都是各自的私有标准和协议,不同的即时通信系统间的互联互通存在瓶颈,从而使得不同IM平台用户不能进行即时信息的交互;另外企业即时通信系统通常采用单一的体系架构,如典型的客户端/服务器模式,如图4-l所示。这种架构在规模较大、区域分布较广的企业应用环境中,会带来一系列问题。如不能很好地与客户或者在同企业间进行信息的交流,服务器负载太大,即时通信系统的可靠性和稳定性不高,以及即时消息的安全性得不到有效的保障等[15]。

目前企业即时通信环境因其行业性和多样性而显得较为复杂,设计企业即时通信平台需考虑以下几方面的问题:

①不同协议企业即时通信平台的互联互通,尤其在企业与客户进行即时信息的交互方面,互联互通的问题较突出;

②降低企业即时通信系统中服务器负载,架设多个服务器,提高即时通信的稳定性和可靠性,对规模较大、区域分布广的企业尤为重要,一旦某个服务器出现故障不会影响即 时通信的进行;

③通过企业即时通信系统实现企业资源的统一管理与共享。

图4-l客户端/服务器模式

2 . EIM服务器系统需求总况

作为一个IM服务器必须有三个核心分系统:日志系统、消息处理器系统、缓存系统。它们在服务器中是必不少的。日志系统是记录服务器每时每刻的运行状况和管理员的每个动作,这对于服务器的稳定性是不可少的;消息处理器系统是

26

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

对服务器收到的各种消息做响应的处理来达到消息转发的效果,所以此系统是服务的最核心的分系统,要求它扩展性强稳定性高,并且效率高;缓存系统对于实时聊天是必不可少的,缓存可以减少服务器的IO减少服务的数据库查询,对于消息处理器系统及时处理消息是不可缺少的。

本系统服务器除了三大主系统还增加另外两个分系统,总涉及到五大分。具体是:系统服务器日志系统、服务器缓存系统、服务器消息处理系统、服务器性能监控系统、服务器管理系统,这五大系统的需求分析,工作量较大,因此必须用行之有效的方法对软件需求进行严格的审查验证。它们的需求在下文详细介绍,着重介绍消息处理系统、日志系统、缓存系统。

3. EIM服务器日志系统需求

日志系统是一种常规的信息系统,通常用来记录操作的结果或者故障的原因等。几乎开发每个大型系统时,都需要设计一种相对应的日志系统,用以记录系统的运行状况.对于一个综合的日志系统来说,主要存在这些特点[16]:①日志系统种类繁多;②日志存储格式多样;③异地存储的日志通信协议方式多样。这些问题导致日志系统存在着风格不一致、通用性差、需要重复设计等等。设计一个通用的综合日志系统,将极大减少日志系统方面的投入。

本日志系统初期构想是向程序提供一个统一的接口,程序中不需要做任何多余代码就能把程序的相关信息输入到服务器控制台和文件系统中。大体数据流程图如下图4-2所示。

图4-2 日志系统数据流程图

具体需求如下:

①.滚动日志:在日志文件日志系统根据日期每天生成一些大小固定(10M)日志文件,在数据库方面日志系统根据日期每天生成一个表用来记录当天的日志信息。

②.多元信息显示: 日志系统会把日志信息多元化 的现实的不同的地方,如文件、数据库、控制台。

27

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

③.接受的信息多样:程序中可以传入多种参数来现实日志乃至调试信息。

4. EIM服务器缓存系统需求

在企业级应用中,三层构架技术已经非常成熟。它们是处理数据库的后台,处理商业逻辑的中间层,以及用于数据交互的显示层。在这三层中,都涉及到数据的收集和处理。所以数据的处理是企业级应用的核心之一,系统对数据处理的能力对系统的性能有着决定性的作用。而在企业级应用中,需要处理的数据容量是海量的,由这些数据所生成的对象也往往非常复杂。在企业级开发中,JAVA开发者经常要通过JDBC从数据库中获得大量,复杂的数据,并把这些数据组装成相应的对象。如果是在集群环境下,这些对象还要被位于不同IP地址的多台主机共事。在这些复杂的对象被创造及使用后,它们将被JAVA虚拟机的包收集机制回收并销毁。如果系统再次需要使用这些对象,就不得不重新创建它们,这将极大的增加系统的负担、降低系统的性能。所以如果要提高系统的整体性能,缓存这些对象将是必然的选择[17]。

客户端获取数据对象时,首先缓存系统从主机内存中查找被缓存的对象。如果对象存在。则直接使用。如果对象不存在,缓存系统接着从磁盘缓存中杳找对象。在向内存缓存中插入一个新的对象时,判断内存缓存的容晕是否已经到了定义的最大值,如果到了最大值,缓存系统从根据缓存对象清除算法从内存缓存中挑选出一个缓存对象[17]。并把这个缓存对象存入磁盘中。具体过程如图4-3所示。

缓存系统同时在内存缓存中定义一个守护线程,这个守护线程定期的扫描保存在主机内存中的缓存对象,判断对象是否已经超过对象的虽大生存时间,如果超过了这个时间,则从内存缓存中把对象清除掉。

图4-3 缓存系统整体流程

综合以上分析缓存系统应该有一下功能: 缓存持久化,缓存更新、缓存检查。 5. EIM服务器消息处理系统需求

本服务器的主要功能是处理用户发来的消息,所以这个部分的设计对于服务器是至关重要的。在设计这个消息处理器的过程中遇到很多问题,由原来的单一集中式变成了可配置分布式,当然也是需求在变化。从宏观上讲服务器收到一个消息就得启动一个线程来解析和处理这个消息。如果收消息峰值很大那么这些线程就存在线程安全和同步,如何设计这一个机制来处理众多的解析消息的线程对消息处理系统是关键因数。其具体流程图如图4-4所示:

28

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

图4-4 消息处理器流程

根据IM消息处理流程和开发需求可以得出以下要求:

①用MVC模式作为消息处理器的核心,这样可以达到解耦和扩张性强的要求,也使开发过程也显得简洁。

②每个消息处理器必须线程安全,防止消息在峰值过高的情况下被其他线程修改,实现服务器的并发处理消息。

③实现消息处理和消息的可配置性,这样可以动态改变消息的处理器,降低系统的依赖性

④在解析XML配置文件时应该是系统启动时候只解析一次,以达系统消息处理器效率高的要求。

6. EIM服务器性能监控系统需求

一架飞机依靠强大的引擎可以获得非凡的速度,但是同时它也需要GPS等系统束保障飞行过程中的安全与可靠;同样,好的企业要达到业务上的高效,就必须有一套完善的辅助管理手段以及配套设施,对于这些起基础作用的服务设施,要保证稳定可靠的提供服务[18]。而EIM服务器也需要适当的性能监控系统,来达到实时监控服务器的性能,本监控系统设计很简单,做个一下一些监控:

①监控服务器的内存

②监控服务器的CPU使用率 ③监控服务器的磁盘使用率 ④监控管理员的操作

7. EIM服务器管理系统需求

在企业中很多服务器是在黑黑的屏幕下进行管理,而且内部的一些文件需要借助操作系统才能查看,而且很多服务器都是在UNIX操作系统下这样没有很强的UNIX系统的知识是根本无法去接触服务器,管理员对服务器的了解是透明的。总得一句话这样的服务器虽然性能高但在人性化管理没做的十分好。而一个很好的服务器应该在GUI方面做到必备的要求,能进行简单的服务器管理。 本系统设计初期在这个方面没做任何处理,任何人对服务器是透明的,服务器内

29

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

部发生什么错误都无法监控,必须得去查看日志文件才能知道错误在何处,这样就十分不人性化和合理。所以在后期本人加上了服务器可视化操作,无需通过操作系统来查看服务器的配置文件、日志等等。 4.2 EIM服务器设计

在需求阶段已经把服务器的要求做了简单介绍,在此根据即时通信系统主要特点和主要功能情况,结合企业所出现的各种各样的问题,综合考虑和设计的此服务器,本服务器可以完成以下功能:

①日志自动管理,监控服务器的每个错误和每个动作。 ②解析收到的各种消息,做相应的处理。 ③向在线用户发送各种通知和新闻

④界面友好美观,操作简单易行,可视化操作 ⑤实时监控服务器的CPU和内存状况 ⑥.服务器动态开启关闭和刷新 4.2.1服务器总体设计

网络服务器主要分为2种[19]:(1)循环服务器(iterative server) 该服务器一个时刻只能处理一个请求,多个请求同时到来将会放在请求队列里;(2)并发服务器(concurrent server) 在每个请求到来以后分别产生一个新进程来处理这个请求所产生的连接。TCP的Socket服务器大多采用并发方式提供服务。本系统是第二种模式,接收到一个消息服务器就启动一个进程来处理这个消息。从宏观方面分析服务器大致分为如图4-5:

图4-5服务器整体结构

30

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

4.2.2服务器数据库设计

本系统牵涉到大量的简单数据, 如用户信息、群信息、好友信息等, 这些数据能否方便高效的管理是服务器能否成功的关键。在系统开发中一般采用数据库来管理这些数据。综合比较各种数据库,本系统的开发选择与JAVA编程语言完美结合的,功能强大,结构体系简单易用的MySQL作为后台数据库来管理数据。

本系统所需要设计的数据库表如表4-1所示。

表4-1 数据库表 序 号 1 2 3 4 5 6 数 据 库 表 serveruser user team teamname fridentmap fridentname 数据库表名称 服务器管理员表 用户信息表 群信息关联表 群名表 分组信息关联表 分组名称表

(1).Serveruser表是用来存储服务器管理员信息,该表结构如表4-2所示:

表4-2 Serveruser

字段名 id name pwd competence

字段类型 INTEGER VARCHAR(45) VARCHAR(45) INTEGER 说明 管理员编号 管理员姓名 管理员密码 管理员权限 主键 备注 Not Null Not Null Not Null (2).User表是用来存储用户信息,该表结构如表4-3所示:

表4-3 user 字段名 id name pwd word 字段类型 INTEGER VARCHAR(45) VARCHAR(45) VARCHAR(45) 说明 用户编号 用户姓名 用户密码 用户个性签名 主键 备注 Not Null Not Null Not Null

(3). team表是用来存群和用户的关联信息,该表结构如表4-4所示:

表4-4 team

字段名 id owerID

字段类型 INTEGER INTEGER 群编号 说明 主键 主键 群主编号 备注 31

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

teammember

INTEGER 群成员编号 主键 (4).teamname表是用来存储群名信息,该表结构如表4-5所示:

表4-5teamname 字段名 id name

字段类型 INTEGER VARCHAR(45) 群名 说明 群名编号 Not null 备注 主键,外键 (5). fridentmap表是用来存组和用户的关联信息,该表结构如表4-6所示:

表4-6 fridentmap 字段名 id owerID fridentmemberID

字段类型 INTEGER INTEGER INTEGER 组编号 说明 主键 主键 主键 组主编号 组成员编号 备注 (6).fridentname表是用来存储组名信息,该表结构如表4-7所示:

表4-7 fridentname

字段名 id name

4.2.3服务器详细设计

字段类型 INTEGER VARCHAR(45) 组名 说明 组名编号 Not null 备注 主键,外键 1. 消息处理系统设计

我们经常会开发WEB应用,在WEB中开发中经常使用TOMCAT服务器,TOMCAT服务器就是个Servlet容器[20]。根据这个思想我把每种消息处理器设计成类似于Servlet,服务器相当于一个消息处理器容器,整个消息处理器系统是一个MVC结构,在这个结构中核心类有四个:interface IMessageProcess : 消息处理器接口,规定了处理器方法;class MessageProcessConfig: 消息处理器配置信息; class MessageProcessFactory: 消息处理器生产工厂,根据配置信息和消息类型来创建消息处理。class ServerReceivedMessageProcess:面向服务器Sockect端,在此类中把收到的消息用MessageProcessFactory类所产生的消息处理器来处理消息。整个序列图如图4-6所示:

32

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

图4-6 消息处理序列图

以上是消息处理的核心部分,下面分别讲述服务器如何处理各个消息的流程。

2. 服务器日志系统设计

根据需求要求:滚动日志、多元信息显示、接受的信息多样.设计了两个类LoggerFileManager和EIMLogger。LoggerFileManager是管理日志文件的生产策略读写规则的,EIMLogger是对外提供日志信息接口的。数据库写和读取因时间问题还没实现。它们的序列图如图4-14所示:

图4-14日志序列图

3.服务器缓存系统设计

服务器的缓存组件,存放常用的数据,应该满足以下要求: 1.要解决的问题:

33

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

如何制定数据的前置规制,守护及维护数据;2.当数据量大的时候如何应对; 3.系统刚刚开始使用的是模拟数据生成。针对本缓存系统它具备一下组件: 所有在线的用户的连接、常用的用户信息、在线的用户信息、常用的群信息、常用的好友组信息、用户的留言信息等。其构成图如图4-15所示:

图4-15缓存组成结构

4. 服务器Socket设计

本服务器Sockect是基于MINA的非阻塞SocketAcceptor封装而来,在MINA端的SocketAcceptor提供了底层的连接和设置IO处理器,而这些功能对于服务器是偏底层,所以要基于SocketAcceptor封装自己的EIMSocket。而EIMSocket只是设定了相应的属性没做任何操作,在设计此EIMSocket同时也设计了一个套接字接口ISockect规定套接字的方法。本系统Sockect封装类图如下图4-16所示,

具体的Sockect分为EIMFileSocket和EIMChatSocket。EIMFileSocket负责企业用户的文件传输,EIMChatSocket负责企业内部的聊天消息传输。分为这两个的原因是文件包的消息很大解析文件消息需要很长的时间和内存,如果不把它们分开那么当在线人数过高的时候就必然会出现用户发出一条消息要过许久好友才能收到这个消息,这就和我们实时通信的目标所违背。如果把这两个分离则就相互不影响,初步实现了实时通信的目标,而同时又实现了文件的传输。

图4-16 EIMSockect类图

5. 服务器监控系统设计

34

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

在服务器端总要有两大监控:CPU和内存,初期设计想法是把它们做成动态曲线来显示。大体界面如图4-17和4-18所示:

图4-17内存监控 图4-18CPU监控

在设计时它们都是基于Swing和线程封装而来,使用java中的Rectangle2D和Line2D老绘制图表,在界面一打开是就启动监控线程老监控这个两系统值。详细实现请看它们的实现。 6. 服务器可视化管理系统设计

服务器可视化管理系统是用来管理EIM服务器信息的,服务器现行的任何信息都可以通过可视化来管理,而避免了敲命名来获取服务器的相关信息,当然有些牛人不喜欢可视化操作觉得效率低,本系统设计处已经预留了接口,在CMD日志信息栏中可以扩展为带UNIX命令控制台,支持简单的UNIX命令。而在可视化桌面中可以新建项目、修改背景、修改图表等等类似XP操作系统一样。具体形式如图4-19所示。

图4-19 服务器管理平台

35

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

4.3 EIM服务器运行界面展示

服务器启动的顺序是如图4-20所示,在下面四个界面中简单的演示了下此服务器的运行情况。图4-21展示的是服务的加载启动界面,此界面显示了服务器的加载信息;图4-22展示的是服务管理主界面,在此界面上可以查看和管理服务器的日常信息比如:日志信息、服务器配置信息、服务器JVM信息、CUP和内存使用情况等等信息;图4-23展示的是服务器基本信息如:磁盘使用信息、服务器Socket启动信息等等;图4-24展示是查看服务器的日志、配置信息等信息。 因篇幅问题,本节是大概的展示了服务器的主体功能。 加载配置信息 启动管理平台UI 启动服务后台系统 图4-20 服务器启动顺序

图4-21启动界面 图4-22服务器管理主界面

图4-23服务器信息界面 图4-24管理服务器日志、配置等信息界面

36

中南大学学士论文 基于JAVA的企业级即时通信平台设计与实现

第五章 EIM客户端设计与实现

5.1 EIM客户端分析 5.1.1 EIM客户端可行性分析

1.应用可行性分析

在企业内部办公通常要和同事交流,在同一个办公室里还可以去当面交谈,但是在不同的办公室不同的子公司就不能去面对面去交流,这是需要一个软件去帮助员工来沟通,比如一个类似QQ的通信软件。所以从应用上分析是可行的。

2.技术可行性分析

考虑到客户端的技术可行性,在软件方面选择了如今较流行的Eclipse来进行开发管理平台的设计,使用XML存储数据;在语言方面使用了当今最流行JAVA来开发,通信框架用了性能很高的MINA通信框架;在XML解析技术上使用了使用简单效率高的XStream工具。

在硬件方面,则选择空间较大,只要是PentiumIII系列及以上的计算机,内存在512M以上,硬盘在10GB,都可以满足客户端的运行需要!当然,硬件的配置越高,系统的开发与运行会更流畅。考虑到如今的家用或商用电脑硬件的整体配置水平,系统在硬件方面是可行的。

在软件方面,由于Eclipse 一个非常成熟的开发工具,无论在安全性、可用性、可靠性方面都毫无置疑,因此软件方面是可行的。而在java技术方面是绝对不会匮乏的。

5.1.2 EIM需求分析需求分析

据腾讯QQ官方消息,2009年QQ在国内已拥有10.57亿多的注册用户,4.84亿活跃用户,同时在线人数1亿以上.目前腾讯QQ已成为国内用户最多的个人即时通讯工具。其拥有众多用户的原因是有多方面的,比如界面人性化、操作简单、娱乐性强。其中娱乐性强是个主要原因。

而本客户端是面向办公的所以我们的重要需求是方便办公和交流,其次的需求就是界面人性化优美。

总结客户端需求如下:

①较强的方便办公和员工交流 ②界面人性化优美 ③实现日常的聊天 ④实现日常的文件传输

37

本文来源:https://www.bwwdw.com/article/x4og.html

Top