Clash Verge Rev 架构解析 | Tauri 2 与 mihomo sidecar 进程模型

clash-verge-rev 将 GUI 与代理内核拆为两个 OS 进程:Tauri 宿主负责窗口、托盘与配置持久化,mihomo 以 sidecar 方式运行。本文根据公开源码目录与运行时抓包,说明二者之间的调用链与常见故障点。对照版本:GitHub Release v2.0.2

Clash Verge Rev Tauri 2 架构示意图

Clash Verge Rev 仓库目录与职责划分

主仓库根目录下,src 为 React + TypeScript 前端,src-tauri 为 Rust 宿主。src-tauri/sidecar 或构建脚本会将对应平台的 mihomo 二进制打入安装包。前端不直接启动子进程,所有内核操作经 invoke('clash_*') 进入 Rust 层。

clash-verge-rev/
├── src/                 # React UI、订阅管理、设置页
├── src-tauri/
│   ├── src/core/        # 内核进程管理、配置读写
│   ├── src/cmd/         # Tauri command 暴露给前端
│   └── sidecar/         # 各平台 mihomo 二进制
└── package.json

sidecar 启动时序与超时策略

v2.0.2 将 sidecar 就绪等待从 8 秒延长至 15 秒,原因是部分机械硬盘环境写配置与加载 geo 数据库耗时超过旧阈值。启动顺序为:写 runtime config → spawn sidecar → 轮询 /version 直至 200 或超时。

进程存活检测

Rust 层维护 Child 句柄;若 sidecar 异常退出,托盘图标变为警告色并写日志到 ~/.config/clash-verge/logs。前端通过事件总线收到 clash-crash 后可提示用户重新启动内核。

验证命令与预期输出

sidecar 就绪后,在终端执行(secret 从设置页或运行时 config 读取):

curl -s -H "Authorization: Bearer YOUR_SECRET" http://127.0.0.1:9097/version
预期输出示例:
{"meta":true,"version":"v1.18.10"}
判定:HTTP 200 且 version 字段与设置页「内核信息」一致,即 sidecar 生命周期正常。

clash-api 转发与密钥管理

Verge Rev 在生成运行时配置时注入 external-controller: 127.0.0.1:9097 与随机 secret。前端测速、切换节点等操作由 Rust 代为签名请求,避免在 WebView 中暴露 Bearer token 给第三方脚本。

# 运行时 config 片段(由 Verge Rev 自动生成)
external-controller: 127.0.0.1:9097
secret: "随机字符串"
# 前端 invoke → Rust HTTP 客户端 → /proxies/xxx/delay

Profile 合并发生在哪一层

远程订阅拉取、本地 YAML 与 merge 补丁的合并逻辑在 Rust config 模块完成,合并结果写入 profiles.yaml 缓存后再生成 sidecar 使用的单文件 config。因此前端看到的「预览」与内核实际加载可能存在一次磁盘写入的延迟(通常 < 200ms)。

Tauri 2 迁移带来的边界变化

从 Tauri 1 升级后,插件注册方式改为 tauri::Builder 统一入口;WebView 默认使用系统内核(Windows 为 WebView2)。包体积较 Electron 方案减少约 60%,但要求 Windows 10 1809+ 预装或独立安装 WebView2 Runtime。

模块Tauri 1 时代Tauri 2 现状
命令注册宏分散集中 generate_handler
sidecar APIsidecar()ShellExt 新接口
构建cargo tauri build前端 Vite 5 并行

故障排查:托盘正常但 API 无响应

常见根因有三:① 端口 9097 被占用;② secret 与运行时 config 不一致(手动改过 YAML);③ 防火墙阻止回环地址。按下列顺序排查:

  1. netstat -ano | findstr 9097(Windows)或 lsof -i :9097(macOS/Linux)
  2. 设置页点击「重启内核」强制重新生成 secret
  3. 查看 logs 目录最新文件中的 listen tcp 错误

本专题边界说明(去重索引)

架构实现细节仅在本站展开。产品采购级能力边界见 hk-clashverge.com.cn 产品白皮书;Release 变更条目见 v2.0 发布说明;安装验收命令见 get-clash-verge 安装矩阵

延伸阅读 · 本站Windows wintun 权限链 → Windows 安装专题(本站独家深度)

下一篇:Windows 安装与 wintun 权限

继续阅读