# Rust_JingNet **Repository Path**: cjcj0213/rust_-jing-net ## Basic Information - **Project Name**: Rust_JingNet - **Description**: Rust重构版Tokio - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-24 - **Last Updated**: 2026-06-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JingNet Rust 基于 Rust 的高性能异步网络服务器框架,采用 Tokio 异步运行时,支持高并发连接、任务调度和优雅关闭。 ## 特性 - **高性能异步 IO**: 基于 Tokio 运行时,支持高并发 TCP 连接处理 - **内存优化**: 使用 mimalloc 作为全局内存分配器,减少内存碎片 - **Protobuf 协议**: 基于 Protobuf 的二进制通信协议 - **任务调度**: 支持 CPU 密集型、IO 密集型和简单任务的分类调度 - **连接管理**: 会话管理器跟踪活跃连接,支持空闲超时检测 - **优雅关闭**: 支持信号触发的优雅关闭,确保正在处理的任务完成 - **健康检查**: 内置 HTTP 健康检查端点 - **可配置**: 通过环境变量灵活配置各项参数 ## 技术栈 - **运行时**: Tokio (多线程模式) - **协议**: Protobuf (prost) - **内存分配器**: mimalloc - **日志**: tracing - **HTTP 框架**: axum (健康检查) - **并发原语**: dashmap, parking_lot ## 项目结构 ``` src/ ├── main.rs # 程序入口,初始化运行时和组件 ├── config.rs # 配置管理,环境变量读取 ├── types.rs # 核心类型定义 (ConnId, TaskType) ├── error.rs # 全局错误类型定义 ├── proto.rs # Protobuf 协议模块 ├── proto/ │ ├── request.rs # 请求消息处理 │ ├── response.rs # 响应消息处理 │ └── frame.rs # 帧格式定义 ├── netlayer/ # 网络层 │ ├── connection.rs # TCP 连接处理 │ ├── codec.rs # 编解码器 │ ├── buffer.rs # 缓冲区管理 │ └── acceptor.rs # 连接接收器 ├── manager/ # 管理层 │ ├── dispatcher.rs # 任务调度器 │ ├── session.rs # 会话管理 │ ├── worker_pool.rs # 工作线程池 │ ├── shutdown.rs # 优雅关闭协调 │ ├── timer.rs # 定时器管理 │ └── metrics.rs # 指标收集 ├── action/ # 动作执行层 │ ├── mod.rs # 动作模块定义 │ ├── executor.rs # 执行器 │ ├── pool.rs # 线程池 │ └── tasks/ # 任务实现 │ ├── mod.rs │ ├── compute.rs # 计算任务 │ ├── encrypt.rs # 加密任务 │ └── compress.rs # 压缩任务 └── forward/ # 转发层 ├── router.rs # 请求路由 ├── redis/ # Redis 客户端 │ ├── client.rs │ └── commands.rs └── db/ # 数据库客户端 ├── client.rs └── queries.rs ``` ## 快速开始 ### 编译 ```bash # 调试模式 cargo build # 发布模式(优化) cargo build --release ``` ### 运行 ```bash # 使用默认配置运行 cargo run # 或使用环境变量配置 APP_LISTEN_ADDR="0.0.0.0:9090" APP_MAX_CONNECTIONS=5000 cargo run ``` ## 配置 通过环境变量配置服务参数: | 环境变量 | 说明 | 默认值 | |---------|------|--------| | `APP_LISTEN_ADDR` | TCP 监听地址 | `0.0.0.0:8080` | | `APP_WORKER_THREADS` | Tokio 工作线程数 | CPU 核心数 | | `APP_MAX_BLOCKING_THREADS` | 最大阻塞线程数 | `256` | | `APP_MAX_CONNECTIONS` | 最大并发连接数 | `10000` | | `APP_READ_TIMEOUT_SECS` | 读取超时时间(秒) | `30` | | `APP_MAX_FRAME_SIZE` | 最大帧大小(字节) | `4MB` | | `APP_CHANNEL_BUFFER_SIZE` | 通道缓冲区大小 | `1024` | | `APP_HEALTH_PORT` | HTTP 健康检查端口 | `8081` | | `RUST_LOG` | 日志级别 | `info` | ## 架构设计 ### 核心组件 1. **连接层 (Connection Layer)** - 使用 Tokio TCP 处理并发连接 - 基于帧的协议解析 - 自动连接超时管理 2. **会话管理 (Session Management)** - 每个连接分配唯一 ConnId - 空闲连接检测与清理 - 连接数限制保护 3. **任务调度 (Task Scheduling)** - 根据任务类型选择执行策略 - CPU 密集型任务提交到专用线程池 - IO 密集型任务使用异步 IO 4. **优雅关闭 (Graceful Shutdown)** - 监听系统信号 (SIGINT/SIGTERM) - 等待活跃任务完成 - 超时强制退出机制 ### 任务类型 | 类型 | 说明 | 执行方式 | |-----|------|---------| | `CpuIntensive` | CPU 密集型(计算、加密) | 阻塞线程池 | | `IoIntensive` | IO 密集型(DB/Redis 访问) | 异步 IO | | `Simple` | 简单任务 | 直接执行 | ## API 协议 服务使用 Protobuf 协议进行通信,定义见 `proto/jingnet.proto`。 ### 请求格式 ```protobuf message Request { uint64 request_id = 1; TaskType task_type = 2; bytes payload = 3; } ``` ### 响应格式 ```protobuf message Response { uint64 request_id = 1; bool success = 2; bytes data = 3; string error = 4; } ``` ## 健康检查 服务提供 HTTP 健康检查端点: ```bash # 健康检查 curl http://localhost:8081/health # 返回: {"status":"ok"} ``` ## 性能优化 - **mimalloc**: 替换默认内存分配器,提升多线程性能 - **零拷贝**: 使用 Bytes 库减少数据拷贝 - **对象池**: 复用频繁创建的对象,减少 GC 压力 - **背压控制**: 防止生产者过快导致内存溢出 ## 监控指标 服务内置以下指标收集(可通过 metrics 模块扩展): - 活跃连接数 - 总请求数 - 任务处理延迟 - 各任务类型计数 ## 开发计划 - [x] Phase 1: 核心架构搭建(连接管理、任务调度、优雅关闭) - [x] Phase 2: 协议层完善(编解码、缓冲区管理) - [x] Phase 3: 任务执行框架(线程池、任务分类) - [x] Phase 4: HTTP 健康检查端点 - [ ] Phase 5: 完整转发层实现(Redis、DB) - [ ] Phase 6: 指标导出与监控集成 ## 许可证 MIT License