# 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 进行中*