进程间通信
进程间通信 (IPC) 允许隔离的进程安全地进行通信,是构建更复杂应用程序的关键。
Tauri 使用一种称为异步消息传递的特殊进程间通信方式,其中进程交换使用某种简单数据表示进行序列化的请求和响应。消息传递对于任何具有 Web 开发经验的人来说都应该很熟悉,因为此范例用于互联网上的客户端-服务器通信。
消息传递是一种比共享内存或直接函数访问更安全的技术,因为接收者可以自由地根据需要拒绝或丢弃请求。例如,如果 Tauri Core 进程确定某个请求是恶意的,它只会丢弃该请求,而不会执行相应的函数。
在以下内容中,我们将更详细地解释 Tauri 的两个 IPC 原语 - 事件
和命令
。
事件
事件是即发即忘的单向 IPC 消息,最适合用于传达生命周期事件和状态更改。与命令不同,事件可以由前端和Tauri Core 发出。
顺序图参与者 F 为前端参与者 C 为 Tauri Core C-)F:事件
命令
Tauri 还在 IPC 消息之上提供了一个类似于外来函数接口的抽象1。主要 API invoke
类似于浏览器的fetch
API,允许前端调用 Rust 函数、传递参数并接收数据。
由于此机制在底层使用类似于JSON-RPC的协议来序列化请求和响应,因此所有参数和返回数据都必须可序列化为 JSON。
sequenceDiagram 参与者 F 作为前端 参与者 C 作为 Tauri Core F-)+C: IPC 请求 C 上的注释:执行计算、写入文件系统等 C-)-F: 响应
- 由于命令在底层仍使用消息传递,因此它们不会与真正的 FFI 接口共享相同的安全缺陷。↩