# muduo并发服务器 **Repository Path**: q1479527934/muduo-concurrent-server ## Basic Information - **Project Name**: muduo并发服务器 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-07 - **Last Updated**: 2025-05-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仿muduo库的并发服务器 ## 1 项目简介 ### 1.1 目标定位 本项目目标为搭建一个 One Thread One Loop 的主从 Reactor 模型高并发服务器: - 主 Reactor 线程仅负责监听描述符,获取新连接,以保证并发高效性 - 主 Reactor 线程获取新连接后分发给子 Reactor 线程,而子 Reactor 线程监控各自的描述符的读写事件,进行业务处理。 - One Thread One Loop 的思想是指一个线程对应一个事件处理的循环。本项目不提供业务层工作线程池。 ## 2 模块设计 本项目需要实现一个带有协议支持的 Reactor 模型高性能服务器,主要分为以下两大模块实现: - 服务器模块:实现 Reactor 模型的 TCP 服务器。 - 协议模块:为服务器提供应用层协议支持。 ### 2.1 服务器模块 服务器模块用于对所有连接和线程进行管理,主要分为以下三个方面: - 监听连接管理 - 通信连接管理 - 超时连接管理 #### 2.1.1 Buffer模块 - 功能:实现通信套接字的用户态缓冲。 - 意义: 1. 保证接收到的数据完整性。 2. 保证服务端响应数据在套接字可写时发送。 - 接口设计: - 获取缓冲区信息 - 缓冲区读/写 - 缓冲区清空 #### 2.1.2 Socket模块 - 功能:封装 socket 套接字操作。 - 意义:使套接字操作更加简便。 - 接口设计: - 创建套接字 - 绑定主机 - 创建监听 - 创建连接 - 收发数据 - 关闭套接字 #### 2.1.3 Channel模块 - 功能:对一个描述符进行监控事件管理。 - 意义: 1. 方便维护描述符的监控事件。 2. 触发事件后的操作流程更加清晰。 - 接口设计: - 描述符是否可读/写 - 设置描述符可读/写 - 解除可读/写事件监控 - 解除所有事件监控 - 设置不同事件的回调处理函数 #### 2.1.4 Connection模块 - 功能:对通信连接进行整体管理。 - 意义:作为连接管理组件,使连接管理更加灵活简便。 - 接口设计: - 关闭连接 - 发送数据 - 设置回调函数 - 连接建立或关闭时的回调函数 - 成功接收数据后的回调函数 - 产生任何事件后的回调函数 - 协议切换 - 非活跃连接超时释放(默认关闭) #### 2.1.5 Acceptor模块 - 功能:管理监听套接字。 - 意义:获取新建连接,使用 Connection 模块管理这个通信连接。 - 接口设计: - 获取新建连接后的回调函数设置 #### 2.1.6 TimerQueue模块 - 功能:定时任务管理。 - 意义:灵活释放非活跃连接,降低服务器无效负载。 - 接口设计: - 添加定时任务 - 刷新定时任务 - 取消定时任务 #### 2.1.7 Poller模块 - 功能:对任意描述符进行IO事件监控。 - 意义:对 epoll 进行封装,使事件监控更加便利。 - 接口设计: - 添加事件监控 - 修改事件监控 - 移除事件监控 #### 2.1.8 EventLoop模块 - 功能: 1. 进行事件监控管理。 2. 该模块的一个对象对应一个线程,负责处理一个连接的事件。 - 意义:服务器中的所有事件都由该模块完成。 - 接口设计: - 添加任务到任务队列 - 定时任务的添加 - 定时任务的刷新 - 定时任务的取消 #### 2.1.9 TcpServer模块 - 功能:对上述模块进行整合,用于用户进行服务器搭建。 - 意义:使用户可以简单便利地搭建一个服务器。 - 接口设计: - 监听连接管理 - 通信连接管理 - 超时连接管理 - 事件监控管理 - 事件回调函数设置 ### 2.2 HTTP协议模块 #### 2.2.1 Util模块 - 功能:提供一些工具接口。 - 意义:实现协议常用的零碎功能,使代码更简洁。 - 接口设计: - HTTP文件内容读写 - URL编解码 - HTTP状态码和描述信息 - 根据文件后缀名获取mime - 判断文件类型 - HTTP请求资源路径有效性判断 #### 2.2.2 HttpRequest模块 - 功能:解析并存储HTTP请求信息。 - 要素: - 请求方法 - URL - 协议版本 - 头部字段 - 正文 - 接口设计: - 头部字段的插入和获取 - 查询字符串的插入和获取 - 长短连接判断 - 正文长度获取 #### 2.2.3 HttpResponse模块 - 功能:存储HTTP响应信息。 - 要素: - 协议版本 - 响应状态码和描述信息 - 头部字段 - 正文 - 接口设计: - 头部字段的插入和获取 - 长短连接的判断和设置 - 正文设置 #### 2.2.4 HttpContext模块 - 功能:记录HTTP请求的接收和处理进度。 - 接口设计: - 接收并解析请求数据 - 返回解析后的数据 - 返回响应状态码 - 返回接收解析状态 #### 2.2.5 HttpServer模块