文章目录
项目名称
项目名称:畅所预言聊天室
项目描述
实现通信系统,能够让用户通过浏览器进行注册,登录,进行多人聊天的系统
开发环境
Centos7.5-vim/g++/makefile/git
设计思路
采用MVC框架
数据管理模块:用户与聊天数据管理
业务逻辑模块:实现网络通信,进行系统的业务逻辑处理
前端界面模块:前端界面的展示
详细设计
数据库模块设计
与数据库交互访问数据库中的数据,内部与数据库交互,对外提供访问接口获取各项数据。
使用MySQL数据库进行数据管理
CentOS 7 通过 yum 安装 MariaDB:
安装 mariadb 服务
yum install -y mariadb-server
安装 mariadb 命令行客户端
yum install -y mariadb
安装 mariadb C library
yum install -y mariadb-libs
安装 mariadb 开发包
yum install -y mariadb-devel
更改配置
更改 /etc/my.cnf.d/client.cnf 文件
[client] 下加一行配置 default-character-set=utf8
更改 /etc/my.cnf.d/mysql-clients.cnf 文件
[mysql] 下加一行配置 default-character-set=utf8
更改 /etc/my.cnf.d/server.cnf 配置
[mysqld] 下加配置
collation-server = utf8_general_ci
init-connect=‘SET NAMES utf8’
character-set-server = utf8
sql-mode = TRADITIONAL
用户信息表设计
使用自己的数据管理模块对数据库的访问
mysql提供给我们的开发接口文档: MySQL 8.0 C API.
Mysql所需接口
1.初始化mysql句柄
MYSQL *mysql_init(MYSQL *mysql);
- 通常参数为NULL,表示要动态分配一块空间进行初始化
2.连接mysql服务器
MYSQL *mysql_real_connect(MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag);
- mysql:初始化完成的句柄
- host:要连接的mysql服务器IP
- user:mysql数据库用户名
- passwd:数据库访问密码
- db:默认选择使用的数据库名称
- port:mysql服务端口,0默认表示3306端口
- unix_socket:指定socket或者管道,通常为NULL
- client_flag:一些选项操作标志位,通常置0
- 返回值:返回句柄的空间首地址;出错返回NULL
3.设置客户端字符编码集
int mysql_set_character_set(MYSQL *mysql,const char *csname);
- mysql:mysql句柄
- csname:字符编码集名称,通常置为utf8
- 返回值:成功返回0,失败返回非0
4.选择使用的数据库
int mysql_select_db(MYSQL *mysql,const char *db)
- mysql:句柄
- db:数据库名称
- 返回值:成功返回0,失败返回非0
5.表以及其中数据的各项操作(执行语句)
int mysql_query(MYSQL *mysql,const char *stmt_str)
- mysql:句柄
- stmt_str:要执行的sql语句
- 返回值:成功返回0,失败返回非0
6.从远程服务器获取结果集
MYSQL_RES *mysql_store_result(MYSQL *mysql)
- mysql:句柄
- 将查询结果获取到本地
- 出现错误返回NULL
uint64_t mysql_num_rows(MYSQL_RES *result)
- 获取结果集中结果的条数
unsigned int mysql_num_fields(MYSQL_RES *result)
- 获取结果集中结果的列数
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
- 遍历结果集,每次获取一行数据,不会重复,内部有读取位置维护
void mysql_free_result(MYSQL_RES *result)
- 释放结果集空间(不释放就会造成资源泄露)
7.关闭数据库释放资源
void mysql_close(MYSQL *mysql)
8.获取mysql接口调用失败原因
const char *mysql_error(MYSQL *mysql)
业务处理模块设计
网络通信服务器搭建:采用mongoose库进行搭建http服务器
http协议和websocket协议的区别:
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。
在 WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
mongoose搭建http服务器的处理思路流程:
1.搭建tcp服务器(并且设置http请求事件处理函数)
2.通过多路转接模型select进行IO就绪事件监控(判断哪个连接有请求到来)
3.一旦有连接请求到来mongoose将其添加到事件监控列表
4.mongoose调用处理接口
处理接口中功能:
1.接收http请求信息,并且解析
2.回调创建服务器时传入的业务处理入口函数
3.自己实现对应不同请求的业务处理
4.在对应的业务处理中,进行逻辑业务处理,并且设置响应信息
具体对应的业务逻辑:静态界面,注册请求,登录请求,协议切换请求
静态页面,注册登录都是通过http协议实现传输
聊天消息通过websocket协议进行传输
步骤:
1.一个用户,首先注册一个用户名,然后登录,获取聊天页面
2.建立一个websocket通信用于聊天信息的传输
前端页面模块设计
注册和登录页面的展示,使用技术html+js+css