Skip to content

双进程架构

灵动桌面框架基于 Tauri 2.x 的双进程模型,前端和后端在不同进程中运行,通过 IPC 通信。

架构图

┌─────────────────────────────────────────────────────┐
│                   应用窗口                            │
│  ┌──────────────────┐    IPC    ┌────────────────┐  │
│  │  WebView 进程     │ ←──────→ │  Rust Core 进程 │  │
│  │                  │  invoke   │                │  │
│  │  ● React 19 UI   │  listen   │  ● Commands    │  │
│  │  ● Ant Design 6  │  emit     │  ● Services    │  │
│  │  ● TailwindCSS 4 │          │  ● Database    │  │
│  │  ● Zustand 状态   │          │  ● 文件系统     │  │
│  │  ● React Router  │          │  ● 系统 API     │  │
│  └──────────────────┘          └────────────────┘  │
└─────────────────────────────────────────────────────┘

WebView 进程(前端)

  • 负责 UI 渲染和用户交互
  • 使用系统原生 WebView(非 Chromium),内存占用极低
  • 技术栈:React 19 + TypeScript 5.8 + Ant Design 6

前端可以做的事

  • 渲染界面、响应用户操作
  • 管理 UI 状态(Zustand)
  • 调用后端 Command(通过 invoke
  • 监听后端事件(通过 listen

前端不应该做的事

  • ❌ 直接访问文件系统
  • ❌ 直接调用外部 API(应通过 Rust 代理)
  • ❌ 执行耗时计算(应委托给 Rust)

Rust Core 进程(后端)

  • 负责 系统级操作和业务逻辑
  • 原生 Rust 代码,性能极高
  • 采用三层架构:Command → Service → Database

后端可以做的事

  • 数据库读写
  • 文件系统操作
  • 网络请求
  • 系统级 API 调用
  • 计算密集型任务

IPC 通信机制

invoke — 前端调用后端

typescript
// 前端调用
import { invoke } from '@tauri-apps/api/core'
const result = await invoke<string>('greet', { name: '灵动' })
rust
// 后端处理
#[tauri::command]
fn greet(name: &str) -> String {
    format!("你好, {}!", name)
}

emit / listen — 事件通信

rust
// 后端发送事件
app_handle.emit("download-progress", payload)?;
typescript
// 前端监听事件
import { listen } from '@tauri-apps/api/event'
listen('download-progress', (event) => {
  console.log('进度:', event.payload)
})

数据流向

用户操作 → React 组件 → API 封装层 → invoke()

                                   Rust Command

                                   Service 层

                                   Database 层

                                   返回 Result

React 组件 ← 更新 UI ← Promise resolve ←┘

为什么是双进程

  1. 安全隔离 — 前端无法直接访问系统资源,必须通过权限控制的 Command
  2. 性能 — Rust 后端处理重计算,前端保持流畅
  3. 稳定性 — 前端崩溃不影响后端数据安全

基于 Tauri 2.x 构建的企业级桌面应用开发框架