编程开发
C/C++
关闭 VS 的符合模式
typedef 与 define
GO
环境安装及修改路径
go 基础
解决go get 下载github项目慢或无法下载的问题
ASCII 码一览表
桌面应用开发 electron
electron ipc通信有啥用
const { app, BrowserWindow, ipcMain, dialog } = require('electron') 的解析
electron 常用模块介绍
Electron 项目解析
前端
python
植入获取当前python脚本所用到的依赖
本文档使用 MrDoc 发布
-
+
首页
electron ipc通信有啥用
## 介绍与功能 - Electron 的 **IPC(Inter Process Communication,进程间通信)** 是主进程(Main Process)和渲染进程(Render Process)之间传递数据和执行操作的核心机制。由于 Electron 的架构基于多进程模型(主进程负责管理应用,渲染进程负责展示界面),**IPC 通信的作用是打破进程隔离,实现功能协同**。以下是它的典型应用场景: 1. **主进程与渲染进程的协作** - **窗口管理**:渲染进程(如页面)通过 IPC 通知主进程创建新窗口、调整窗口大小或关闭窗口。 ```js // 渲染进程 const { ipcRenderer } = require('electron'); ipcRenderer.send('create-new-window', { width: 800, height: 600 }); // 主进程 ipcMain.on('create-new-window', (event, config) => { new BrowserWindow(config).loadURL('...'); }); ``` - **系统级操作**:渲染进程无法直接调用操作系统 API(如文件读写、系统托盘、菜单栏等),需通过 IPC 通知主进程执行。 ```js // 渲染进程点击按钮保存文件 ipcRenderer.send('save-file', data); // 主进程处理保存 ipcMain.on('save-file', (event, data) => { fs.writeFileSync('path.txt', data); }); ``` 2. **数据传递与状态同步** - **实时数据更新**:主进程监听系统事件(如电池状态、网络变化),通过 IPC 将数据推送到渲染进程更新 UI。 ```js // 主进程监听网络变化 require('electron').net.online ? 'online' : 'offline'; ipcMain.on('check-network', (event) => { event.reply('network-status', isOnline); }); ``` - **双向通信**:使用 ipcRenderer.invoke 和 ipcMain.handle 实现异步请求/响应模式。 ```js // 渲染进程请求数据 const result = await ipcRenderer.invoke('fetch-data', 'query'); // 主进程处理请求 ipcMain.handle('fetch-data', async (event, query) => { return await db.query(query); }); ``` 3. **多窗口通信** - **窗口间数据传递**:通过主进程作为中转,协调多个渲染进程之间的通信。 ```js // 窗口 A 发送消息 ipcRenderer.send('send-to-windowB', data); // 主进程转发到窗口 B ipcMain.on('send-to-windowB', (event, data) => { windowB.webContents.send('receive-from-windowA', data); }); ``` 4. **安全性与权限控制** - **限制危险操作**:渲染进程无法直接访问 fs、shell 等模块,需通过 IPC 由主进程代理,确保操作可控。 ```js // 渲染进程请求打开外部链接 ipcRenderer.send('open-url', 'https://example.com'); // 主进程验证后执行 ipcMain.on('open-url', (event, url) => { if (isSafe(url)) require('electron').shell.openExternal(url); }); ``` 5. **与系统原生功能集成** - **通知、菜单、快捷键**:渲染进程触发系统通知或自定义菜单项,主进程通过 IPC 响应。 ```js // 渲染进程触发通知 ipcRenderer.send('show-notification', 'New Message'); // 主进程显示系统通知 ipcMain.on('show-notification', (event, message) => { new Notification({ title: '提示', body: message }).show(); }); ``` ## IPC 的两种通信方式 - **单向通信**:ipcRenderer.send / ipcMain.on - **双向通信**:ipcRenderer.invoke + ipcMain.handle(推荐) ## 总结 - Electron IPC 的核心价值是打通主进程与渲染进程的能力边界: - **主进程**:负责系统级操作、底层 API、进程管理。 - 渲染进程:专注于 UI 渲染和用户交互。 - 通过 IPC 通信,两者协同实现完整的桌面应用功能,同时保障了应用的安全性和性能隔离。
别卷了
2025年3月26日 14:38
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码