electron进程间通讯

你得了解:

进程(process):

一个进程是计算机程序执行中的一个实例。 Electron 应用同时使用了 main 进程和一个或者多个 renderer 进程来运行多个程序。

在 Node.js 和 Electron 里面,每个运行的进程包含一个 process 对象。 这个对象作为一个全局的提供当前进程的相关信息和操作方法。 作为一个全局变量,它在应用内能够不用 require() 来随时取到。

主进程(main process):

主进程,通常是指 main.js 文件,是每个 Electron 应用的入口文件。 控制着整个应用的生命周期,从打开到关闭。 它也管理着系统原生元素比如菜单,菜单栏,Dock 栏,托盘等。 主进程负责创建 APP 的每一个渲染进程。 包含了全功能的 Node API。

应用的主进程定义在 package.json 中的 main 属性中。 当您运行 electron . 时 Electron 便会知道需要运行哪个文件。

在Chromium中,此进程被称为“浏览器进程”。 Electron 中这样称呼是为了不与渲染进程混淆。

渲染进程(renderer process):

渲染进程是应用中的浏览器窗口。 与主进程不同,渲染进程可能同时存在多个,同时,每一个渲染进程都运行与独立的进程中。 渲染进程也可以隐藏。

正文:

IPC

IPC 代表进程间通信。 Electron使用IPC在主进程和渲染器进程之间发送 序列化的JSON消息。

ipcMain

进程:主进程

从主进程到渲染进程的异步通信

ipcMain 是一个 EventEmitter 的实例。 当在主进程中使用时,它处理从渲染器进程(网页)发送出来的异步和同步信息。 从渲染器进程发送的消息将被发送到该模块。

ipcRenderer

进程: Renderer

从渲染器进程到主进程的异步通信

ipcRenderer 是一个 EventEmitter 的实例。 你可以使用它提供的一些方法从渲染进程 (web 页面) 发送同步或异步的消息到主进程。 也可以接收主进程回复的消息。

渲染进程间的直接通讯不被允许的,虽然ipcRenderer 是一个 EventEmitter 的实例,可以自己emit自己on

webContents

进程:主进程

webContents 是一个 EventEmitter。 负责渲染和控制网页, 是 BrowserWindow 对象的一个属性。

主进程与主进程

1.ipcMain.emit 和 ipcMain.on

因为ipcMain 是一个 EventEmitter 的实例,可以自己emit给自己on

const { ipcMain } = require("electron");


//发事件
ipcMain.emit(customEventName, params);


//监听事件
ipcMain.on(customEventName, (event, params) => {});

2.mainWin.webContents.emit 和 mainWin.webContents.on

因为 webContents 是一个 EventEmitter 的实例,可以自己emit给自己on

注意: 使用 webContents.send 在此场景下,webContents.on 监听不到,webContents.send 不等同于 webContents.emit

const { ipcMain, BrowserWindow } = require("electron");


app.on("ready", () => {
    const mainWin = new BrowserWindow();


    //发事件
    mainWin.webContents.emit(customEventName, params);


    //监听事件
    mainWin.webContents.on(customEventName, (event, params) => {});
});

主进程与渲染进程

假设 mainWinBrowserWindow 的一个实例,mainWin.send == mainWin.webContents.send

主进程 -> 渲染进程

const { ipcMain, BrowserWindow } = require("electron");


app.on("ready", () => {
    const mainWin = new BrowserWindow();


    //发事件
    mainWin.webContents.send(customEventName, params);
    //或者mainWin.send
});


// 渲染进程,如render.js
const { ipcRenderer } = require("electron");
ipcRenderer.on(eventName, handler);

渲染进程 -> 主进程

//发
ipcRenderer.send(customEventName, params);


//监听
ipcMain.on(customEventName, (event, params) => {});

渲染进程与渲染进程

渲染进程1 -> 渲染进程2 的实现:

  • 渲染进程1 -> 主进程 -> 渲染进程2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天弈初心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值