# reactor_server **Repository Path**: Ape-LHR/http_reactor ## Basic Information - **Project Name**: reactor_server - **Description**: Reactor_Server 是一个基于现代 C++ 开发的高性能网络服务器框架,采用业界成熟的 Reactor 设计模式,结合多线程事件驱动架构,实现了完整的 HTTP/1.1 协议支持,基于 epoll 的高效 I/O 多路复用机制支持数万并发连接。该框架在架构设计上体现了高度的工程化思维,具备稳定性、可扩展性和性能表现。 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-06 - **Last Updated**: 2025-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: Cpp, Http, reactor ## README # Reactor_Server 高性能网络服务器框架 ## 项目概述 Reactor_Server 是一个基于现代 C++ 开发的高性能网络服务器框架,采用业界成熟的 Reactor 设计模式,结合多线程事件驱动架构,实现了完整的 HTTP/1.1 协议支持。 该框架在架构设计上体现了高度的工程化思维,具备稳定性、可扩展性和性能表现。 通过主从 Reactor 线程模型实现高效的并发处理,主线程专门负责连接接收,工作线程池处理 I/O 事件,基于 epoll 的高效 I/O 多路复用机制支持数万并发连接。 框架采用清晰的层次分离设计,包括网络层、事件层、协议层和业务层,各模块职责单一且松耦合,支持自定义协议插拔。 在性能优化方面,通过智能缓冲区管理、连接池和对象复用机制、时间轮定时器算法等技术实现高效资源利用。 该框架不仅具备完整的 HTTP 协议解析器、插件化路由系统和配置驱动架构,还提供了完善的错误处理机制、详细的运行日志和优雅的启动关闭流程,适用于高并发 Web 服务器、API 网关、实时通信服务等多种高性能网络服务场景,展示了现代 C++ 网络编程的最佳实践。 ## 性能测试[WebBench和Server同机 仅供参考] 并发量: 可以同时处理多少客户端的请求而不会出现连接失败 QPS: 每秒钟处理的包的数量 ### 测试环境: 4核 4G 1M带宽 云服务器 ### 测试命令 ```bash ./webbench -c 500 -t 60 http://127.0.0.1:8080/ ./webbench -c 5000 -t 60 http://127.0.0.1:8080/ ./webbench -c 10000 -t 60 http://127.0.0.1:8080/ ``` ### 测试结果: | 并发数 | 每分钟请求数(pages/min) | QPS(req/sec) | 备注 | | ----- | ----------------- | ------------ | ---------------------------- | | 500 | 502,185 | **8,369** | 稳定,无失败 | | 5000 | 478,058 | **7,967** | 性能略降,无失败 | | 10000 | 458,218 | **7,637** | 仍无失败,请求下降 | ## 核心架构设计 ### 0. 系统架构图 #### 系统组件图 ![系统组件图](reactor/doc/sys_comp.png) #### 整体系统架构 ![系统整体架构图](reactor/doc/sys_all.png) #### 系统时序图 ![系统时序图](reactor/doc/sys_sequence.png) #### 服务器启动流程 ![服务器启动流程图](reactor/doc/svr_start.png) #### 连接建立流程 ![连接建立流程图](reactor/doc/conn_establish.png) #### HTTP请求处理流程 ![HTTP请求处理流程图](reactor/doc/http_req.png) #### HTTP响应处理流程 ![HTTP响应处理流程图](reactor/doc/http_rsp.png) #### 定时器机制 ![定时器机制图](reactor/doc/timer.png) #### 连接关闭流程 ![连接关闭流程图](reactor/doc/conn_close.png) ### 1. Reactor 模式实现 项目采用经典的 Reactor 设计模式,核心组件包括: - **EventLoop**:事件循环核心,每个工作线程拥有独立的 EventLoop 实例 - **Dispatcher**:基于 epoll 的事件分发器,负责 I/O 事件监控 - **Channel**:文件描述符的事件封装,提供统一的事件回调接口 - **TimerWheel**:时间轮定时器,支持精确的定时任务管理 ### 2. 多线程架构 框架采用主从 Reactor 线程模型: - **主 Reactor**:负责监听连接请求,使用单独的 EventLoop - **从 Reactor 线程池**:处理已建立连接的 I/O 事件,支持动态线程数量配置 - **线程安全的任务队列**:实现跨线程的任务调度机制 ### 3. 连接管理 - **Connection 类**:封装 TCP 连接的生命周期管理 - **智能指针管理**:使用 `shared_ptr` 自动管理连接资源 - **非活跃连接检测**:支持超时自动释放空闲连接 - **缓冲区管理**:独立的输入/输出缓冲区,支持零拷贝优化 ## HTTP 服务器架构 ### 1. 协议解析引擎 - **HTTP 请求解析**:支持完整的 HTTP/1.1 协议解析 - **状态机设计**:采用状态机模式处理请求行、头部、正文的解析 - **错误处理**:完善的错误码处理和异常恢复机制 - **URL 解码**:支持 URL 编码参数的自动解码 ### 2. 请求路由系统 - **RESTful 路由**:支持 GET、POST、PUT、DELETE 等 HTTP 方法 - **正则表达式匹配**:基于正则表达式的灵活路由匹配 - **静态文件服务**:内置静态文件服务器,支持 MIME 类型识别 - **中间件支持**:可扩展的请求处理管道 ### 3. 响应处理 - **HTTP 响应构建**:完整的 HTTP 响应头构建 - **连接管理**:支持 Keep-Alive 和短连接模式 - **重定向支持**:内置 HTTP 重定向功能 - **内容协商**:支持 Content-Type 和 Content-Length 自动设置 ## HTTP 服务器核心组件 ### 1. HttpServer 主类 - **多线程架构**:支持 IO 线程和业务线程分离 - **连接超时管理**:自动检测和处理超时连接 - **路由注册**:支持动态路由注册和匹配 - **静态文件服务**:内置静态文件服务器 ### 2. 业务线程池 (BizThreadPool) - **线程池管理**:动态线程创建和销毁 - **任务队列**:线程安全的任务提交和执行 - **优雅关闭**:支持平滑关闭和资源清理 - **性能监控**:内置线程状态监控 ### 3. HTTP 协议处理 - **HttpRequest**:HTTP 请求解析和封装 - **HttpResponse**:HTTP 响应构建和发送 - **HttpContext**:HTTP 会话上下文管理 - **HTTP 客户端**:支持 HTTP 客户端功能 ## 业务处理模块 ### 1. 认证服务 (AuthService) - **用户认证**:用户名密码验证 - **Token 管理**:JWT Token 生成和验证 - **会话管理**:Cookie 和 Session 管理 - **安全防护**:XSS 和 CSRF 防护 ### 2. 数据库连接 - **MySQL 连接**:关系型数据库操作 - **Redis 连接**:缓存和会话存储 - **连接池**:数据库连接复用 - **事务管理**:数据库事务支持 ### 3. 业务处理器 - **登录处理** (LoginHandler):用户登录认证 - **注册处理** (RegisterHandler):用户注册功能 - **聊天服务** (ChatHandler):实时聊天功能 - **登出处理** (LogoutHandler):用户登出清理 ### 4. AI聊天服务模块 #### 聊天处理器 (ChatHandler) - **消息处理**:接收并验证用户聊天消息,支持JSON格式请求解析 - **身份验证**:通过Cookie中的登录令牌验证用户身份,支持令牌刷新机制 - **历史管理**:加载用户对话历史,限制最近10条消息用于上下文保持 - **错误处理**:完善的异常捕获机制,支持参数错误(400)、未登录(401)、服务不可用(503)、服务器错误(500)等场景 - **消息限制**:验证消息长度不超过1000字符,确保服务稳定性 #### 数据聊天服务 (AIChatService) - **AI集成**:集成DeepSeek API,支持智能对话生成功能 - **对话记忆**:基于用户ID的对话历史持久化存储,支持上下文保持 - **智能回复**:构建包含系统提示、历史对话和当前消息的完整请求上下文 - **错误降级**:API调用失败时返回友好的错误提示,支持服务降级处理 - **参数配置**:支持模型选择、最大token数、温度参数等AI服务配置 #### 记忆管理器 (MemoryManager) - **文件管理**:基于用户ID创建独立的记忆文件,存储完整对话历史 - **历史加载**:自动加载最近对话记录,支持历史记录数量限制 - **持久化存储**:实时保存用户消息和AI回复,确保对话连续性 - **异常恢复**:文件操作异常处理,支持文件不存在时的自动创建 #### 聊天功能处理流程 1. **请求验证**:验证用户身份和消息格式 2. **历史加载**:加载用户最近10条对话历史 3. **AI调用**:调用DeepSeek API获取智能回复 4. **响应构建**:构建包含成功状态和AI回复的JSON响应 5. **历史保存**:保存当前对话到用户记忆文件 6. **异常处理**:处理各种错误场景,返回相应错误码 ## 核心特性 ### 高性能设计 - **非阻塞 I/O**:全异步非阻塞网络通信 - **事件驱动**:基于 epoll 的高效事件处理 - **内存池优化**:缓冲区预分配和复用机制 - **零拷贝技术**:减少内存拷贝开销 ### 可扩展性 - **模块化设计**:各组件松耦合,易于扩展 - **协议抽象**:支持自定义协议处理 - **插件架构**:可插入式路由处理器 - **配置灵活**:支持运行时参数调整 ### 可靠性保障 - **异常安全**:RAII 资源管理,避免资源泄漏 - **连接超时**:自动检测和处理僵尸连接 - **错误恢复**:完善的错误处理和日志记录 - **内存安全**:智能指针管理,避免内存泄漏 ## 项目结构 ```txt reactor/source/ ├── tcp_svr/ # TCP 服务器核心组件 │ ├── acceptor.hpp # 连接接收器 │ ├── any.hpp # 任意类型封装 │ ├── buffer.hpp # 缓冲区管理 │ ├── channel.hpp # 事件通道封装 │ ├── connection.hpp # 连接管理 │ ├── epoller.hpp # epoll 事件轮询器 │ ├── event_loop.hpp # 事件循环实现 │ ├── event_loop_pool.hpp # 事件循环池 │ ├── event_loop_thread.hpp # 事件循环线程 │ ├── Log.hpp # 日志模块 │ ├── network.hpp # 网络通用定义 │ ├── socket.hpp # Socket 封装 │ ├── tcp_server.hpp # TCP 服务器主类 │ ├── timer_wheel.hpp # 时间轮定时器 └── http_svr/ # HTTP 服务器组件 ├── http_server.hpp # HTTP 服务器主类 ├── http_context.hpp # HTTP 上下文管理 ├── http_req.hpp # HTTP 请求解析 ├── http_rsp.hpp # HTTP 响应构建 ├── biz_thread_pool.hpp # 业务线程池 ├── http_client.hpp # HTTP 客户端 ├── my_daemon.hpp # 守护进程管理 ├── util.hpp # 工具函数 ├── server.cpp # 服务器启动入口 ├── handler/ # 业务处理器 │ ├── login_handler.hpp # 登录处理 │ ├── register_handler.hpp # 注册处理 │ ├── logout_handler.hpp # 登出处理 │ ├── chat_handler.hpp # 聊天处理 │ ├── auth_service.hpp # 认证服务 │ ├── db_mysql.hpp # MySQL 数据库 │ ├── db_redis.hpp # Redis 缓存 │ ├── ark_chat_service.hpp # 智能聊天服务 │ └── ds_chat_service.hpp # 数据聊天服务 └── wwwroot/ # Web 静态资源 ├── login.html # 登录页面 ├── chat.html # 聊天页面 ├── static/ # 静态资源 │ ├── css/ # 样式文件 │ └── js/ # JavaScript 文件 └── cgi/ # CGI 脚本 └── chat_ai.py # AI 聊天脚本 ``` ## 设计亮点 1. **优雅的线程模型**:主从 Reactor 模式,有效利用多核 CPU 2. **高效的事件处理**:基于 epoll 的 I/O 多路复用,支持高并发 3. **智能资源管理**:RAII 模式确保资源安全释放 4. **灵活的协议扩展**:易于添加新的应用层协议支持 5. **完善的错误处理**:多层次错误检测和恢复机制 6. **性能优化**:缓冲区复用、零拷贝等优化技术 7. **业务分离**:IO 线程和业务线程分离,提高并发处理能力 8. **安全防护**:完善的认证和会话管理机制 9. **AI集成**:深度集成第三方AI服务,支持智能对话功能 10. **记忆管理**:基于文件的对话历史持久化,确保上下文连续性 ## 适用场景 - 高性能 Web 服务器 - API 网关和微服务架构 - 实时通信服务器 - 自定义协议服务器开发 - 网络编程学习和研究