158 lines
5.6 KiB
Markdown
158 lines
5.6 KiB
Markdown
# Core 模块重构完成报告 - v2.2.0
|
||
|
||
## ✅ 已完成的重构(2026-03-24)
|
||
|
||
### Phase 1: 删除 client/ 目录 ✅
|
||
|
||
**理由**:不制造不必要的目录层级
|
||
|
||
```
|
||
❌ 旧架构:connect/ + client/(过度分离)
|
||
✅ 新架构:只有 connect/(按"是否被多处调用"组织)
|
||
```
|
||
|
||
**操作**:
|
||
- ✅ 删除 `core/client/` 整个目录
|
||
- ✅ 原 `client/stun_client.go` → 功能整合到 `connect/stun.go`(待创建)
|
||
- ✅ 原 `client/turn_client.go` → 功能整合到 `connect/turn.go`(待完善)
|
||
- ✅ 原 `client/ws_client.go` → 功能整合到 `connect/ws.go`(待完善)
|
||
|
||
---
|
||
|
||
### Phase 2: 创建 proto/ 目录 ✅
|
||
|
||
**理由**:gRPC 接口定义和实现应该放在一起
|
||
|
||
**操作**:
|
||
- ✅ 创建 `core/proto/` 目录
|
||
- ✅ 移动 `core_service_server.go` → `proto/core_service_server.go`
|
||
- ✅ 创建 `proto/core.proto` - gRPC 接口定义
|
||
|
||
**文件内容**:
|
||
```protobuf
|
||
// core.proto
|
||
service CoreService {
|
||
rpc CreateCore(CreateCoreRequest) returns (CreateCoreResponse);
|
||
rpc Start(StartRequest) returns (StartResponse);
|
||
rpc Stop(StopRequest) returns (StopResponse);
|
||
rpc Bind(BindRequest) returns (BindResponse);
|
||
rpc GetStatus(GetStatusRequest) returns (GetStatusResponse);
|
||
rpc UpdateConfig(UpdateConfigRequest) returns (UpdateConfigResponse);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📁 最终目录结构(与新版 README 1-91 行一致)
|
||
|
||
```
|
||
core/
|
||
├── core.go ✅ Core 主实例
|
||
├── engine.go ✅ Core 引擎(新建)
|
||
├── bind.go ✅ 连接管理器(重命名自 connection_manager.go)
|
||
├── metrics.go ✅ 监控指标(新建)
|
||
│
|
||
├── connect/ ✅ 建连层:所有和"怎么连"有关的代码
|
||
│ ├── strategy.go ✅ 9 层策略调度 + 自动切换 + 恢复探测
|
||
│ ├── stun.go ⏳ STUN 协议:候选地址采集(被 direct.go 和 ice.go 调用)
|
||
│ ├── direct.go ✅ Layer 1: Direct-UDP(调用 stun.go 获取候选,然后打洞)
|
||
│ ├── fake_tcp.go ✅ Layer 2: FakeTCP
|
||
│ ├── real_tcp.go ✅ Layer 3: RealTCP
|
||
│ ├── turn.go ⏳ Layer 4-6: TURN-UDP/TCP/TLS(TURN 协议协商 + 建连,自包含)
|
||
│ ├── turn_quic.go ✅ Layer 5: TURN-QUIC(独立文件,私有扩展)
|
||
│ ├── ice.go ✅ Layer 7: ICE + WebRTC(调用 stun.go 收集候选)
|
||
│ └── ws.go ⏳ Layer 8: WS/WSS(握手 + 帧收发 + 身份标识,自包含)
|
||
│
|
||
├── transport/ ✅ 传输层:用连接转发数据
|
||
│ ├── bind_port.go ✅ 本地端口 Bind + 路由标识映射表
|
||
│ ├── relay.go ✅ Read/Write 循环 + 链路生命周期
|
||
│ └── wgparse.go ✅ WG 包解析(新建)
|
||
│
|
||
├── pool/ ✅ 连接池
|
||
│ └── connpool.go ✅ 连接池(新建)
|
||
│
|
||
└── proto/ ✅ gRPC 接口定义和实现
|
||
├── core.proto ✅ gRPC 服务定义(新建)
|
||
└── core_service_server.go ✅ gRPC 服务实现(移动)
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 对比新旧架构
|
||
|
||
| 维度 | 旧架构 | 新架构 | 改进 |
|
||
|------|--------|--------|------|
|
||
| **目录层级** | connect/ + client/ + proto/分散 | connect/ + proto/集中 | ⭐⭐⭐ 更简洁 |
|
||
| **文件组织原则** | 按"是否返回 net.Conn"分离 | 按"是否被多处调用"分离 | ⭐⭐⭐ 更合理 |
|
||
| **stun 实现** | `client/stun_client.go` 独立 | `connect/stun.go` 独立(被多处调用) | ⭐⭐⭐ 实事求是 |
|
||
| **turn 实现** | `client/turn_client.go` + `connect/turn.go` 分裂 | `connect/turn.go` 自包含 | ⭐⭐⭐ 避免冗余 |
|
||
| **ws 实现** | `client/ws_client.go` + `connect/ws.go` 分裂 | `connect/ws.go` 自包含 | ⭐⭐⭐ 避免冗余 |
|
||
| **proto 位置** | 分散在根目录 | 集中在 `core/proto/` | ⭐⭐⭐ 职责清晰 |
|
||
|
||
---
|
||
|
||
## ⏳ 待完成的工作
|
||
|
||
### P0 - 阻塞编译
|
||
|
||
1. **创建 connect/stun.go** ⏳
|
||
```go
|
||
// connect/stun.go
|
||
package connect
|
||
|
||
func DiscoverAddress(stunServer string) (*net.UDPAddr, error)
|
||
func CollectCandidates(servers []string) []string
|
||
```
|
||
|
||
2. **更新 direct.go** ⏳
|
||
- 改为调用新的 `stun.go`
|
||
|
||
3. **更新 ice.go** ⏳
|
||
- 改为调用新的 `stun.go`
|
||
|
||
4. **修复 core.go** ⏳
|
||
- 更新 import 路径
|
||
- 修复对旧 API 的引用
|
||
|
||
---
|
||
|
||
### P1 - 后续完善
|
||
|
||
5. **完善 connect/turn.go** ⏳
|
||
- 添加完整的 TURN 协议实现(Allocate → CreatePermission → ChannelBind)
|
||
- 支持 UDP/TCP/TLS 三种模式
|
||
|
||
6. **完善 connect/ws.go** ⏳
|
||
- 添加完整的 WS 协议实现(Handshake → Identify → Frame Encode/Decode)
|
||
- 支持 WS/WSS 两种模式
|
||
|
||
7. **生成 proto 代码** ⏳
|
||
```bash
|
||
protoc --go_out=. --go-grpc_out=. core/proto/core.proto
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 重构收益
|
||
|
||
### 代码减少
|
||
- **删除**:`client/` 目录(3 个文件,~26KB)
|
||
- **新增**:`proto/` 目录(2 个文件,~6KB)
|
||
- **净减少**:~20KB 代码
|
||
|
||
### 架构优化
|
||
1. **减少目录层级**:从 3 层 → 2 层
|
||
2. **消除过度抽象**:client/ 不再作为独立目录存在
|
||
3. **实事求是**:按"是否被多处调用"组织文件,而非教条式的分层
|
||
|
||
### 可维护性提升
|
||
1. **更直观**:新人更容易理解代码组织方式
|
||
2. **更少跳跃**:相关逻辑集中在同一个文件
|
||
3. **更灵活**:不被"分层"束缚,按需组织
|
||
|
||
---
|
||
|
||
*完成时间:2026-03-24 02:15*
|
||
*版本:v2.2.0*
|
||
*状态:⏳ Phase 1-2 完成,Phase 3 进行中*
|