跳至主要內容

跨程序通訊

跨程序通訊(IPC)允許隔離的程序安全地通訊,是建構更複雜應用程式的關鍵。

Tauri 使用一種稱為非同步訊息傳遞的特殊跨程序通訊方式,其中程序交換使用一些簡單資料表示法序列化後的要求回應。訊息傳遞對於任何具有網頁開發經驗的人來說應該很熟悉,因為此範例用於網際網路上的客戶端伺服器通訊。

訊息傳遞是一種比共用記憶體或直接函式存取更安全的技術,因為接收方可以自由地拒絕或捨棄請求。例如,如果 Tauri Core 處理程序判定請求具有惡意,它會直接捨棄請求,絕不會執行對應的函式。

以下,我們將詳細說明 Tauri 的兩個 IPC 原語 - 事件命令

事件

事件是發射後即忘的單向 IPC 訊息,最適合用來傳達生命週期事件和狀態變更。與 命令 不同,事件可以由前端 Tauri Core 發射。

sequenceDiagram participant F as 前端 participant C as Tauri Core C-)F: 事件
圖 1-2:從核心傳送至前端的事件。

命令

Tauri 也提供一個類似於 外部函式介面 的抽象,建立在 IPC 訊息之上1。主要 API invoke 類似於瀏覽器的 fetch API,允許前端呼叫 Rust 函式、傳遞引數並接收資料。

由於此機制在底層使用類似 JSON-RPC 的協定來序列化請求和回應,因此所有引數和回傳資料都必須能序列化為 JSON。

sequenceDiagram participant F as 前端 participant C as Tauri Core F-)+C: IPC 請求 note over C: 執行運算、寫入檔案系統等 C-)-F: 回應
圖 1-3:命令呼叫中涉及的 IPC 訊息。

  1. 由於命令在底層仍使用訊息傳遞,因此它們不會與真正的 FFI 介面共享相同的安全性陷阱。