进程间通信
进程间通信 (IPC) 允许隔离的进程安全地进行通信,它是构建更复杂应用程序的关键。
Tauri 使用一种特殊的进程间通信方式,称为异步消息传递,其中进程交换使用某种简单数据表示序列化后的请求和响应。对于任何有 Web 开发经验的人来说,消息传递应该听起来很熟悉,因为这种范例用于互联网上的客户端-服务器通信。
消息传递比共享内存或直接函数访问更安全,因为接收者可以自由地拒绝或丢弃请求。例如,如果 Tauri Core 进程确定请求具有恶意意图,它只会简单地丢弃请求,而不会执行相应的函数。
在下文中,我们将更详细地解释 Tauri 的两个 IPC 原语——Events
和 Commands
。
事件
事件是单向的、即发即忘的 IPC 消息,最适合用于通信生命周期事件和状态更改。与命令不同,事件可以由前端和 Tauri Core 两者发出。
sequenceDiagram participant F as Frontend participant C as Tauri Core C-)F: 事件
命令
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: 响应
- 因为命令在底层仍然使用消息传递,所以它们不会像真正的 FFI 接口那样存在相同的安全隐患。↩