项目:畅所欲言聊天室---网页IM通信聊天室


项目名称

项目名称:畅所预言聊天室

项目描述

实现通信系统,能够让用户通过浏览器进行注册,登录,进行多人聊天的系统

开发环境

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

おすすめ

転載: blog.csdn.net/Hedenghui777/article/details/114966872