2023年11月28日发(作者:)

即时聊天系统详细设计说明书

⽂档编号:SDP-4

⽂档版本:3.0.0

linux环境下的即时聊天系统开发项⽬⼩组

⽂档控制信息

⽬录

⽬录 (3)

1.任务概述 (3)

1.1编写⽬的 (3)

2.框架设计 (5)

2.1整体框架 (5)

2.2模块设计 (5)

2.2.1客户端 (5)

2.2.2服务器端 (6)

3.详细设计 (6)

3.1Client/Server (7)

3.1.1User Client (8)

3.1.1.1.功能说明 (8)

3.1.1.2.界⾯设计 (8)

3.1.2C/S Server (9)

3.1.2.1.功能说明 (9)

3.2Browser/Server (9)

3.2.1功能说明 (10)

3.3数据结构 (10)

3.3.1账户注册信息 (10)

3.3.2⽤户个⼈信息 (10)

3.3.3⽤户好友信息 (11)

3.3.4⽤户状态信息 (11)

项⽬开发成员:

钱存峰、彭⾣、付重阳、毕宏伟、吴斌

软件⽤户:

任意互联⽹⽤户

软件⽤途:

此项⽬为中国科学技术⼤学软件学院⼯程实践环节选题。⽬标是实现在linux 操作系统上即时聊天。

1.3参考资料

1linux环境下即时聊天系统项⽬计划书

2linux环境下即时聊天系统需求说明书

3linux环境下即时聊天系统数据说明书

4linux环境下即时聊天系统概要说明书

5、《软件评测师教程》,柳纯录等,清华⼤学出版社

2.框架设计

2.1整体框架

C/S 架构分为客户端(Client)和服务器端(Server)两部分。服务器端提供服务,客户端实现⽤户显式实现⽤户需求。两部分通过

互联⽹络进⾏通信。

2.2模块设计

2.2.1客户端

由图2.1-1,将客户端分为GTK 窗⼝模块和客户端事务处理模块两部分,实现图形界⾯代码与其它代码的分离。

窗⼝模块包含⼀系列的基于GTK 图形开发包的图形界⾯,如:登录窗⼝、主窗⼝、聊天窗⼝、个⼈信息窗⼝等。⽤户

对图形界⾯的操作,对应的GTK 组件(Widget

2.1-3服务器事务处理

2.1-2客户端事务处图 2.1-1整体框架

产⽣相应的信号与事件,传递给客户端事务处理模块。通过对信号与事件的定义,将使程序完成相应的功能。

2.客户端事务处理模块包含除GTK窗⼝外,客户端程序上所有功能的集合。在客户端事务处理模块中,按照不同的功能将其划

分为三个部分(见图2.1-2),分别为:

2.1回调函数接⼝,对GTK图形界⾯signal信号和event事件的处理。

2.2中间处理,包含除了⽹络通信和回调函数之外的其他与图形界⾯和⽹络通信⽆关的功能函数。由于数据的封装与解析有独

⽴的功能包,因此在图2.1-2中,将中间处理部分划分为了两块。

2.3⽹络通信,负责与指定⽹络地址连接,可以选择UDPTCP⽅式连结。

2.2.2服务器端

服务器端只包括两部分(图2.1-1),数据库(DB)和服务器端数据处理模块。

服务器端事务处理模块(图2.1-3)是与客户端事务处理模块相对应的部分,与之相对应的也分为三个主要功能部分,数据库

接⼝、中间处理、服务器Server

DB数据库记录⽤户的各类信息,包括账号信息、个⼈信息、好友信息及群组信息等。

在逻辑上,客户端与服务器端是对称的,那么对数据的处理顺序也是相同的。通过⽹络通信部分收取客户端发送来的请求数

据;对数据包进⾏解析,获得数据结构,或经过其它函数处理;调⽤数据接⼝,查询数据库;返回结果。

3.详细设计

3-1整体结构图

按照需求分析,对概要设计进⼀步细化;按照功能及事务逻辑,对每⼀部分进⾏了模块划分。在服务器端,同时提供⾯向⽤户

User Client)服务,以及Web服务。它们提供的服务内容并不相同,因⽽将其独⽴划分。

M1-1B/S事务处理模块,包含Java接⼝、数据库接⼝、⽹络通信接⼝。Java接⼝处理Web请求,⽣成Web界⾯,与⽤户进

⾏交互;数据库接⼝处理数据事务,并处理与数据库相关的操作;⽹络通信接⼝负责⽹络数据传输。

M1-2C/S事务处理模块,包含C接⼝、数据库接⼝、数据封装解析、⽹络通信接⼝。C接⼝处理由C/S Server接受的⽤户请

求;数据库接⼝处理数据事务,并处理与数据库相关的操作;数据封装解析对⽹络中传输的数据进⾏相应格式的封装解析;⽹

络通信接⼝处理⽹络通信⽅式(TCP/UDP)的处理。

M2为客户端事务处理模块,包含GTK图形界⾯所需的回调函数接⼝、C接⼝、数据封装解析、⽹络通信接⼝。回调函数接⼝

将图形界⾯的⽣成与其他功能函数相分离,⽅便函数调⽤与界⾯代码的修改,完成某些功能时,将调⽤C接⼝进⾏处理;C

⼝是与图形界⾯⽆关的功能函数,由回调函数进⾏调⽤,完成具体功能;数据封装解析与C/S 服务器端的相对应,将⽤户信息

等内容按照⼀定格式进⾏封装,然后由⽹络接⼝进⾏传输,对接受到的特定信息则进⾏解析;⽹络通信接⼝处理⽹络通信⽅式

TCP/UDP)的处理。

从图中,在User ClientC/S Server之间,⾏程简单的分层对应。

3.1Client/Server

3.1-1C/S结构图

由图3.1-1B/SC/S之间是⽆关的,按照实现的功能,。

图中,将客户端(User Client)划分为GTK界⾯和事务处理模块。这样做是为了尽量是界⾯的代码和功能的代码相分离,也

便于进⾏调试。在程序运⾏过程中,回调函数接⼝与GTK界⾯产⽣的信号或事件绑定,当⽤户进⾏特定操作时,将触发回调

函数的

执⾏。

同时,在C/S服务器端,采⽤三层架构:服务器、事务处理模块与数据库系统。由Mongoose Server作为并发服务器,负责与

客户端的通信,并将接受的到的消息向下传递。

3.1.1User Client

User Client是⽤户进⾏即时聊天所⽤到的程序。安装⽂件将可以通过提供的Web 页⾯进⾏下载。

3.1.1.1.功能说明

在⽤户端,除了有与⽤户进⾏交互的图形界⾯,同时完成以下主要功能:

1.登录⽤户输⼊个⼈ID和登录密码完成登录操作,如果服务器认证错误,提⽰错误信息,如果认证通过,则显⽰主⾯板,更新

下载好友列表。

2.查询添加好友⽤户通过点击主⾯板查询好友按钮,在弹出的查找添加好友界⾯进⾏该操作。客户端将把⽤户输⼊的要查询或

添加的好友ID等必要信息发送到服务器,并接受返回的消息,判断时候查找或添加成功。

3.删除好友⽤户选择想要删除的好友,在右键功能列表中点击删除好友。客户端将把⽤户要删除好友的ID等必要信息发送到服

务器进⾏删除操作。

4.个⼈信息的修改⽤户通过点击⾃⼰的头像,在弹出的个⼈资料界⾯修改。客户端将有变化的部分进⾏封装,发送到服务器进

⾏更新,并接受返回的消息,判断是否修改成功。

5.查看好友信息⽤户通过查看好友信息功能,查看好友的个⼈资料设置。客户端将好友ID等必要信息发送到服务器,并接受返

回的好友资料信息,在个⼈资料界⾯进⾏显⽰。

6.聊天⽤户双击好友头像,弹出聊天窗⼝。聊天窗⼝可以显⽰接受到的信息和⽤户发送的信息。

7.发送⽂件⽤户可以向好友发送⽂件。

此外,客户端还要实现好友列表动态更新、多⽤户同时聊天等功能。

3.1.1.2.界⾯设计

1.登录界⾯

2.主⾯板

3.个⼈资料

4.聊天窗⼝

5.查找添加好友

3.1.2C/S Server

C/S Server使⽤⼀种Mongoose Web Server提供服务。它是⼀种C语⾔编写的易⽤的轻量级Web服务器,能够嵌⼊到提供⽹络

接⼝的已有的应⽤程序中。它具有轻量并且快速、能够运⾏在多种平台上(LinuxWindows)、有多种配置⽅式(配置⽂

件、命令⾏、管理页⾯)、多并发等优点,并提供了API

在这⾥,⽤mongoose作为与客户端通信的服务器。Mongoose收到的从客户端发送来的数据后,传递给事务处理模块(图

2.1-2),并由它来进⾏相应的处理。

3.1.2.1.功能说明

1.处理客户端登录、离线接收到客户端发送来的登录或离线请求,为该⽤户ID 更改在线状态。如果是登录请求,则在返回登

录请求成功消息后,为客户端更新好友列表。离线请求,则只修改在线状态。

2.查询、添加、删除好友接收客户端发送来的好友操作请求。查询,则返回查询结果;添加,向要该⽤户要添加的好友发送添

加消息,如通过,则将该好友列⼊⽤户好友列表,更新数据库,否则返回失败消息;删除,直接将⽤户请求删除的好友ID从其

列表中删除。

3.个⼈信息的维护接收客户端发送来的个⼈信息更新请求,将有变化的部分更新⼊数据库。

4.好友信息查看接收客户端发送来的查看好友信息的请求,返回好友个⼈信息。

同时,服务器还要能实现并发处理,以及定时更新⽤户的登录状态。

3.2Browser/Server

3.2-1B/S结构图

由图4-3Web服务器主要提供三项服务:注册、找回密码、下载客户端,实现的功能⽐较简单。

3.2.1功能说明

1.注册注册新账号,⽤户从申请账号页⾯填写必要的信息,申请账号。服务器收到注册请求后,分配⽤户ID,并将⽤户填写的

信息保存⾄数据库中。

2.找回密码⽤户从找回密码页⾯回答注册账号时设定的找回密码问题。如果全部回答正确,则服务器将该⽤户的密码返回。

3.下载客户端Web服务器提供客户端安装程序的下载链接。

3.3数据结构

3.3.1账户注册信息

3.3.1-1账户注册信息

上表中记录了每个注册⽤户的账号信息,包括分配的登录账号、⽤户设置的密码、找回密码要回答的问题及答案、⾝份证信息

等。其中账号的要求为唯⼀且不为空。⽤户密码也不能为空。因为⽤户⾝份证为15位或18位,所以我们⽤字符数组来表⽰。

3.3.2

3.3.2-1⽤户个⼈信息表

上表中描述了⽤户个⼈信息的各数据项。每个账号只对应⼀个个⼈信息表结构。账号是唯⼀的,那么个⼈信息表将不会出现冲

突。

3.3.3

3.3.3-1⽤户好友信息

上表为⽤户好友的信息表,保存⽤户所添加的好友信息。表中只记录好友的账号,因为表3.3.1-1中账号是唯⼀的,且表3.3.2-

1中个⼈信息唯⼀对应⼀个账号,因⽽,记录了好友账号,便可以保证获取⾜够的信息。

3.3.4⽤户状态信息

3.3.4-1⽤户状态信息

上表为⽤户的状态信息表,保存当前已登录服务器的⽤户状态信息,例如是否隐⾝、忙碌、离开等。同时,⽤户可以⾃定义状

态。⽤户⾃定义的状态将保存在⽤户状态数据项中,保存类型为字符串。在其好友登录成功后,将会向服务器查询该⽤户的状

态信息,即获取⽤户状态项的内容,并根据内容显⽰在相应的位置上。

同时,⽤户的登录IP地址也是保存项。⼀⽅⾯可以直观的向好友显⽰⾃⼰所在的位置,另⼀⽅⾯,若有好友向其发送⽂件或者

消息时,可以在与服务器联系后,获取该IP地址,通过此直接端到端的联系,不需要经过服务器进⾏中转。

3.4数据库

3.4-1数据库关系图

上图为各数据表的关系图。描述了各表主键与外键,以及与其他表的联系。4.测试

对与上述设计的正确性要通过测试进⾏验证。对每项功能、每个组合模块、模块集成后,进⾏相应的测试,确定功能是否得到

正确的实现。其中,程序的功能测试由程序员在开发过程中⾃⾏开展。模块测试和集成测试将在项⽬开发进⾏到某⼀阶段时定

期开展。

4.1模块测试

4.1.1模块表

名称功能描述备注

客户端GUI图形界⾯与⽤户的交互图形界⾯,包含多个窗⼝

回调函数对图形界⾯信号进⾏响应的处理函数

数据封装解析对⽹络传输数据按⼀定格式封装、解析

其它事务处理与图形界⾯⽆关的处理函数功能

⽹络通信负责⽹络通信的功能

C/S服务器mongoose⼀个轻量的Web服务器,但这⾥⽤来接受数据

数据库接⼝对数据库进⾏的操作

4.1.2测试说明

根据需求分析⽂档以及详细设计中的功能描述,验证各模块功能实现。测试各模块的输⼊输出的正确性。