龙源期刊网 http://www.qikan.com.cn
基于JAVA的即时通讯系统的设计与实现
作者:王光琼,梁弼,朱兆兵 来源:《软件导刊》2011年第11期
摘 要:简要阐述了即时通讯(Instant Messaging,简称IM)的特点、开发现状及应用,并对IM进行详细分析和设计(包括数据库),最后通过JAVA语言实现了一个IM的具体应用。
关键词:即时通讯;面向对象;类;多线程
中图分类号:TP311.52 文献标识码:A 文章编号:1672-7800(2011)011-0092- 0 引言
近年来,随着社会的不断发展,无论是个人还是企业等组织机构,对信息的交流方式也在不断发展,即时通讯服务业因此应运而生。据2011年7月19日,中国互联网络信息中心(CNNIC)发布《第28次中国互联网络发展状况统计报告》显示,截至2011年6月底,中国网民数量达4.85亿,即时通讯使用率为78.6%。由此可见,IM成为了人们通过计算机进行信息交流的重要工具。
IM受到用户的推崇和喜爱,应用也是越来越广泛,但是在计算机软件开发中,有一个公认的瓶颈存在,就是平台差异性。它造成了IM软件在不同的平台上不能够通用的问题,然而随着JAVA语言的出现,打破了这一瓶颈,使得开发更专注于软件本身而不是平台。这也是采用JAVA语言开发IM的主要原因。 1 即时通讯的概念、特点及开发现状
所谓即时通讯(IM),实际上是一个终端服务。它允许两人或多人使用网络即时地传递文字信息、图片信息以及进行语音与视频交流。大部分的IM服务还提供状态信息显示的特性──显示联络人名单,联络人是否在线及能否与联络人交谈等。目前在互联网上受欢迎的IM软件包括QQ、MSN、ICQ等。IM最大的特点就是及时性,随着IM的不断发展,出现了许多新的特点,包括良好的交互性和娱乐性能,安全性等。
自1990年ICQ的出现,实质性的IM的发展已经有20多年,自1999年腾讯公司推出QQ算起,即时通讯在中国的发展已有10多年的时间,已经经过了萌芽阶段,进入快速发展阶段。目前国内面向个人的即时通讯产品主要有腾讯QQ、微软MSN、网易泡泡、新浪UC、ICQ、移动Fetion等,这些IM软件大多是建立在windows平台开发。而应用于其它操作系统平台的IM软件并不多见,目前IM的开发现状主要表现在:IM的多媒体化,各个IM工具不
龙源期刊网 http://www.qikan.com.cn
断加强了其多媒体服务应用。即时通讯业务承载的设备趋于多样化,用户通过PC、手机、PDA以及其它设备等都可以使用即时通讯服务。跨平台应用,在不同的操作系统平台上实现IM应用。
2 IM的分析及设计
IM中涉及到的网络通信协议主要有TCP和UDP,涉及到的网络通信技术有P2P。IM网络通信解决方案通常有两种:公网通信的混合网络模式解决方案和局域网通信的网络解决方案。现仅就IM客户端的用例分析和设计进行说明。
在IM客户端,包含有客户端配置、用户注册、用户登录、用户好友信息管理、用户个人信息管理、聊天共六个主要的功能块,在各功能块中又包含有更多的子用例。仅列举“聊天”用例分析。
聊天是IM客户端里面最基本也是最重要的功能,聊天方式有与单个用户私聊和与多个用户群聊。在聊天过程中有一个扩展功能就是传输文件或者视频、音频,这三个功能是聊天中可选的。经过分析我们确定聊天用例的主要有私聊和群聊两个用例,文件传输、视频传输、音频传输为扩展用例。在聊天当中设计的对象比较多,首先需要的一个对象就是好友管理对象(FriendsManage),要与好友聊天需要知道好友的基本信息,比如说地址,端口等;需要一个聊天管理对象(ChartManage),聊天管理对象负责对聊天的输入,聊天的发送管理等;消息对象(MegManage),它主要负责消息的发送和接受;需要一个聊天记录管理对象(RecodeManage)用例管理聊天的信息;还需要一个文件对象(FileManage)来存储聊天信息;还有一个文件对象(File),它是基本的文件存储实体。聊天的用例设计过程如下:
客户需要向好友管理对象发送一个选择某个好友的消息、好友管理对象向用户返回好友基本信息、客户向聊天管理对象发送要与好友聊天的消息。聊天管理对象向消息对象发送传输聊天内容的消息,再向文件管理对象发送存储聊天信息的消息。文件管理对象向文件对象写入文件。消息管理对象自调用发送聊天内容,再返回发送状态信息。聊天管理对象向用户返回状态信息。聊天用例设计的时序图如图1所示: 3 数据库分析与设计
IM中包括有用户、好友、聊天、图像、文件、服务器、管理员、消息等实体,图2是建立的数据库概念模型。 4 IM的JAVA实现
IM在应用中分为有服务器和无服务器两种模式,因此在客户端设计中就要实现在这两种不同模式下的即时通讯。另外,在某些时候可能使用即时通讯的客户比较多,这时候就要考虑到服务器的承受能力和网络延迟,因此,在对服务器的设计中采用了多线程的方法,为每个客户端开辟一个线程进行服务,这也要求服务器硬件部分具有较大和较快的处理能力。
龙源期刊网 http://www.qikan.com.cn
4.1 公共类抽象
在服务器端和客户端可以抽象出公共类,这些类包括用户类(User)、消息类(Chartcontext)、数据包类(Datapackage)、文件类(File)。下面仅对聊天信息类进行说明。
聊天信息类(chartcontext):在不同终端之间传输的聊天信息可以设计为一个类,这个类中包含有聊天信息的类型、聊天的内容、发送端IP、发送端端口、接收端IP、接收端端口、发送者ID、接受者ID等属性。具体设计如下:
public class chartcontext implements Serializable //序列化接口
private String context;//聊天内容 private InetAddress clientip;//发送端 private int clientport;//发送端端口 private int acceptxunjieid;//接受端 private int sendxunjieid;//发送端 private int type;//聊天类型 public chartcontext() //构造函数
4.2 重要算法实现
在实际实现中,需要一些具体特殊的算法来实现功能,如服务器的网络连接管理,聊天的窗口管理,数据库查询等。下面仅列出数据库操作的算法实现。
对数据库操作是服务器常做的操作,为了方便对数据库进行操作,可以通过封装数据库操作的方法来提高程序效率。将数据库日常的查询、删除、修改、更新等操作封装在一个类中,当服务器某一操作需要用到数据库操作时,直接调用该封装的操作即行。这样也提高了代码的可维护性。数据库操作封装代码如下: