Initial commit

This commit is contained in:
2026-06-30 15:14:37 +08:00
commit 15dab96872
311 changed files with 95639 additions and 0 deletions
+157
View File
@@ -0,0 +1,157 @@
# 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/TLSTURN 协议协商 + 建连,自包含)
│ ├── 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 进行中*