mcpField
U
understanding-tauri-process-model

understanding-tauri-process-model

github.com/dchuk开发36170 次安装40 周前更新
代码仓库

关于 understanding-tauri-process-model

面向 Tauri 应用开发者的架构指南,说明 Rust Core 与 WebView 进程如何协作,并重点介绍 IPC、多窗口、进程隔离和基于能力的安全控制。

主要功能

  1. 01Core 与 WebView 进程职责
  2. 02IPC 请求与响应流程
  3. 03多窗口管理
  4. 04进程隔离与故障限制
  5. 05基于能力的访问控制
  6. 06前后端安全实践

适用场景

  1. 01划分 Rust 与 WebView 的职责
  2. 02追踪前端到 Core 的 IPC
  3. 03在应用窗口间共享状态
  4. 04限制各窗口的权限

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dchuk/claude-code-tauri-skills --skill understanding-tauri-process-model

安装后在 Claude Code 中输入/understanding-tauri-process-model确认已加载。

详细介绍

Tauri 进程模型

Tauri 实现了类似 Electron 和现代 Web 浏览器的多进程架构。了解这一模型对于构建安全、高性能的 Tauri 应用至关重要。

架构概览

+------------------------------------------------------------------+
|                        TAURI APPLICATION                          |
+------------------------------------------------------------------+
|                                                                   |
|  +-----------------------------+                                  |
|  |       CORE PROCESS          |                                  |
|  |         (Rust)              |                                  |
|  |                             |                                  |
|  |  +----------------------+   |                                  |
|  |  | Window Manager       |   |                                  |
|  |  +----------------------+   |                                  |
|  |  | System Tray          |   |                                  |
|  |  +----------------------+   |                                  |
|  |  | Global State         |   |                                  |
|  |  +----------------------+   |                                  |
|  |  | IPC Router           |   |                                  |
|  |  +----------------------+   |                                  |
|  |  | OS Abstractions      |   |                                  |
|  +-------------+---------------+                                  |
|                |                                                  |
|                | IPC (Inter-Process Communication)                |
|                |                                                  |
|     +----------+----------+----------+                            |
|     |          |          |          |                            |
|     v          v          v          v                            |
|  +------+  +------+  +------+  +------+                           |
|  |WebView|  |WebView|  |WebView|  |WebView|                       |
|  |  #1   |  |  #2   |  |  #3   |  |  #N   |                       |
|  +------+  +------+  +------+  +------+                           |
|  | HTML |  | HTML |  | HTML |  | HTML |                           |
|  | CSS  |  | CSS  |  | CSS  |  | CSS  |                           |
|  | JS   |  | JS   |  | JS   |  | JS   |                           |
|  +------+  +------+  +------+  +------+                           |
|                                                                   |
+------------------------------------------------------------------+

核心进程

核心进程是应用的入口点和中央枢纽。它运行 Rust 代码,并独占访问操作系统功能。

职责
职责描述
窗口管理创建和协调应用窗口
系统集成管理系统托盘菜单和通知
IPC 路由处理所有进程间通信
全局状态管理应用级设置和数据库连接
OS 抽象提供跨平台 API
核心进程为何使用 Rust

核心进程使用 Rust,以获得内存安全保障。所有权系统可防止:

  • 空指针解引用
  • 缓冲区溢出
  • 数据竞争
  • 使用已释放内存的错误

这至关重要,因为核心进程拥有完整的系统访问权限。

+------------------------------------------+
|            CORE PROCESS                   |
|                                          |
|  Memory Safety via Rust Ownership:       |
|  - No null pointers                      |
|  - No buffer overflows                   |
|  - No data races                         |
|  - No use-after-free                     |
|                                          |
|  Full OS Access:                         |
|  - File system                           |
|  - Network                               |
|  - System APIs                           |
|  - Hardware interfaces                   |
+------------------------------------------+

WebView 进程

WebView 进程使用操作系统的原生 WebView 库来渲染用户界面。

特定于平台的 WebView
+------------------+------------------+------------------+
|     WINDOWS      |      MACOS       |      LINUX       |
+------------------+------------------+------------------+
|                  |                  |                  |
|  Microsoft Edge  |    WKWebView     |    webkitgtk     |
|    WebView2      |                  |                  |
|                  |                  |                  |
|  Chromium-based  |  Safari engine   |  WebKit engine   |
|                  |                  |                  |
+------------------+------------------+------------------+
         |                  |                  |
         +------------------+------------------+
                           |
                    Dynamic Linking
                    (Not bundled)
                           |
                    Smaller executables
主要特征
  1. 动态链接:WebView 库在运行时链接,而非打包在应用中
  2. Web 技术:执行 HTML、CSS 和 JavaScript
  3. 框架支持:支持 React、Vue、Svelte、Solid 等
  4. 隔离:每个 WebView 都在独立的进程空间中运行

进程通信(IPC)

进程间的所有通信都通过核心进程进行。

+----------------+                              +----------------+
|   WebView A    |                              |   WebView B    |
|                |                              |                |
|  invoke()  ----+---->+----------------+<------+---- invoke()   |
|                |     |  CORE PROCESS  |       |                |
|  <---- listen  |<----+                +------>|  listen ---->  |
|                |     |  - Validates   |       |                |
+----------------+     |  - Routes      |       +----------------+
                       |  - Filters     |
                       |  - Transforms  |
                       +----------------+
                              |
                              v
                       +----------------+
                       |   OS / System  |
                       |   Resources    |
                       +----------------+
IPC 流程
  1. WebView 使用命令名称和负载调用 invoke()
  2. 核心进程接收消息
  3. 核心进程验证并处理请求
  4. 核心进程可与 OS 资源交互
  5. 核心进程将响应发送回 WebView
示例:基本 IPC

前端(JavaScript)

import { invoke } from '@tauri-apps/api/core';

// Call a Rust command
const result = await invoke('greet', { name: 'World' });

后端(Rust)

#[tauri::command]
fn greet(name: &str) -> String {
    format!("Hello, {}!", name)
}

多窗口处理

单个核心进程管理多个 WebView 进程。

                    +-------------------+
                    |   CORE PROCESS    |
                    |                   |
                    |  Shared State:    |
                    |  - User session   |
                    |  - App config     |
                    |  - DB connection  |
                    +-------------------+
                           /|\
                          / | \
                         /  |  \
                        /   |   \
                       /    |    \
                      v     v     v
               +------+ +------+ +------+
               |Main  | |Settings| |About|
               |Window| |Window | |Window|
               +------+ +------+ +------+
窗口管理模式

创建窗口

use tauri::Manager;

#[tauri::command]
fn open_settings(app: tauri::AppHandle) {
    tauri::WebviewWindowBuilder::new(
        &app,
        "settings",
        tauri::WebviewUrl::App("settings.html".into())
    )
    .title("Settings")
    .build()
    .unwrap();
}

跨窗口通信

use tauri::Manager;

#[tauri::command]
fn broadcast_update(app: tauri::AppHandle, data: String) {
    // Emit to all windows
    app.emit("data-updated", data).unwrap();
}

窗口专属事件

use tauri::Manager;

#[tauri::command]
fn notify_window(app: tauri::AppHandle, window_label: String, data: String) {
    if let Some(window) = app.get_webview_window(&window_label) {
        window.emit("notification", data).unwrap();
    }
}

进程隔离与安全

最小权限原则

“如果你请园丁来修剪树篱,你会给他花园的钥匙。但你不会把房子的钥匙也交给他。”

+------------------------------------------------------------------+
|                     SECURITY BOUNDARIES                           |
+------------------------------------------------------------------+
|                                                                   |
|  +---------------------------+   +---------------------------+    |
|  |      CORE PROCESS         |   |     WEBVIEW PROCESS       |    |
|  |      (Trusted Zone)       |   |    (Untrusted Zone)       |    |
|  +---------------------------+   +---------------------------+    |
|  |                           |   |                           |    |
|  |  - File system access     |   |  - Render UI only         |    |
|  |  - Database connections   |   |  - User input handling    |    |
|  |  - Network requests       |   |  - Display data           |    |
|  |  - Crypto operations      |   |  - Call allowed commands  |    |
|  |  - Secrets management     |   |                           |    |
|  |  - Business logic         |   |  NO DIRECT ACCESS TO:     |    |
|  |                           |   |  - File system            |    |
|  |                           |   |  - Network (direct)       |    |
|  |                           |   |  - System APIs            |    |
|  +---------------------------+   +---------------------------+    |
|                                                                   |
+------------------------------------------------------------------+
进程隔离的安全优势
优势描述
崩溃隔离一个进程发生故障不会导致整个应用崩溃
状态恢复可独立重启失效的进程
减少攻击面被攻陷的 WebView 具有有限的功能
资源保护敏感数据保留在核心进程中
安全最佳实践

前端(WebView)

  1. 清理所有用户输入
  2. 绝不处理机密信息
  3. 将业务逻辑交由核心进程处理
  4. 实施内容安全策略(CSP)

后端(核心进程)

  1. 验证所有 IPC 输入
  2. 使用功能权限系统限制命令
  3. 对每个窗口应用最小权限原则
基于功能权限的安全

Tauri 使用功能权限系统来控制每个窗口可以访问的内容。

+------------------+     +------------------+     +------------------+
|   Main Window    |     | Settings Window  |     |  Viewer Window   |
+------------------+     +------------------+     +------------------+
| Capabilities:    |     | Capabilities:    |     | Capabilities:    |
| - read_file      |     | - read_config    |     | - read_file      |
| - write_file     |     | - write_config   |     | (read only)      |
| - network        |     |                  |     |                  |
| - notifications  |     |                  |     |                  |
+------------------+     +------------------+     +------------------+

示例:功能权限配置

{
  "identifier": "main-capability",
  "description": "Capability for the main window",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "fs:read-files",
    "fs:write-files",
    "http:default"
  ]
}

进程生命周期

+------------------------------------------------------------------+
|                      APPLICATION LIFECYCLE                        |
+------------------------------------------------------------------+
|                                                                   |
|  1. App Launch                                                    |
|     +------------------+                                          |
|     | Core Process     |  <-- Starts first                        |
|     | Initializes      |                                          |
|     +------------------+                                          |
|              |                                                    |
|              v                                                    |
|  2. Window Creation                                               |
|     +------------------+                                          |
|     | WebView Process  |  <-- Core creates WebViews               |
|     | Spawned          |                                          |
|     +------------------+                                          |
|              |                                                    |
|              v                                                    |
|  3. Running                                                       |
|     +--------+    IPC    +----------+                             |
|     | Core   |<--------->| WebViews |                             |
|     +--------+           +----------+                             |
|              |                                                    |
|              v                                                    |
|  4. Shutdown                                                      |
|     +------------------+                                          |
|     | WebViews close   |  <-- WebViews terminate first            |
|     | Core cleans up   |  <-- Core process exits last             |
|     +------------------+                                          |
|                                                                   |
+------------------------------------------------------------------+

总结

方面Core 进程WebView 进程
语言RustJavaScript/TypeScript
数量每个应用一个每个应用一个或多个
操作系统访问权限完全访问无(仅通过 IPC)
角色后端、编排UI 渲染
安全性可信不可信
崩溃影响应用终止窗口关闭

Tauri 进程模型通过严格隔离可信的 Core 进程与可能存在漏洞的 WebView 进程,为构建桌面应用提供了安全基础。所有敏感操作都应在 Core 进程中实现,而 WebView 仅作为展示层。

评论

支持 Markdown