Electron 进程间通讯

Electron 进程间通讯

运行机制:

主进程

处理原生应用逻辑

main脚本的进程被称为主进程,一个Electron应用总是有且只有一个主进程

职责

  • 创建渲染进程(可多个)

  • 控制应用生命周期 (启动、退出app以及对app的一些事件监听)

  • 调用系统底层功能、调用原生资源

可调用接口

  • NodeJS api

  • Electron提供的主进程api(包括一些系统功能和Electron附加功能)

渲染进程

负责页面渲染

由于Electron使用了Chromium来展示Web页面,所以Chromium的多进程架构也被使用到。每个Electron中的Web页面运行在它自己的渲染进程中。

主进程使用BrowserWindow实例创建页面。每个BrowerWindow实例都是在自己的渲染进程里运行页面。当一个BrowserWindow实例被销毁后。相应的渲染进程也会被终止。

渲染进程就是一个浏览器窗口,它能存在多个并且相互独立,不过和浏览器不同的是,它能调用Node API

职责

  • 用HTML和CSS渲染界面

  • 用JS做界面交互

可调用接口

  • DOM API

  • NodeJS API

  • Electron提供的渲染进程API

进程间通讯:

官方文档

主进程收发信息

详细参考ipcMain

  • 主进程接收渲染进程发送的信息

ipcMain.on('message',(e,msg)=>{
    console.log(msg);
});
  • 主进程(主窗口)发送信息给渲染进程

mainWindow.webContents.send('message', { time: new Date() });

渲染进程收发信息

可通过ipcRenderer发送或接收

  • 渲染进程接收主进程发送的信息

ipcRenderer.on('message', (event, text) => {
  console.log(text);
});
  • 渲染进程发送信息给主进程

 ipcRenderer.send('message', { name: 'katte' })

remote模块:

参考官方提供remote

  • 在渲染进程中创建其他窗口(渲染进程)

本来新的渲染进程只有主进程才可以创建,不过有了remote模块 我们也可以在一个渲染进程中创建另一个渲染进程;

const {BrowserWindow} = require('electron').remote;
let wind = new BrowserWindow({
    width:800,
    height:600
});
win.loadUrl('https://github.com');

注意:官方还说了一些不可用的场景,和remote的生命周期;

个人理解

官方虽然提供了2种方式来实现主进程和渲染进程的通讯,但是我觉得还是有它们不同的应用场景的作为一个刚接触electron不久的小白,大胆总结一下

  • 传递信息直接用ipc模型

  • 需要主进程处理的用remote

更多精彩内容欢迎关注公众号:Electron,每日更新技术干货!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章