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,每日更新技術乾貨!

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