聊天室(2)-项目开发文档-李兆龙

在这里插入图片描述

西邮Linux兴趣小组 大一暑期项目

开发设计文档

项目作者 项目名称
李兆龙 聊天室

1.项目引言

1.1项目综述
聊天室项目目的在于实现一个类似qq的通讯软件,支持好友模块,群模块,单聊,群聊,收发文件等,所有功能均支持在线离线,且有较好的用户体验。

1.2术语表

序号 术语或缩略语 说明性定义
1 数据库 此项目使用MySQL
2 io多路复用 项目中使用epoll
3 Tcp/ip协议 网络传输协议,此项目使用的就是这中传输协议
4 C/S 客户端服务器模型
5 API 函数接口
6 线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务
7 Wireshark 抓包工具

线程池我最后并没有用

1.3参考资料

参考资料
Linux编程实战
csdn
博客园
深入理解计算机系统
吕海东学长细心的讲解

1.4 项目开发环境、流程图绘制工具
开发环境:Deepin桌面版15.7.1,gcc编译器,vscode,vimplus,MySQL。

程序运行环境:
1.局域网

2.数据结构说明

链表,邻接表,map,分页器

3.模块设计

3.1程序函数调用图及模块化分
服务器端

  1. 第一层处理各种请求 处理连接请求,事件请求进入下一层
  2. 第二层处理不同的事件请求

客户端

  1. 第一层 登录界面
  2. 第二层 大体功能选择界面
  3. 第三层 具体功能选择界面

3.2功能设计说明

UI_Client_Login()

在这里插入图片描述

UI_Client_Fun()

登录成功后显示
在这里插入图片描述

UI_Client_Friend_List()

在这里插入图片描述

UI_Client_Friend_Chat()

双机实时聊天
在这里插入图片描述

UI_Client_Group_List()

在这里插入图片描述

UI_Client_Group_Chat()
多机实时聊天
在这里插入图片描述

3.3函数说明

客户端函数头文件

int my_recv(int conn_fd,char *data_buf,int len);
int my_recv_tmp(int conn_fd,char *data_buf,int len);
int get_userinfo(char *buf,int len);
int input_userinfo(recv_t *temp);
int FetchAll_for_Friend_List();
int login_client(int conn_fd,char *username);
int register_client(int conn_fd,char *account);
int Retrieve_client(int conn_fd);
int Add_Friend(int conn_fd);
int Del_Friend(int conn_fd);
int send_friend_messages(char *account,char *Message);
int Chat(char *account);
int show_friend_list();
int register_group_client(int conn_fd);
int Add_group(int conn_fd);
int Quit_group(int conn_fd);
int Dissolve(int conn_fd);
int Set_Admin(int conn_fd,char * count);
int Kicking(int conn_fd,char *count);
int recv_file(recv_t *package);
void *method_client(void *arg);
int show_group_member(char *account);
int send_group_messages(char *account,char *Message);
int Group_Chat(char *account);
int show_group_list();
void *send_file(void *arg);

服务器函数

int login(recv_buf,&mysql);
int register_server(recv_buf,&mysql);
int Retrieve_server(recv_buf,&mysql);
int add_friend_server(recv_buf,&mysql);
int add_friend_server_already_agree(recv_buf,&mysql);
int del_friend_server(recv_buf,&mysql);
int List_friends_server(recv_buf,&mysql);
int send_messages_server(recv_buf,&mysql);
int register_group_server(recv_buf,&mysql);
int Add_group_server(recv_buf,&mysql);
int Quit_group_server(recv_buf,&mysql);
int Dissolve_server(recv_buf,&mysql);
int Set_Admin_server(recv_buf,&mysql);
int Kicking_server(recv_buf,&mysql);
int Send_group_messages_server(recv_buf,&mysql);
int Send_file_server(recv_buf);
int *solve(void *arg);

3.4其他说明

一个是数据库的建表问题,另一个是线程池的引入。

建表问题
个人认为大一假期的这个项目就是简单的了解数据库,有很多的特性其实要学习也要一段时间,所以不必追求在这个方面做的非常好,当然要是以前学过的话当然要全力以赴,再来说说建表,我一共是建了八张表,其实应该是七张,因为当时并不熟悉主键这个东西,所以强行用一张表模拟了主键,
在这里插入图片描述

线程池问题
因为假期时间较为紧张,所以我到最后并没有加上线程池,但epoll+线程池却是个很好的模型,可以把线程池用在这两个地方,一个是服务器用多线程写,来一个请求使用一个线程处理,完成后加入线程池,以此类推。
二是客户端接收文件可以用线程池,但其实用处不是那么大,相比与一个客户端发文件的资源,线程创建的开销到是可以忽略不计了,所以不建议

4.文件说明

文件名 功能描述
server.c 存放服务器主函数
solve.c 存放服务器各种请求的处理函数
client.c 存放客户端主函数
incident.c 存放客户端各种请求的处理函数

5.异常错误处理

首先标明了用户有权限的操作,然后对用户的一般性操作进行排错处理,保证健壮性,

6.已知存在的问题及改善方案

  1. 虽然功能实现 单服务器的效率与健壮性却并不高 还需要大二对于网络编程的更加深入的学习才可以
  2. 进阶功能并没有实现很多 诸如视频聊天,断点续传,也从侧面反应出后期对于项目确实没有尽心尽力,对于以上功能会继续学习,早些加上
  3. 排错处理并没有到优秀的地步 一些地方没有进行排错
  4. 项目没有采用分层架构 可维护性较差
  5. 其中数据结构的选择并不是最优 很多可以优化的地方都使用了朴素算法

原文链接: https://www.cnblogs.com/lizhaolong/p/16437396.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    聊天室(2)-项目开发文档-李兆龙

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/395831

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月5日 下午1:44
下一篇 2023年4月5日 下午1:44

相关推荐