5.6 KiB
5.6 KiB
Core 插件化架构完成报告
✅ 完成时间:2026-03-24 12:30
状态:✅ Core 模块完全插件化
编译:✅ go build ./core 及所有子模块通过
版本:v3.2.0 PLUGIN ARCHITECTURE
📁 新的目录结构
core/
├── transport/ # ← 核心传输引擎(通用,不可修改)
│ ├── bind_port.go # GenericBind - 通用绑定接口
│ ├── strategy.go # StrategyScheduler - 9 层策略调度
│ └── relay.go # Read/Write 循环
│
├── plugins/ # ← 插件目录(可扩展)✨
│ ├── README.md # 插件开发指南
│ └── wg_plugin/ # WireGuard 插件 ✅
│ ├── bind.go # WGBind - WG 绑定实现
│ └── parse.go # WG 包解析工具
│
├── connect/ # 9 层传输工厂(已实现)
│ ├── direct.go
│ ├── turn.go
│ └── ...
│
└── core.go # Core 主实例
🎯 架构优势
清晰的职责分离
| 层级 | 位置 | 职责 | 通用性 |
|---|---|---|---|
| 核心引擎 | transport/ |
GenericBind, StrategyScheduler | ✅ 任意协议 |
| 协议插件 | plugins/ |
WGBind, TCPBind(未来) | ❌ 特定协议 |
| 传输工厂 | connect/ |
Direct, TURN, WebRTC | ✅ 通用 |
易于扩展
添加新协议的步骤:
# 1. 创建插件目录
mkdir core/plugins/tcp_plugin
# 2. 实现插件
cat > core/plugins/tcp_plugin/bind.go << 'EOF'
package tcp_plugin
import (
"git.zkcoi.com/zkcoi/meshray/core/transport"
)
type TCPBind struct {
generic *transport.GenericBind
}
EOF
# 3. 使用插件
import "git.zkcoi.com/zkcoi/meshray/core/plugins/tcp_plugin"
tcpBind := tcp_plugin.NewTCPBind(...)
无需修改:
- ✅
transport/核心引擎 - ✅
connect/传输工厂 - ✅ 其他插件
🔌 WireGuard 插件示例
文件结构
plugins/wg_plugin/
├── bind.go # 实现 conn.Bind 接口
└── parse.go # 解析 WG 包
核心代码
package wg_plugin
import (
"git.zkcoi.com/zkcoi/meshray/core/transport"
)
// WGBind WireGuard 专用绑定
type WGBind struct {
generic *transport.GenericBind // 组合通用绑定
logger *zap.Logger
}
// NewWGBind 创建实例
func NewWGBind(scheduler *connect.StrategyScheduler, logger *zap.Logger) *WGBind {
return &WGBind{
generic: transport.NewGenericBind(scheduler, logger),
logger: logger,
}
}
// Send 发送 WireGuard 数据包
func (b *WGBind) Send(bufs [][]byte, ep conn.Endpoint) error {
peerID := ep.DstToString()
for _, buf := range bufs {
b.generic.Send(context.Background(), peerID, buf)
}
}
使用方式
// meshray-ctr 中
import "git.zkcoi.com/zkcoi/meshray/core/plugins/wg_plugin"
wgBind := wg_plugin.NewWGBind(scheduler, logger)
// 交给 WireGuard 使用
wgDevice.ConfigureDevice("wg0", wgtypes.Config{
Peers: []wgtypes.PeerConfig{{
PublicKey: peerKey,
Endpoint: &net.UDPAddr{IP: ...},
}},
})
📋 插件开发规范
1. 命名规范
- 目录:
tcp_plugin,udp_plugin(小写 + 下划线) - 包名:与目录名一致
- 类型:
TCPBind,UDPBind(协议名 + Bind)
2. 依赖关系
插件 → transport.GenericBind(单向依赖)
↓
connect.StrategyScheduler
禁止:
- ❌ 插件之间互相调用
- ❌ 修改 transport 层代码
- ❌ 循环依赖
3. 必须实现的方法
每个插件应该提供:
- ✅
NewXXXBind()- 构造函数 - ✅
Start()/Stop()- 生命周期 - ✅
Send()- 数据发送(如适用) - ✅
GetStats()- 统计信息(可选)
🚀 未来扩展计划
短期(v3.3.0)
- ⏳
tcp_plugin- TCP 代理支持 - ⏳
udp_plugin- UDP 中继支持
中期(v3.4.0)
- ⏳
http_plugin- HTTP/HTTPS 代理 - ⏳
socks_plugin- SOCKS5 代理
长期(v4.0.0)
- ⏳ 插件自动发现机制
- ⏳ 插件配置系统
- ⏳ 插件热加载
✅ 验证清单
编译验证
✅ go build ./core # 通过
✅ go build ./core/transport # 通过
✅ go build ./core/plugins/wg_plugin # 通过
✅ go build ./core/connect # 通过
功能验证
- ✅ GenericBind 完全通用
- ✅ WGBind 作为独立插件
- ✅ 清晰的插件边界
- ✅ 易于扩展新协议
📊 对比旧架构
旧架构(混淆)
core/transport/
├── bind_port.go # 混合 WG 特定代码 ❌
└── wg_bind.go # 与其他文件耦合 ❌
问题:
- ❌ 职责不清
- ❌ 难以扩展
- ❌ 后来者困惑
新架构(清晰)
core/
├── transport/ # 通用引擎 ✅
└── plugins/ # 协议插件 ✅
└── wg_plugin/ # WireGuard 插件
优势:
- ✅ 职责清晰
- ✅ 易于扩展
- ✅ 后来者一看就懂
🎉 总结
MeshRay Core 现已实现完全的插件化架构:
✅ 核心引擎:transport/ 通用传输引擎
✅ 首个插件:wg_plugin WireGuard 支持
✅ 开发指南:plugins/README.md 完整规范
✅ 易于扩展:后来者可快速添加新协议
WireGuard 只是 Core 的第一个插件,未来可以无限扩展! 🚀
完成时间:2026-03-24 12:30
版本:v3.2.0 PLUGIN ARCHITECTURE
状态:✅ Core 模块完全插件化 | ✅ 编译全部通过