主题
miniRPC —— 从零到一实现一个 Go RPC 框架
miniRPC 是一个从零实现的轻量级 RPC 框架,以渐进式、模块化的方式逐章构建,涵盖 RPC 框架的核心组件。
项目结构
miniRPC/
├── doc/ # 整体架构设计与技术调研
│ ├── architecture.md # 架构总览、组件关系、线程模型
│ └── tech-research.md# 技术选型调研(序列化/传输/服务发现/负载均衡)
├── codec/ # Day 1: 消息编解码(Gob / Json / Protobuf)
├── service.go # Day 4: 服务注册与反射调用
├── server.go # Day 2: 服务端核心(含 Day 5 HTTP、Day 7 超时)
├── client.go # Day 3: 客户端核心(含 Day 5 HTTP、Day 7 超时)
├── debug.go # Day 5: 调试页面
├── xclient/ # Day 6: 服务发现与负载均衡
├── middleware/ # Day 8: 中间件与拦截器
├── day1-codec/ # 第一章:文档与示例
├── day2-server/ # 第二章:文档与示例
├── day3-client/ # 第三章:文档与示例
├── day4-service/ # 第四章:文档与示例
├── day5-http/ # 第五章:文档与示例
├── day6-discovery/ # 第六章:文档与示例
├── day7-timeout/ # 第七章:文档与示例
└── day8-middleware/ # 第八章:文档与示例设计文档(建议先读)
学习路线
| 章节 | 主题 | 核心内容 |
|---|---|---|
| Day 1 | 消息编解码 | 协议设计、Codec 接口、Gob/Json/Protobuf 三种实现 |
| Day 2 | 服务端 | TCP 监听、并发处理、请求生命周期 |
| Day 3 | 客户端 | 异步/同步调用、并发安全、连接管理 |
| Day 4 | 服务注册 | 反射、方法发现、类型校验 |
| Day 5 | HTTP 支持 | HTTP CONNECT、协议切换、调试页面 |
| Day 6 | 服务发现 | 负载均衡、XClient、Broadcast |
| Day 7 | 超时容错 | 连接超时、调用超时、处理超时 |
| Day 8 | 中间件 | 拦截器链、日志、Panic 恢复 |
快速开始
bash
# 运行任意章节的示例
go run ./day2-server/example/
go run ./day6-discovery/example/
# 运行全部测试
go test ./...
# 运行 benchmark(对比三种 Codec)
go test -bench=. -benchmem ./codec/
# 查看测试覆盖率
go test -cover ./...技术栈
- Go 1.21+
- 序列化:
encoding/gob、encoding/json、google.golang.org/protobuf - 传输:
net(TCP)、net/http(HTTP CONNECT) - 无任何第三方 RPC 框架依赖