跳至主要内容

进程间通信

进程间通信 (IPC) 允许隔离的进程安全地进行通信,它是构建更复杂应用程序的关键。

Tauri 使用一种特殊的进程间通信方式,称为异步消息传递,其中进程交换使用某种简单数据表示序列化后的请求响应。对于任何有 Web 开发经验的人来说,消息传递应该听起来很熟悉,因为这种范例用于互联网上的客户端-服务器通信。

消息传递比共享内存或直接函数访问更安全,因为接收者可以自由地拒绝或丢弃请求。例如,如果 Tauri Core 进程确定请求具有恶意意图,它只会简单地丢弃请求,而不会执行相应的函数。

在下文中,我们将更详细地解释 Tauri 的两个 IPC 原语——EventsCommands

事件

事件是单向的、即发即忘的 IPC 消息,最适合用于通信生命周期事件和状态更改。与命令不同,事件可以由前端 Tauri Core 两者发出。

sequenceDiagram participant F as Frontend participant C as Tauri Core C-)F: 事件
图 1-2:从 Core 发送到前端的事件。

命令

Tauri 还提供了一个基于 IPC 消息的类似于外部函数接口的抽象1。主要 API,invoke,类似于浏览器的 fetch API,允许前端调用 Rust 函数,传递参数并接收数据。

由于此机制在底层使用类似JSON-RPC的协议来序列化请求和响应,因此所有参数和返回数据都必须能够序列化为 JSON。

sequenceDiagram participant F as Frontend participant C as Tauri Core F-)+C: IPC 请求 note over C: 执行计算,写入文件系统等 C-)-F: 响应
图 1-3:命令调用中涉及的 IPC 消息。

  1. 因为命令在底层仍然使用消息传递,所以它们不会像真正的 FFI 接口那样存在相同的安全隐患。