Rust in Everything
基于 tauri 2.12.5

全景

这一部分先回答「tauri 在 webview 和 Rust 之间加了什么」,再把启动主线和调用主线各从头到尾走一遍,后面各章都从这里出发。两个走读页都用同一个隐藏窗口的实验应用,打开 tracing feature,每一步打出时间和线程名。

  1. tauri 解决什么问题:README 里的「tiny, blazingly fast binaries」落在哪:系统 webview、自定义 scheme 提供页面、自定义 scheme 承载 IPC;分层图和 ACL 卡在 IPC 入口的位置;和 Electron、dioxus-desktop、直接用 wry 各差在哪;实验确认进程里没有一个网络套接字,WebKit 另起了三个辅助进程。
  2. 一次启动:启动主线逐步走一遍:build 只建事件循环、不建窗口,窗口在 Ready 时于 applicationDidFinishLaunching 里建好,再轮到用户的 setup;四段初始化脚本按顺序挂出 __TAURI_INTERNALS__ 的 11 个属性;tauri://localhost 在主线程上收到、在 tokio 线程上取资源。
  3. 一次 invoke:调用主线逐步走一遍:两个随机回调 id、fetch POST ipc://localhost/<cmd>、parse_invoke_request、on_message 的 invoke key 和 ACL、同步命令在主线程而 async 命令在 tokio 线程;JS 和 Rust 两侧看到的头逐个对照;CSP 拦下 fetch 后悄悄退回 postMessage。
flowchart TB
  why["tauri 解决什么问题"] --> launch["一次启动"]
  why --> invokepg["一次 invoke"]
  launch --> build["02 编译期"]
  launch --> rt["03 运行时"]
  launch --> app["04 应用与管理器"]
  launch --> wv["05 窗口与协议"]
  invokepg --> ipc["06 IPC"]
  invokepg --> sec["07 安全"]

💬 关联讨论

发起讨论
加载中...