electron进程间通信

介绍

在 Electron 中, GUI 相关的模块原生 API(Native APIs) (如 dialog、menu 等) 仅在主进程中可用,在渲染进程中不可用。

罗列了以下几种方式

正式开始

实现进程的通信通常都会使用ipcMain 和 ipcRenderer 这两个模块

  • ipcMain 在主进程中使用,用来处理渲染进程(网页)发送的同步和异步的信息
  • ipcRenderer 在渲染进程中使用,用来发送同步或异步的信息给主进程,也可以用来接收主进程的回复信息。

ipcMain(主进程)

const {ipcMain} = require('electron')
// 监听渲染程序发来的事件
ipcMain.on('sendMainMessage', (event, data) => {
	console.log(data) //data是渲染层发给主进程的数据
	//sendSycn同步发送  发送同步消息将会阻塞整个渲染进程,你应该避免使用这种方式 - 除非你知道你在做什么。
    event.sender.send('sendRenderMessage', '监听到渲染层的数据后回应数据"我是主进程返回的值"')
})

渲染进程

const { ipcRenderer} = require('electron') 
// 发送事件给主进程
ipcRenderer.send('sendMainMessage', '传输给主进程的数据')  
// 监听主进程发来的事件
ipcRenderer.on('sendRenderMessage', (event, data) => {
    console.log(data) // 我是主进程返回的值
})

注意

切忌用 ipc 传递大量的数据,会有很大的性能问题,严重会让你整个应用卡住。

remote使用

上面已经说过GUI 相关的模块原生 API(Native APIs) (如 dialog、menu 等) 仅在主进程中可用,在渲染进程中不可用。那么必须使用 remote 模块。这样就可以调用 main 进程的方法,而不用显示发送进程间的信息。

注意:不一样的electron版本,remote获取方式不同,由于自己安装的是v13.6.6版本,所以就拿该版本举例


const { dialog } = require('electron').remote
dialog.showMessageBox({type: 'info', message: '在渲染进程中直接使用主进程的模块'})

渲染进程间的通信

大多情况下,我们大多习惯使用如 localStorage、sessionStorage 等实现通信,同时Electron给提供了渲染进程通讯的IPC机制。

主进程


global.sharedObject = {
    someProperty: '默认数据'
}

渲染进程

  • A页面

require('electron').remote.getGlobal('sharedObject').someProperty = 'A页面修改后的数据'

  • B页面

console.log(require('electron').remote.getGlobal('sharedObject').someProperty) // A页面修改后的数据

总结一下:实现进程之间的通信,可以发现使用 remote 模块是最简单的,渲染进程代码中可以直接使用 electron 模块

后续继续跟进其他版本的remote的使用,以上借鉴了https://www.jianshu.com/p/4dff80a333a8

源码请点击

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大笨熊不熊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值