- Reactor + 非阻塞 I/O(基于 Tokio)
- 多线程运行时
- 分层架构:网络层 / 协议层 / 业务层
- 线程安全任务队列 + 简单共享状态
- Cargo.toml
- .gitignore
- main.rs
- src/net.rs — 网络层:监听端口、接受连接
- src/protocol.rs — 协议层:解析简单文本协议
- src/service.rs — 业务层:处理请求
- src/state.rs — 共享状态 + 任务队列
- 在 VS Code 的终端运行:
cargo run
# 或者
RUST_LOG=info cargo run # 测试用,通过设置环境变量 `RUST_LOG=info` 控制日志级别- 在另一个终端或 VS Code 集成终端用 nc 连接并验证:
nc 127.0.0.1 8080
PING
TIME- 启动入口在 main.rs。Tokio 多线程运行时通过
#[tokio::main(flavor = "multi_thread")]启动;初始化日志后,调用state::new_state创建共享状态state::SharedState与任务队列接收端,并 spawn 一个后台协程消费state::Task。 - 主函数调用网络层的
net::run,绑定到 0.0.0.0:8080 并进入 accept 循环。 - 每当有新连接,网络层克隆共享状态并为连接分配 ID,使用
state::State::incr_connections递增计数,然后为该连接tokio::spawn一个任务,交由协议层处理。 - 协议层在 protocol.rs 的
protocol::handle_connection中:- 读取字节流;EOF 时调用
state::State::decr_connections并结束。 - 将请求文本入队到任务通道(
state.task_tx.send(...)),供 main 的后台协程消费。 - 调用业务层
service::handle_request生成响应并写回客户端。
- 读取字节流;EOF 时调用
- 业务层在 service.rs 内实现简单命令:
- "PING" -> "PONG\n"
- "TIME" -> 当前秒级时间戳
- 其他 -> 回显
文件关系与调用链清晰分层:入口 main.rs -> 网络层 net.rs -> 协议层 protocol.rs -> 业务层 service.rs,共享状态由 state.rs 定义并在各层使用。
按阶段推进,每一步尽量可测可回滚:
-
协议层完善
- 设计明确的应用层协议(长度前缀 / 行分隔 / 二进制帧)。
- 引入帧编码/解码模块,避免粘包/拆包问题。
- 增加协议版本、错误码。
-
任务队列与并发模型优化
- 将当前简单
mpsc队列抽象为任务调度器模块:- 多个 worker 协程/线程消费任务。
- 根据请求类型路由到不同 worker 池。
- 设计共享状态的读写策略:
- 尽量使用无锁结构、
Atomic*。 - 必须加锁时采用细粒度
RwLock拆分数据域。
- 尽量使用无锁结构、
- 将当前简单
-
业务层分层与可测试性
- 将业务逻辑抽象为 trait(如
Service),方便单元测试与 mock。 - 建立清晰的 DTO / domain model,避免直接在协议层操作内部结构。
- 为核心业务写单元测试与集成测试。
- 将业务逻辑抽象为 trait(如
-
稳定性与压测
- 引入 metrics(如 Prometheus 导出):QPS、连接数、队列长度、错误率等。
- 使用
wrk/hey/tcpkali等工具做压测,目标达到并稳定超过$300\ \text{req/s}$ 。 - 在压测中观察:
- CPU / 内存 / 上下文切换;
- 队列积压情况;
- 长尾延迟。
-
资源管理与鲁棒性
- 增加连接超时、空闲连接回收。
- 实现优雅关闭(graceful shutdown),处理 SIGINT / SIGTERM。
- 针对 I/O 错误、解码错误、业务异常统一封装错误类型和日志规范。
-
可配置与可观测性
- 用配置文件或环境变量控制:
- 监听端口、worker 数量、队列大小;
- 日志级别。
- 集成结构化日志(traceId / span),便于分布式环境排障。
- 用配置文件或环境变量控制:
-
扩展与分布式
- 增加多实例部署支持(无状态 / 轻状态),配合负载均衡器。
- 如果需要跨节点共享状态,引入外部存储(Redis / 分布式 KV)。
当前这套最小骨架已经支持多线程运行、基本分层和线程安全队列
可以直接 cargo run,用 nc 127.0.0.1 8080 发送 PING / TIME 验证服务器行为。