# Reactor框架 **Repository Path**: chugehehe/reactor-framework ## Basic Information - **Project Name**: Reactor框架 - **Description**: Reactor并发网络模型 + 线程池 - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2024-12-01 - **Last Updated**: 2025-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: 服务器框架, 线程池, 定时器 ## README # Reactor 网络框架 一个基于 Reactor 模式的高性能 C++ 网络编程框架,支持多种负载均衡策略和并发模型。 TCP网络编程本质处理三个半事件:**连接建立、连接断开、消息到达(文件描述符可读)**、消息发送完毕;反应式服务器:启动时注册三个事件的回调函数到事件循环,启动事件循环后Reactor对象通过IO多路复用监听就绪事件分发给三个回调函数。 多Reactor模式:mainReactor占据**主线程**负责监听新连接(accept()),subReactor创建一个**新线程**处理已建立连接的IO事件(IO线程),因为多进程之间无法共享计算线程池(工作线程)。这种模型能够适用IO频繁且计算密集的服务,充分利用多核cpu。 ![image-20250918144512242](./README/image-20250918144512242-1758180185041-10.png) ## 特性 - **高性能**:基于 epoll 的事件驱动模型 - **负载均衡**:支持轮询、最少连接、一致性哈希、自适应等策略 - **线程池**:高效的多线程任务处理 - **定时器**:基于 timerfd 的定时器功能 ## 架构组件 | 组件 | 功能描述 | |------|----------| | **MainReactor** | 主反应器非阻塞EventLoop,负责通过Acceptor接受新连接分配给SubReactor | | **SubReactor** | 子反应器阻塞EventLoop,专注于处理已建立连接的 I/O 事件 | | **Acceptor** | 监听器,接受客户端连接请求 | | **TcpConnection** | TCP 连接管理,封装连接状态和 I/O 操作 | | **EventLoop** | 事件循环,基于 epoll 的事件分发 | | **ThreadPool** | 线程池,处理CPU密集型任务 | | **LoadBalanceStrategy** | 负载均衡策略,支持多种分配算法 | ## 系统要求 - **操作系统**:Linux (支持 epoll) - **编译器**:GCC 7.0+ (支持 C++17) ## 快速开始 ### 1. 克隆项目 ```bash git clone https://gitee.com/chugehehe/reactor-framework.git cd reactor-framework ``` ### 2. 编译项目 ```bash # 编译最新版本 (ReactorV5.2) cd Reactor/ReactorV5.2 make multi_reactor_server # 或编译其他版本 cd Reactor/3_ReactorV4 make # 如果有 Makefile ``` ### 3. 运行服务器 ```bash # 启动服务器 ./multi_reactor_server # 在另一个终端测试连接 nc localhost 8080 ``` ## 📁 项目结构 ``` reactor-framework/ ├── Reactor/ # 核心实现目录 │ ├── 1_ReactorV1/ # 基础 Reactor 实现 │ ├── 2_ReactorV2/ # 添加事件循环 │ ├── 3_ReactorV4/ # 增加线程池 │ ├── 4_ReactorV5/ # 优化连接管理 │ ├── 5_ReactorV6/ # 添加日志和配置 │ ├── 6_ReactorV7/ # 多线程优化版本 │ ├── ReactorV5.2/ # 最新稳定版本 │ │ ├── http/ # HTTP 服务器实现 未完成 │ │ ├── Database/ # 数据库相关组件 未完成 │ │ └── test/ # 测试用例 │ └── muduo_Reactor/ # Muduo 风格实现 ├── timerfd/ # 定时器模块 ``` ## 🎯 使用示例 ### 基础 Echo 服务器 ```cpp #include "EchoServer.h" #include "LoadBalanceStrategy.h" int main() { // 创建 Echo 服务器 EchoServer server("127.0.0.1", 8080, 4); // 4个子反应器 // 设置负载均衡策略 server.setLoadBalanceStrategy(LoadBalanceStrategy::LEAST_CONNECTIONS); // 启动服务器 server.start(); return 0; } ``` ## ⚙️ 负载均衡策略 框架支持多种负载均衡策略,可动态切换: | 策略 | 描述 | 适用场景 | |------|------|----------| | **轮询** | 按顺序分配连接 | 均匀负载 | | **最少连接** | 分配给连接数最少的线程 | 连接时长差异大 | | **一致性哈希** | 基于客户端 IP 哈希 | 会话保持需求 | | **自适应** | 根据负载自动调整 | 动态负载环境 | ### 动态切换策略 ```bash # 获取服务器进程 ID ps aux | grep reactor_server # 切换负载均衡策略 kill -USR1 # 优雅关闭服务器 kill -USR2 ``` ## 📈 版本演进详细说明 ### V1 - 基础 Reactor 实现 - 实现最基本的 Reactor 模式 - 单线程事件驱动模型 - 基础的 Socket 封装和 TCP 连接管理 - 简单的 Acceptor 用于接受新连接 ### V2 - 事件循环优化 - 引入 EventLoop 事件循环机制 - 基于 epoll 的高效事件通知 - 改进的连接状态管理 - 增强的错误处理机制 ### V4 - 线程池集成 - 集成 ThreadPool 线程池组件 - 支持多线程并发处理业务逻辑 - TaskQueue 任务队列实现 - 主从 Reactor 模式雏形 ### V5 - 连接管理优化 - 完善的 TcpServer 服务器架构 - 优化的连接生命周期管理 - 改进的内存管理和资源回收 - 增强的异常处理和容错能力 ### ReactorV5.2 - **负载均衡**:四种策略动态切换 - **主从 Reactor**:MainReactor + SubReactor 架构 - **定时器系统**:基于 timerfd 的高精度定时器 - **数据库支持**:生产者消费者队列模式 - **性能监控**:实时负载统计和策略自适应