高性能并发服务器,完成易播客户端账户验证功能
Visual Studio Code
Ubuntu-22.04
1.进入到build文件夹下
2.执行命令cmake..
3.执行命令make
4.执行命令 ../bin/app
服务器默认ip:0.0.0.0 port:9527
在include/Server/CServer.h 宏定义可修改
本项目设计的主要模块有:
- 网络通信模块
- EPOLL模块
- 线程与线程池模块
- HTTP模块
- 数据库模块
- MD5解密模块
- 日志模块
- 进程模块
线程是CPU独立调度的最小单位,进程是拥有资源的最小单位,本项目采用多进程多线程模式,实现资源的最大化利用,将一个整体的功能分散到多个进程之中,避免多个线程在一个进程内竞争,无法充分利用资源
如图,方框部分为主进程,圆形部分为项目子进程,项目会在开辟两个子进程
- 日志服务器子进程:开启运行日志服务器,负责接收客户端连接和处理客户端通信(日志),向文件中写日志
- 客户端处理进程:主进程中的网络服务器负责接收客户端连接,将连接好的客户端客户端套接字发送给客户处理子进程,客户端子进程负责处理具体的连接事件和通信事件
相关文件储存在public文件夹中
- 字符串类 Buffer
功能:继承string类,对运算符进行重载,提供多个构造,使得字符串操作更加简化
对运算符重载之后,对于各种不同参数类型的函数传参,不需要显示类型转换即可传递 - 函数对象类 function
函数对象绑定:将函数名和函数参数进行绑定,在合适的时机直接调用 函数名(),即可调用函数 - json类 json
已有的库文件,支持json序列化和反序列化
相关文件储存在process文件夹中
功能:创建进程,进程间传递文件描述符,切换为守护进程
- 创建进程 使用fork()函数创建子进程
- 进程间通信
使用socketpair()创建一对已连接的套接字对,向struct msghdr 结构体填充消息,向struct cmsghdr辅助信息结构体填充文件描述符,通过sendmsg()和recvmsg()进行通信 参考:https://www.yuque.com/xiaojie-cyaqx/qmbzdh/xs93lxs2r8w2nv2o - 守护进程
创建守护进程流程图意图:
方法:创建子进程,主进程退出,子进程设为会话组长→创建孙进程,子进程退出→孙进程关闭标准输入输出和标准错误文件描述符,umask(0)设置使用最大权限创建文件,屏蔽子进程退出信号
此模块是对基本的网络通信流程进行一个封装,相关文件位于 Socket文件夹中
- 地址类CSockParam:储存套接字地址信息
- 套接字类CSocket:套接字通信全家桶
- I/O复用EPOLL类:对EPOLL操作进行封装
此模块有现成的API,调用API即可,相关文件都位于encrypy文件夹中
下面加一行测试文字