Files
Meshray-Manager/docs/Core 插件化架构完成报告.md
2026-06-30 15:14:37 +08:00

5.6 KiB
Raw Permalink Blame History

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 模块完全插件化 | 编译全部通过