具体信息见https://github.com/xubenhao/ChatMe/wiki
如果上述网址无法显示图片,可参考
https://blog.csdn.net/x13262608581/article/details/113881265?spm=1001.2014.3001.5501
1. 网络通信模块
网络通信模块采用我进行注释&说明,结构调整后的mymuduo库.
关于mymuduo库具体说明参考
https://github.com/xubenhao/MyMuduo
在ChatMe应用中
mymuduo库放在MyMuduo文件件,被客户端和服务器共同使用,来提供基于TCP/IP的局域网通信功能
2.MySql数据库访问模块
采用mysql提供的c api进行与mysql服务器的交互.
提供一个c++类MySqlAgent来封装对mysql提供的c api的使用
通过该类在服务端我们作为一个mysql客户端,使用后台mysql服务器提供的数据存储,数据检索,数据处理服务.
3.应用层通信协议设计
客户端到服务器方向会发出的消息目前有8种类别,每种类别及响应字节流打包/解包协议如下
a.注册
4字节长度+2字节消息类别+1字节用户id长度+用户id内容+1字节密码长度+密码内容
b.登录
4字节长度+2字节消息类别+1字节用户id长度+用户id内容+1字节密码长度+密码内容
c.添加好友
4字节长度+2字节消息类别+1字节添加方用户id长度+用户id内容+1字节被添加方用户id长度+用户id内容
d.获取好友列表
4字节长度+2字节消息类别+1字节用户id长度+用户id内容
e.离线
4字节长度+2字节消息类别+1字节用户id长度+用户id内容+8字节登录时间戳
f.获取需要处理用户列表
4字节长度+2字节消息类别+1字节用户id长度+用户id内容
g.聊天
4字节长度+2字节消息类别+1字节发送方用户id长度+用户id内容+1字节接收方用户id长度+用户id内容+聊天内容长度+聊天内容
h.获取客户间未被处理消息
4字节长度+2字节消息类别+1字节发送方用户id长度+用户id内容+1字节对端用户id长度+用户id内容
服务器到客户端方向会发出的消息目前有8种类别,每种类别及响应字节流打包/解包协议如下
a.注册回复
4字节长度+2字节消息类别+1字节注册结果
b.登录回复
4字节长度+2字节消息类别+1字节登录结果+8字节登录时间戳
c.添加好友回复
4字节长度+2字节消息类别+1字节添加结果
d.获取好友列表回复
4字节长度+2字节消息类别+1字节好友数量+1字节好友id长度+id内容[如此重复好友数量次,以发回所有好友信息]
e.获取需要处理用户列表回复
4字节长度+2字节消息类别+1字节好友数量+1字节好友id长度+id内容[如此重复好友数量次,以发回所有用户信息]
f.聊天回复
4字节长度+2字节消息类别+1字节聊天处理结果
g.新消息通知
4字节长度+2字节消息类别+1字节发送方用户id长度+用户id内容
h.得到客户间未被处理消息回复
4字节长度+2字节消息类别+2待处理消息数量+1字节消息方向+2字节消息长度+消息内容+8字节消息时间戳
[如此重复待处理消息数量次,以发回所有未处理消息]
1.客户端采用c++&qt基于linux平台实现,网络通信采用tcp/ip,采用基于陈硕muduo开源库修改调整而来的mymuduo实现与聊天服务器的网络通信
2.服务端采用c++&mysql c api基于linux平台实现,网络通信采用tcp/ip,采用基于陈硕muduo开源库修改调整而来的mymuduo实现与聊天客户端的网络通信
- 服务端
https://github.com/xubenhao/ChatMe/releases/tag/1.00
服务端安装的说明
运行服务端软件的主机将成为整个聊天系统的服务器.
且服务端软件采用硬编码指定了采用地址为本机,用户名为muduoclient,密码为370970843的登录信息进行mysql客户端向mysql服务器的登录.
所以为了服务器能正常提供服务,需要在运行服务器的主机上提前安装mysql服务器,并创建一个用户名为muduoclient,密码为mysql的用户.
且在mysql服务器中基于muduoclient登录后,创建一个名为global的数据库.在其中创建一个user表.
采用create table user(id varchar(100), password varchar(100), primary key (id));
2.客户端
https://github.com/xubenhao/ChatMe/releases/tag/1.00
可以基于目前已有功能进行继续开发的内容包括
1.优化聊天显示效果.可以采用自定义控件做到类似QQ聊天的文字显示效果.
2.支持文件传输.
3.支持发送表情
4.优化消息提示,可以采用自定义控件,采用闪烁方式进行新消息提醒
1.服务端对每个已经连接套接字发来的请求进行处理时,
在回调中执行处理,且处理过程会作为mysql客户端请求后台mysql服务器的服务.
由于mymuduo非阻塞I/O+消息循环的事件处理特点是,不要在事件处理中进行耗时较大的操作,
而mysql客户端到mysql服务器的请求处理以阻塞方式进行,在同时连入到服务器用户数量较大时,
可能因此导致单个客户请求响应延时变大.