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