跳转至

架构概览

Rover 采用 Electron + sing-box 架构,分为应用层、内核层和系统服务层。

整体架构

Rover 应用 (Electron + React + TypeScript)
├── 看板 / 订阅 / 代理
├── 策略 / 规则集 / 连接
└── DNS 策略 / 设置 / 日志
        │ IPC 通信 (Electron 主进程)
┌─────────────────────────────────────────────────────────────┐
│                        主进程 (Node.js)                      │
│                                                             │
│   ┌─────────────────────────────────────────────────────┐   │
│   │                                                     │   │
│   │              路径 1: 本地模式 (Local)                 │   │
│   │                                                     │   │
│   │   Rover ──────────────► sing-box (子进程)            │   │
│   │           直接启动      (普通用户权限)                │   │
│   │                                                     │   │
│   └─────────────────────────────────────────────────────┘   │
│                              ▲                              │
│                              │                              │
│   ┌──────────────────────────┼──────────────────────────┐   │
│   │                          │      路径 2: 服务模式      │   │
│   │                          │      (Service)             │   │
│   │                          │                            │   │
│   │   Rover ────────────────►│ RoverService (系统服务)    │   │
│   │       HTTP over          │  └── 启动/停止 sing-box    │   │
│   │   Socket / Named Pipe    │      (管理员权限)           │   │
│   │                          │                            │   │
│   └──────────────────────────┴──────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

关键组件

组件 技术栈 职责
Rover 应用 Electron + React 用户界面、数据管理、配置生成
sing-box 内核 Go 代理转发、流量分流、DNS 解析
RoverService Go (系统服务) sing-box 进程管理、本地 DoH DNS 服务器、特权文件操作
JSON 数据文件 Node.js fs 存储策略规则、DNS 策略、设置
sing-box API HTTP 运行时状态查询、连接管理

数据流

  1. 用户在界面操作(添加规则、切换节点等)
  2. 操作写入 JSON 数据文件
  3. 配置生成器从 JSON 数据读取,生成 sing-box 配置
  4. 内核管理器重启 sing-box 加载新配置
  5. sing-box 按配置处理流量

为什么使用 JSON 文件?

Rover 使用 JSON 文件作为本地数据存储,因为: - 格式简单直观,易于调试和手动编辑 - 无需额外依赖,Node.js 原生支持 - 人类可读,方便用户备份和迁移 - 适合单用户桌面应用的轻量存储需求

通信机制

通信方式 方向 用途
Electron IPC 渲染进程 → 主进程 界面操作传递到后端
HTTP API 主进程 ↔ sing-box (9090) 状态查询、连接管理
HTTP/DoH 主进程 ↔ RoverService DNS 查询转发
HTTP API 主进程 ↔ RoverService sing-box 进程管理 (启动/停止/重启)