跨程序通訊
跨程序通訊(IPC)允許隔離的程序安全地通訊,是建構更複雜應用程式的關鍵。
Tauri 使用一種稱為非同步訊息傳遞的特殊跨程序通訊方式,其中程序交換使用一些簡單資料表示法序列化後的要求和回應。訊息傳遞對於任何具有網頁開發經驗的人來說應該很熟悉,因為此範例用於網際網路上的客戶端伺服器通訊。
訊息傳遞是一種比共用記憶體或直接函式存取更安全的技術,因為接收方可以自由地拒絕或捨棄請求。例如,如果 Tauri Core 處理程序判定請求具有惡意,它會直接捨棄請求,絕不會執行對應的函式。
以下,我們將詳細說明 Tauri 的兩個 IPC 原語 - 事件
和 命令
。
事件
事件是發射後即忘的單向 IPC 訊息,最適合用來傳達生命週期事件和狀態變更。與 命令 不同,事件可以由前端和 Tauri Core 發射。
sequenceDiagram participant F as 前端 participant C as Tauri Core C-)F: 事件
命令
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: 回應
- 由於命令在底層仍使用訊息傳遞,因此它們不會與真正的 FFI 介面共享相同的安全性陷阱。↩