中南大学学士论文 基于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