进程间的 IPC 通信
使用 ipcMain 和 ipcRenderer,在主进程与 React 渲染进程之间安全地发送消息
进程间的 IPC 通信 是 CoddyKit 上的免费 React Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
ipcMain.handle:请求-响应模式
ipcMain.handle 会在主进程中注册一个命名通道,用于响应来自渲染进程的请求。它接受一个异步处理函数,其返回值会成为渲染进程中 Promise 的解析值,因此非常适合执行读取文件或查询数据库等操作。
ipcRenderer.invoke:调用主进程
ipcRenderer.invoke 会在命名通道上发送消息,并返回一个 Promise;该 Promise 会解析为主进程处理程序的返回值。这样便形成了简洁的异步请求-响应模式,可在预加载脚本和 React 组件中自然地与 async/await 配合使用。
通过 contextBridge 暴露 invoke
预加载脚本会封装 ipcRenderer.invoke 调用,并通过 contextBridge 暴露它们。例如:api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath)。渲染进程调用 window.api.readFile(path) 后会得到一个 Promise——整洁且处于沙箱保护之中。
为什么渲染进程从不导入 ipcRenderer
启用 contextIsolation 后,渲染进程无法 require('electron') 或直接导入 ipcRenderer——该模块根本不可用。所有 IPC 通信都必须经过预加载脚本通过 contextBridge 暴露的接口。这是有意设计的:它可以防止 XSS 攻击获得 IPC 访问权限。
ipcMain.on:即发即弃消息
ipcMain.on 会监听通过 ipcRenderer.send 发送的单向消息(而不是 invoke)。这里没有自动的响应通道——这种模式适用于渲染进程不需要回复的通知或命令,例如记录事件或触发原生通知。
将数据从主进程推送到渲染进程
主进程可以使用 webContents.send('channel-name', data) 向渲染进程推送数据。这是主进程主动发起通信的主要方式——例如,将文件系统监视事件或原生菜单操作转发给 React 用户界面。
ipcRenderer.on:在预加载脚本中监听
在预加载脚本中,ipcRenderer.on('update', callback) 会为来自主进程的推送消息注册监听器。回调会接收事件以及主进程发送的任何数据,然后您再通过 contextBridge 暴露的函数将其传递给渲染进程。
通过 contextBridge 暴露事件监听器
处理推送事件的一种清晰模式是:api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data))。React 组件通过调用 window.api.onUpdate(setData) 进行订阅;当主进程推送新数据时,回调会更新状态。
清理:移除事件监听器
每个 ipcRenderer.on 监听器在不再需要时都必须移除,以防止内存泄漏和重复回调。预加载函数应返回一个清理函数(例如,() => ipcRenderer.removeListener('update', callback)),React 会在 useEffect 的清理返回函数中调用它。
安全性:验证 IPC 输入
来自渲染进程的 IPC 输入在主进程处理程序中应被视为不可信数据。请始终验证文件路径(防止路径遍历攻击)、清理查询参数,并检查发送方的来源是否符合预期。切勿暴露通用的 eval 或 exec IPC 通道。
组织 IPC 通道
随着应用不断扩大,请使用命名空间约定来组织 IPC 通道,例如:'fs:read-file'、'db:query'、'window:minimize'。请将通道名称放在共享的常量文件中,并由 main.js 和预加载脚本同时导入,以防止拼写错误并使重构更加安全。
ipcMain.handle 的返回值
ipcMain.handle 处理程序返回的值会发生什么?
课程回顾
IPC 是 Electron 通信的骨干。ipcMain.handle 和 ipcRenderer.invoke 构成基于 Promise 的请求—响应对,用于处理由渲染进程发起的操作。对于由主进程发起的推送,webContents.send 和 ipcRenderer.on 协同工作。渲染进程中的所有 IPC 都必须通过预加载脚本的 contextBridge 路由,并且应始终清理监听器,以防止内存泄漏。
常见问题解答
「进程间的 IPC 通信」课时是免费的吗?
是的 — 「进程间的 IPC 通信」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「进程间的 IPC 通信」这节课中我会学到什么?
使用 ipcMain 和 ipcRenderer,在主进程与 React 渲染进程之间安全地发送消息 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「进程间的 IPC 通信」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。