您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Electron的原理是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在Electron應用中,GUI組件僅在主進程可用,在輔助進程中不可用。那如果想要在輔助進程中試用GUI組件,勢必需要和主進程進行通信。ipc模塊就是用來實現主進程和輔助進程之間的通信。在主進程中使用ipcMain模塊進行對輔助進程的通信進行控制和處理。而在輔助進程中,則使用ipcRenderer模塊,來向主進程發送消息或者接受主進程的回應。接下來我們來講講這兩個模塊是如何進行通信的。
在主進程中使用ipcMain模塊進行對輔助進程的通信進行控制和處理。ipcMain模塊是EventEmitter的實例。ipcMain模塊有四個監聽方法:
ipcMain.on(channel, listener)
解析:監聽事件channel,當新消息到達時,將執行監聽方法listener(event, args)。
ipcMain.once(channel, listener)
解析:為事件channel添加一個只執行一次的監聽方法listener。在第一次消息到大時會調用listener,執行完畢馬上刪除listener.
ipcMain.removeListenner(channel, listener)
解析:從特定的channel的監聽事件中刪除特定的listener監聽者。
ipcMain.removeAllListeners([channel])
解析:本方法可接受傳參channel,若傳參channel,則刪除特定channel的所有監聽者。若未進行傳參,則刪除所有監聽者。
我們需要將event對象傳遞給callback,event主要有兩個方法:同步回復消息和異步回復消息
event.returnValue
解析:當主進程需要向輔助進程回復同步消息,則可以使用該方法。
event.sender.send('消息')
解析:當主進程需要向輔助進程回復異步消息,則可以使用本方法。
我們還是拿昨天的項目來繼續用,我們來看看主進程和輔助進程之間如何進行通信的:
首先主進程我們說過了就是index.js文件,我們在里面使用ipcMain模塊對消息進行處理:
const ipcMain = require('electron').ipcMain;
ipcMain.on('test-message', function (event, arg) {
event.sender.send('test-reply', '這是主進程');
});
ipcMain.on('test-message', function (event, arg) {
event.returnValue = '這是主進程';
});
輔助進程目前只有一個index.html頁面,我們在里面使用ipcRenderer對消息進行處理
const ipcRenderer = require('electron').ipcRenderer;
console.log(ipcRenderer.sendSync('test-message', '這是輔助進程'));
ipcRenderer.on('test-reply', function(event, arg) {
console.log(arg);
});
ipcRenderer.send('test-message', '這是輔助進程');
我們使用electron .命令測試一下效果:
可以看到主進程成功進行通信了,那接下來我們來講講在輔助進程中ipcRenderer具體的使用方法吧。
輔助進程其實就相當于我們一個個的html文件,可以使用ipcRenderer來接受和發送消息以便與主進程進行交互。
ipcRenderer模塊用來監聽事件的有四個方法:
ipcRenderer.on(channel, listener)
ipcRenderer.once(channel, listener)
ipcRenderer.removeListenner(channel, listener)
ipcRenderer.removeAllListeners([channel])
這四個方法的含義和ipcMain一致,這里就不進行重復解釋了。發送消息ipcRenderer一樣有發送同步消息和發送異步消息兩個方法:
ipcRenderer.send(channel, args)
解析:輔助進程使用該方法向主進程發送異步消息。主進程使用ipcMain模塊對異步消息進行處理。
ipcRenderer.sendSync(channel, args)
解析:輔助進程使用該方法向主進程發送同步消息。主進程使用ipcMain模塊對同步消息進行處理然后通過event.returnValue進行相應消息給輔助進程。在這里我的建議是盡量少用同步消息,因為發送同步消息會阻塞整個頁面渲染進程,對于用戶體驗來說是非常糟糕的一件事情。
ipcRenderer其實還有一個方法用來發送消息:
ipcRenderer.sendToHost(channel, args)
關于Electron的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。