🏗️ 整体架构
Tauri 采用前后端分离架构,核心由三个部分组成:
前端层
React/Vue/Svelte
JavaScript/TypeScript
⬇️ IPC
WebView 层 (WRY)
WKWebView
WebView2
WebKitGTK
⬇️
Rust 后端
Tao
Core
Plugins
⬇️
操作系统
macOS
Windows
Linux
🪟 Tao - 窗口管理
Tao 是跨平台窗口管理库,提供统一的窗口创建和管理 API。
| 平台 | 后端 |
|---|---|
| macOS | Cocoa / AppKit |
| Windows | Win32 |
| Linux | GTK |
| Android | JNI |
| iOS | UIKit |
主要功能
- 窗口创建、销毁、状态管理
- 事件循环和事件处理
- 菜单栏、系统托盘
- 窗口装饰、全屏支持
🌐 WRY - WebView 渲染
WRY 是统一的 WebView 接口库,封装各平台的 WebView 实现。
| 平台 | WebView | 引擎 |
|---|---|---|
| macOS / iOS | WKWebView | WebKit |
| Windows | WebView2 | Chromium |
| Linux | WebKitGTK | WebKit |
| Android | WebView | Chromium |
优势
- 使用系统自带 WebView,无需打包渲染引擎
- 应用体积小,启动快
- 自动获得系统安全更新
📡 IPC 通信机制
Tauri 使用 JSON-RPC 风格的 IPC 机制:
typescript
// 前端调用 Rust 命令
import { invoke } from '@tauri-apps/api/core';
const result = await invoke('my_command', { arg1: 'value' });
rust
// Rust 后端定义命令
#[tauri::command]
fn my_command(arg1: String) -> Result {
Ok(format!("Received: {}", arg1))
}
通信方式
- invoke:前端调用 Rust 命令,支持返回值
- 事件:双向事件通信
- 状态:Rust 端状态管理
🔄 进程模型
Tauri 采用多进程架构:
主进程
Rust 后端,处理系统调用
WebView 进程
渲染前端界面
辅助进程
插件、更新器等