天天看點

Electron 程序間通訊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,每日更新技術幹貨!
Electron 程式間通訊Electron 程式間通訊