【2025】Electron 基础二(进程模型三大核心)

Electron 基础 (多进程架构解析)

源代码仓库:
Github仓库【electron_git】

1、Electron 多进程都是什么

  1. 主进程 (Main Process)
  2. 渲染进程 (Renderer Process)
  3. 预加载脚本 (Preload Script)
打个比方:公司里的三个关键角色

假设你要开一家公司(开发一个桌面应用),这个公司需要三个核心角色:

  1. 董事长(主进程):整个公司只有一个董事长,他掌握所有核心权力:

    • ✅ 决定公司什么时候开门/关门(应用启动退出)
    • ✅ 招聘新员工(创建新窗口)
    • ✅ 直接联系政府机关(调用系统级API)
    • ✅ 保管公司保险柜钥匙(访问本地文件)
  2. 普通员工(渲染进程):每个员工负责一个窗口的接待工作:

    • 🖥️ 每人只负责一个办事窗口(每个窗口对应一个渲染进程)
    • 🎨 专门搞装修设计(负责界面UI展示)
    • 🔒 不能直接进保险库(默认不能访问敏感功能)
    • 💬 有事得打报告请示(通过IPC通信找董事长)
  3. 秘书(预加载脚本):董事长安排在员工身边的助手:

    • 📞 帮员工转达需求给董事长(桥接通信)
    • 🛡️ 盯着员工别乱来(安全隔离)
    • 📋 只给员工有限的申请表(暴露有限API)

实际工作流程举例:用户点击"打开文件"按钮

步骤1:员工收到用户请求
// renderer层
// 员工(渲染进程)的日常工作
function handleOpenFileClick() {// 不能直接操作文件,得找秘书帮忙window.API.sendRequest('open-file')
}
步骤2:秘书转达需求
// preload层
// 秘书(预加载脚本)的工作手册
contextBridge.exposeInMainWorld('API', {sendRequest: (type) => {ipcRenderer.send('to-boss', type) // 打电话给董事长}
})
步骤3: 董事长处理重要事务
// main层
// 董事长(主进程)的权限
ipcMain.on('to-boss', (event, type) => {if (type === 'open-file') {const file = dialog.showOpenDialogSync() // 直接调用系统对话框event.sender.send('reply', file) // 把结果传回去}
})
步骤4:秘书把结果转交员工
// 员工收到回复后的操作
ipcRenderer.on('reply', (event, file) => {document.getElementById('file-path').textContent = file
})

2、Electron 进程如何通信

Electron IPC通信:使用 invoke/handle 和 send/on 进行通信

一、invoke/handle vs send/on 场景详解

特性invoke/handlesend/on
通信方向双向(需要响应)单向/双向(需手动回复)
返回值处理自动返回Promise需手动监听回复事件
错误处理自动传递reject错误需额外错误事件处理
代码简洁度⭐⭐⭐⭐⭐⭐
典型使用场景获取数据、执行操作并等待结果通知事件、状态推送、实时消息

二、什么时候该用 invoke/handle?

场景1:需要等待操作结果的异步任务
// 渲染进程
const result = await ipcRenderer.invoke('read-file', '/path/to/file')// 主进程
ipcMain.handle('read-file', async (event, path) => {return fs.promises.readFile(path, 'utf-8')
})
场景2:需要明确知道操作是否成功
// 自动错误传递
try {await ipcRenderer.invoke('dangerous-operation')
} catch (error) {showErrorDialog(error.message)
}
场景3:链式异步操作
// 顺序执行多个依赖操作
const user = await ipc.invoke('get-user', id)
const orders = await ipc.invoke('get-orders', user.id)
const analytics = await ipc.invoke('generate-report', orders)

三、什么时候该用 send/on?

场景1:单向通知不需要响应
// 渲染进程:不需要等待回复
ipcRenderer.send('window-minimize')// 主进程
ipcMain.on('window-minimize', () => {mainWindow.minimize()
})
场景2:主进程主动推送消息
// 主进程:检测到新版本时广播
mainWindow.webContents.send('update-available', {version: '2.0.0',releaseNotes: '...'
})// 渲染进程
ipcRenderer.on('update-available', (event, info) => {showUpdateDialog(info)
})
场景3:多个渲染进程协同工作
// 主进程:中转消息
ipcMain.on('chat-message', (event, msg) => {// 广播给所有窗口BrowserWindow.getAllWindows().forEach(win => {win.webContents.send('new-message', msg)})
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/32039.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity Shader编程】之基础纹理

一,单张纹理 好的,用户想学习Unity Shader中的单张纹理章节。我需要根据提供的搜索结果来整理相关内容。首先,查看搜索结果中的相关部分,特别是‌、‌、‌、‌、‌这几条,因为它们提到了基础纹理、单张纹理的实现方法…

QT系列教程(18) MVC结构之QItemSelectionModel模型介绍

视频教程 https://www.bilibili.com/video/BV1FP4y1z75U/?vd_source8be9e83424c2ed2c9b2a3ed1d01385e9 QItemSelectionModel Qt的MVC结构支持多个View共享同一个model,包括该model的选中状态等。我们可以通过设置QItemSelectionModel,来更改View的选…

全网最详解答OSPF基础

目录 此图片为思科的(有些地方不对) 总结状态机: OSPF的工作过程: 结构突变 1 突然新增一个网段--触发更新 2 突然断开一个网段--触发更新 3 无法通信---dead time OSPF的配置 ​编辑条件匹配: ​编辑1&…

Flink深入浅出之05:CEP复杂事件

深入浅出Flink-第五天 1️⃣深入理解Flink的CEP的机制和使用,Flink实时处理应用案例。 4️⃣ 要点 📖 1. Flink的复杂事件处理机制CEP 1.1 CEP概念 CEP是Complex Event Processing三个单词的缩写,表示复杂事件处理,是一种基于…

AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

背景 字节跳动正式发布中国首个AI原生集成开发环境工具(AI IDE)——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro,支持切换满血版DeepSeek R1&V3, 可以帮助各阶段开发者与AI流畅协作,更快、更高质量地完…

基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析

跨境电商的背景以及痛点 根据Statista数据,2025年全球跨境电商市场规模预计达6.57万亿美元,年增长率保持在12.5% 。随着平台规则趋严(如亚马逊封店潮),更多卖家选择自建独立站,2024年独立站占比已达35%。A…

神经网络探秘:原理、架构与实战案例

神经网络探秘:原理、架构与实战案例 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。https://www.captainbed.cn/ccc 在人工智能的浪潮中,神经网络作为核心驱动力之一…

Web网页制作(静态网页):千年之恋

一、是用的PyCharm来写的代码 二、代码中所用到的知识点(无 js) 这段HTML代码展示了一个简单的注册页面,包含了多个HTML元素和CSS样式的应用。 这段HTML代码展示了一个典型的注册页面,包含了常见的HTML元素和表单控件。通过CSS样…

win32汇编环境,对话框中使用树形视图示例四

;运行效果,当点击张辽时,展示张辽的图像 ;当点击曹仁时,展示曹仁的图像 ;win32汇编环境,对话框中使用树形视图示例四 ;当点击树形视图treeview控件中的某项时,展示某些功能。这里展示的是当点到某个将领时,显示某个将领的图像 ;直接抄进RadAsm可编译运行。重要部分加备注。…

基于SpringBoot的“体育购物商城”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“体育购物商城”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体模块设计 前台用户登录界面 系统首页界面…

c#面试题整理9

1.遍历xml文档 2.解释一下这段 String s new String("xyz"); 这段在C#平台中,编译失败 3.说明一下抽象类 抽象类可以有构造函数 抽象类不能是静态和密封的类,密封的类表示无法继承,抽象类本身就不可实例化,加不好…

第85期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

如何安全处置旧设备?

每年,数百万台旧设备因老化、故障或被新产品取代而被丢弃,这些设备上存储的数据可能带来安全风险。 如果设备没有被正确删除数据,这些数据往往仍可被恢复。因此,安全处置旧设备至关重要。 旧设备可能包含的敏感数据 旧设备中可能…

【物联网-WIFI】

物联网-WIFI ■ ESP32-C3-模块简介■ ESP32-C3-■ ESP32-C3-■ WIFI-模组■ WIFI-■ WIFI- ■ ESP32-C3-模块简介 ■ ESP32-C3- ■ ESP32-C3- ■ WIFI-模组 ■ WIFI- ■ WIFI-

Linux——system V共享内存

共享内存区是最快的IPC(进程内通信)形式,不再通过执行进入内核的系统调用来传递彼此的数据 1.共享内存的原理 IPC通信的本质是让不同的进程先看到同一份资源,然后再进行通信,所以想要通过共享内存进行通信,那么第一步一定是让两个…

爱普生可编程晶振SG-8200CJ特性与应用

在高速发展的电子技术领域,时钟源作为电子系统的“心脏”,其性能直接影响设备的稳定性与可靠性。爱普生SG-8200CJ可编程晶振凭借其优秀的频率精度、低抖动性能及广泛的环境适应性,正成为众多领域的得力之选,为各类设备的高效运行与…

基于YOLO11深度学习的运动品牌LOGO检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

小程序 wxml 语法 —— 36 wxml 语法 - setData() 修改数据

在小程序中修改数据不推荐通过赋值的方式进行修改,通过赋值的方式修改数据无法改变页面的数据; 在微信小程序中,推荐调用 setData() 方式进行修改,setData() 方法接收对象作为参数,key 是需要修改的数据,v…

Linux 生成静态库

文章目录 前提小知识生成和使用.a库操作步骤 在应用程序中,有一些公共的代码需要反复使用的,可以把这些代码制作成“库文件”;在链接的步骤中,可以让链接器在“库文件”提取到我们需要使用到的代码,复制到生成的可执行…

校验pytorch是否支持显卡GPU 不支持卸载并安装支持版本

1.输入如下命令 pythonimport torchtorch.__version__torch.cuda.is_available() // 输出False 就是不支持如下图 2.可以看到我电脑目前是不支持的 我们现在开始卸载 exit() //先退出pip uninstall torch //开始卸载这就卸载完成了 3.我们开始安装 nvidia-smi.exe //运行…