350 likes | 521 Views
Java 即时通信工具 (JICQ). 作者: 导师:. 简 介. Java 即时通信系统( JICQ )是以 Java 语言为实现的网络即时通信工具,包括服务器端和客户端,可以在企业内部网络和互联网上运行。使用 JICQ 可以和好友进行交流,信息即时发送,即时回复,传输文件等功能。 本系统充分利用了 Java 语言的平台无关性等众多优点,主要采用了 Socket 网络编程接口、多线程、输入输出流、 Swing 界面编程技术, 为我们构建一个跨平台的真正畅通的网络信息交换工具 。. 性能需求.
E N D
Java即时通信工具 (JICQ) 作者: 导师:
简 介 Java即时通信系统(JICQ)是以Java语言为实现的网络即时通信工具,包括服务器端和客户端,可以在企业内部网络和互联网上运行。使用JICQ可以和好友进行交流,信息即时发送,即时回复,传输文件等功能。 • 本系统充分利用了Java语言的平台无关性等众多优点,主要采用了Socket网络编程接口、多线程、输入输出流、Swing界面编程技术,为我们构建一个跨平台的真正畅通的网络信息交换工具 。
性能需求 • 客户端(JICQ)与服务器端、客户端与客户端能够顺利进行短信收发功能,短信内容不能超过200字符,短信发送延迟时间小于6秒,否则消息发送失败,并向用户返回失败原因。 • 服务器端需要同时响应最低500个用户的访问量。
硬件配置 • 服务器: • CPU:PIII1G • 内存:512M以上 • 硬盘:60G以上,双IDE硬盘,做镜像 • 客户端: • PII 300 • 64M以上
JICQ系统部署图 Java即时通信系统的服务器端包括JICQ服务器程序(其监听9000端口)和数据库服务器(本系统采用MS SQL Server 2000);客户端为JICQ即时通信工具软件。
JICQ基本功能特点 1.客户端(JICQ)向服务器的新用户注册功能。 2.客户端(JICQ)与服务器端之间的通信功能。 3.客户端(JICQ)之间的短信发送功能。 4.客户端(JICQ)之间的文件传输功能。 5.网友分组的管理:好友组、陌生人组、黑名单组 6.添加/删除好友。 7.服务器端存储JICQ用户表、好友列表、离线消息。 在客户端存储好友资料和聊天记录。
表名 用途 描述 Users 系统的用户表 存储用户的基本信息,保护信息,在线状态,以及在线时的IP地址,端口号等信息。 Friends 用户的好友表 存储用户号码,好友号码,以及好友类型等信息。 OfflineMsg 离线消息表 存储用户的离线消息,在用户上线时返回并消除。 JICQ数据库结构设计 Java即时通信系统的数据库服务器为MS SQL Server 2000,数据库名称为JavaICQ,其中主要包括数据表Users、Friends、OfflineMsg。
客户端JICQ存储结构设计 • 客户端JICQ除了必备的程序文件之外,还有相关的数据文件,以辅助程序运行。主要包括用户信息,好友信息,头像文件,声音文件等信息。
JICQ系统类包 • Message包为JICQ系统的消息类包,其中包含有JICQ系统定义的短消息类型,为服务器与客户端所共用;Server包为系统的服务器端程序类包,运行在服务器端机器;Client包为系统的客户端程序类包,运行在客户端机器。
消息类 • 消息类为即时通信系统中,客户端与服务器端、客户端与客户端的通信基础类。Message为消息类的基类,OrdinaryMsg、RegisterMsg、FinderSetMsg、FinderMsg、LoginedMsg、InformLogonMsg为它的派生类。 • Message消息基类,包含有所有消息的类型,以及基本属性。 • RegisterMsg为注册消息类,包含有所有注册属性。 • OridnaryMsg为普通的消息类,主要用于聊天、登陆、注销等消息。 • FinderMsg为搜索请求消息类,包含有搜索类型,请求内容。 • UserBasicInfor类型的网友数组。 • LoginedMsg为返回的登陆消息类,其中包含有在线好友的列表。 • InformLogonMsg为通知在线好友的消息类,其中主要包含有当前用户的IP地址与端口。
客户端JICQ线程控制 客户端JICQ主要由监听线程、消息处理线程控制。首先由监听线程监听消息,当有消息来到时,启动消息处理线程处理消息,最后由消息线程将消息通知用户边界对象。 另外,客户端还有一个能与服务器保持联络的线程,每两分钟向服务器通知一次,表明该客户端仍然在线。
服务器端JICQ线程控制 • 服务器端JICQ主要由监听线程、线程调度池、消息处理线程组成。首先由监听线程监听9000端口,并启动线程池,当有消息来到时,从线程池取得线程,并将消息交由其处理,由消息处理线程处理用户注册、登陆、注销、添加删除好友等请求,将处理结果写入数据库,最后向客户端返回消息,消息处理线程在完成工作之后,再重新回到线程池,等待下一次重新被利用。 • 另外,服务器还有一个检查用户是否仍然在线的线程,每三分钟检查一次,将一些由于和客户端JICQ崩溃等原因,没有来得及向服务器声明在线的用户的在线状态,重新置为“离线”状态。
服务器对客户端JICQ的响应逻辑 • 1.对用户注册功能响应 ; • 2.对用户登陆的响应 ; • 3.对用户注销的响应 ; • 4.对用户搜索的响应 ; • 5.对添加好友的响应; • 6.对删除好友的响应:
客户端JICQ程序界面设计 JICQ系统登录对话框
客户端JICQ滑动按钮组工作原理 主要使用了Swing界面类中的JPanel组件,Timer组件,自定义的ImageButton组件。每当用户单击按钮时,激发Timer事件,每20毫秒展开或者缩小这三个JPanel组件,重新计算按钮位置,以便于产生动画效果。 自定义的ImageButton组件实现的接收短消息事件,每当有短消息来到时,ImageButton就会发生相应的动作,比如闪烁或者跳跃并发出声音。
客户端JICQ消息事件源与监听器原理 事件源是从监听端口接收到消息的线程,由事件源来注册监听器,发送自定义的消息事件对象,监听器为实现消息监听接口的一组头像组件。当消息事件发生时,事件源把短消息事件对象发送给头像按钮组件,头像按钮组件就会调用消息处理方法,完成象闪烁,跳跃,发出声音等反应。
服务器端JICQ线程池原理 • 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。但如果对多线程应用不当,会增加对单个任务的处理时间。 • 假设在一台服务器完成一项任务的时间为T • T1 创建线程的时间T2 在线程中执行任务的时间,包括线程间同步所需时间T3 线程销毁的时间 • T = T1+T2+T3 • 线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。 • 一般一个简单线程池至少包含下列组成部分。 • 线程池管理器(ThreadPoolManager):用于创建并管理线程池 • 工作线程(WorkThread): 线程池中线程 • 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。 • 任务队列:用于存放没有处理的任务。提供一种缓冲机制。
总结与展望 • 经过一段时间的学习和工作,JICQ即时通信工具已经初具雏形,实现了网络即时通信工具的主要功能,为实现一个崭新的可跨平台的Java即时通信工具打下了基础。 • 回顾这一段时间的工作,由于时间紧、任务急、对Java语言掌握不熟练、一些技术原理不了解,使JICQ系统有诸多不完善,希望在以后的工作加以修改。 • 我们相信,随着JICQ逐渐走向成熟,它必将成为网络上又一流行的即时通信工具。