前言
由于自己在使用 electron 开发一个类似微信的桌面客户端App,开发这个App的目的纯粹是为了总结一下自己对于 electron 的积累总结吧,先贴出项目的源码地址:github.com/1111mp/elec… 。目前整个项目的基础架构都实现差不多了,包括整个应用的数据持久化(使用的是 sqlite,因为我比较喜欢用 sequelize)、多语言、主题设置、多窗口之间的通信方式 和 带有底部上滑动画的弹窗通知 等,总得来说项目的质量还可以吧,有兴趣的同学可以提前去看一下代码。第一次写这种文章,望谅解。然后废话不多说,直奔主题吧。
主/渲染进程
electron 的主进程和渲染进程:ipcMain, ipcRenderer
我想这部分应该不用介绍了,就贴出官方文档链接了,不了解的同学可以先去了解一下,然后再接着往下看。
通信方式的实现
基于主/渲染进程的事件收发机制来实现多窗口之间的通信
这种通信方式的原理就是基于主进程 ipcMain 的 on 方法向主进程注册一个事件,然后在窗口页面中通过 send 方法向渲染进程发送事件,然后触发到主进程中之前注册过的事件,事件名都是各自方法的第一个参数,用起来其实就跟 EventBus 一样,以下是官方的例子:
// 在主进程中.
const { ipcMain } = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.reply('asynchronous-reply', 'pong')
})
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.returnValue = 'pong'
})
//在渲染器进程 (网页) 中。
const { ipcRenderer } = require('electron')
console.log(ipcRenderer.sendSync('synchronous-message', 'ping')) // prints "pong"
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg) // prints "pong"
})
ipcRenderer.send('asynchronous-message', '