# Server_Test **Repository Path**: xhb0127/net_text ## Basic Information - **Project Name**: Server_Test - **Description**: net_practice - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-14 - **Last Updated**: 2026-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # net_text ## 介绍 net_text 是一个基于 C++ 的高性能网络编程框架,提供了 IP 地址处理、套接字操作、内存管理、并发处理、协程支持以及事件驱动等核心功能。该项目旨在简化网络应用程序的开发,封装了常用的网络地址操作、套接字配置、内存池、并发队列、协程调度和 I/O 多路复用等基础设施。 ## 软件架构 该项目采用模块化的 C++ 网络编程架构,主要包含以下组件: - **网络核心组件**:提供 IP 地址封装和处理功能(`IpAddress` 类) - **套接字管理**:通过 RAII 机制自动管理套接字选项设置(`AutoSetSocketOpt` 结构体) - **内存管理模块**:包含内存池实现(`MyMemoryPool`、`MyCentralCache`、`MyThreadCache`、`MyPageHeap`) - **并发处理模块**:基于 moodycamel 的高并发队列实现(`MyConCurrentQueue`) - **协程支持**:提供协程调度器和_future_/promise_模式的协程封装 - **事件驱动框架**:基于 epoll 的 I/O 多路复用实现,支持边缘触发模式 - **信号处理模块**:提供信号初始化和管理功能 - **实用工具**:套接字特征定义、内存覆盖保护、自动资源管理等 ### 目录结构 ``` net_text/ ├── src/ # 源代码目录 │ ├── main.cpp # 程序入口 │ ├── MyOverrides.cpp # 内存操作符重写实现 │ ├── ioepoll.cpp # epoll 实现 │ ├── mini_event.cpp # 事件实现 │ └── signal.cpp # 信号处理实现 ├── util/ # 工具类目录 │ ├── ip_address.h # IP 地址处理实现 │ ├── MyMemoryPool.cpp/h # 内存池管理 │ ├── MyCentralCache.cpp/h # 中心缓存 │ ├── MyThreadCache.cpp/h # 线程缓存 │ ├── MyPageHeap.cpp/h # 页堆管理 │ ├── MySpan.h # 内存跨度管理 │ ├── MySizeMap.h # 大小映射 │ ├── MySpinLock.h # 自旋锁实现 │ ├── MyCommon.h # 公共定义 │ └── OverrideGuard.cpp/h # 内存覆盖保护 ├── include/ # 公共头文件目录 │ ├── MyConCurrentQueue.h # 并发队列实现 │ ├── sockettraits.h # 套接字特征定义 │ ├── tcpserver.h # TCP 服务器框架 │ ├── ioepoll.h # epoll 封装 │ ├── iomultiplexer.h # I/O 多路复用基类 │ ├── mini_event.h # 事件定义 │ ├── util.h # 工具函数 │ └── Mysignal.h # 信号处理 ├── test/ # 测试目录 │ ├── test1.cpp # 基础测试 │ ├── test_epoll.cpp # epoll 测试 │ ├── test_coroutine_concurrency.cpp # 协程并发测试 │ ├── test_concurrentqueue.cpp # 并发队列测试 │ └── test_memory.cpp # 内存池测试 ├── Coroutine.cpp # 协程实现示例 ├── t1.cpp # 协程使用示例 ├── SelectServerExample.cpp # select 服务器示例 ├── epollExample.cpp # epoll 服务器示例 ├── CMakeLists.txt # CMake 构建配置 └── README.md # 项目说明文档 ``` ## 功能特性 ### IP 地址处理 提供 `IpAddress` 类用于网络地址的封装和操作,支持 IPv4 地址的创建、获取地址族、地址字符串转换等功能。 ### RAII 套接字选项管理 `AutoSetSocketOpt` 结构体采用 RAII 模式管理套接字选项,确保资源正确释放: ```cpp // 示例:自动设置套接字选项 AutoSetSocketOpt socketOpt(socketFd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optlen)); ``` ### 内存池管理 自主实现的高性能内存池系统,包含多级缓存架构: - **ThreadCache**:线程本地缓存,支持快速内存分配 - **CentralCache**:中心缓存,在线程间共享和协调 - **PageHeap**:页堆管理,负责大块内存分配 ### 并发队列 基于 moodycamel 的无锁并发队列实现,支持高并发场景下的线程安全入队和出队操作。 ### 协程支持 提供协程调度器和基于 Future/Promise 模式的协程封装,支持异步编程: ```cpp // 创建协程任务 Future async_http_get(const std::string& url); // 使用协程 Future fetch_and_print() { auto result = co_await async_http_get("http://example.com"); std::cout << result << std::endl; } ``` ### 事件驱动框架 基于 epoll 的 I/O 多路复用实现,支持: - 边缘触发模式(EPOLLONESHOT) - 多种事件类型(读、写、错误等) - 自动文件描述符管理(RAII) ## 安装教程 ### 环境要求 - C++20 或更高版本(需要协程支持) - CMake 3.16+ - 支持 POSIX 标准的操作系统(Linux/macOS) - GCC/Clang 编译器 ### 编译步骤 1. 创建构建目录: ```bash mkdir build && cd build ``` 2. 生成构建文件: ```bash cmake .. ``` 3. 编译项目: ```bash make ``` ## 使用说明 ### 基础使用 1. **IP 地址操作**: ```cpp #include "ip_address.h" // 创建指定端口和 IP 地址的套接字地址 IpAddress addr(8080, "0.0.0.0"); // 获取地址族 int family = addr.getFamily(); // 获取地址字符串 const char* ip = addr.getAddress(); ``` 2. **自动设置套接字选项**: ```cpp int socketFd = socket(AF_INET, SOCK_STREAM, 0); int optval = 1; socklen_t optlen = sizeof(optval); // 使用 RAII 自动管理套接字选项 AutoSetSocketOpt reuseAddr(socketFd, SOL_SOCKET, SO_REUSEADDR, &optval, optlen); ``` 3. **协程使用**: ```cpp // 调度协程 Scheduler::schedule(coro_handle); // 在协程中等待异步结果 auto result = co_await async_task(); ``` ### 服务器示例 项目提供了两个服务器实现示例: - `SelectServerExample.cpp`:使用 select 模型的多线程服务器 - `epollExample.cpp`:使用 epoll 的高性能服务器 ### 测试运行 项目包含测试文件用于验证核心功能: - `test/test_concurrentqueue.cpp`:测试并发队列的正确性 - `test/test_memory.cpp`:测试内存池的性能和正确性 - `test/test_epoll.cpp`:测试 epoll 的功能 - `test/test_coroutine_concurrency.cpp`:测试协程并发处理 ## 构建配置 ### CMake 选项 可以通过 CMake 配置以下选项: - 启用/禁用日志功能(依赖 Google glog) - 调试模式构建 - 优化级别调整 ## 许可证 本项目采用 LICENSE 文件中指定的许可证开源。 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 联系作者 如有问题或建议,欢迎通过 Gitee 平台联系项目作者。