主进程和渲染进程通信
2024年12月17日...大约 2 分钟
主进程和渲染进程通信
在多进程的应用中,进程之间的通信是必不可少的。
进程间通信,英语叫做 interprocess communication,简称叫做 IPC。这个 IPC 进程通信机制是由操作系统所提供的一种机制,允许应用中不同的进程之间进行一个交流。

在 Electron 中,我们需要关注两类进程间的通信:
- 主进程和渲染进程之间的通信
- 渲染进程彼此之间的通信
在 Electron 中,已经为我们提供了对应的模块 ipcMain 和 ipcRenderer 来实现这两类进程之间的通信。
ipcMain模块
- ipcMain.on(channel, listener)
- 这个很明显是一个监听事件,on 方法监听 channel 频道所触发的事件
- listener 是一个回调函数,当监听的频道有新消息抵达时,会执行该回调函数
- listener(event, args...)
- event 是一个事件对象
- args 是一个参数列表
- listener(event, args...)
- ipcMain.once(channel, listener):和上面 on 的区别在于 once 只会监听一次
- ipcMain.removeListener(channel, listener):移除 on 方法所绑定的事件监听。
具体可以参阅:https://www.electronjs.org/docs/latest/api/ipc-main
ipcRenderer模块
基本上和上面的主进程非常的相似。
ipcRenderer.on(channel, listener)
- 和上面主进程的 on 方法用法一样
ipcRenderer.send(channel, ...args)
- 此方法用于向主进程对应的 channel 频道发送消息。
- 注意 send 方法传递的内容是被序列化了的,所以并非所有数据类型都支持
这两个模块实际上是基于 Node.js 里面 EventEmitter 模块实现的。例如:
// index.js
const event = require("./event");
// 触发事件
event.emit("some_event");
// event.js
const EventEmitter = require("events").EventEmitter;
const event = new EventEmitter();
// 监听自定义事件
event.on("some_event", () => {
console.log("事件已触发");
});
module.exports = event;
Powered by Waline v3.3.2