Electronメインプロセスとレンダリングプロセスの通信方式
2521 ワード
Electron .
ipcMainとipcRendererの使用
//
const {ipcMain} = require('electron')
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.sender.send('asynchronous-reply', 'pong')
})
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg) // prints "ping"
event.returnValue = 'pong'
})
要点:
ipcRenderer
を介してメインプロセスにメッセージipcMain
を介してレンダリングプロセスからのメッセージをリスニングする.メッセージの種類に応じて異なる動作event
とarg
の2つのパラメータを含む.arg
のオブジェクトには、レンダリングプロセスの伝達パラメータが保存する.event.sender
のオブジェクトによって、メインプロセスは直接レンダリングプロセスに戻るメッセージを送信することができる.メインプロセスが実行する同期方法であれば、event.returnValue
を設定ことにより、戻り値を取得することもできる.electronを使用します.remoteモジュール
レンダープロセスでは、
const {remote} = require('electron')
によりremoteオブジェクトを取得することができる.このオブジェクトにより、レンダリングプロセスがメインプロセスのモジュールにアクセスすることができる.const {BrowserWindow} = require('electron').remote;
let win = new BrowserWindow({width: 800, height: 600});
win.loadURL('https://xxx.com');
同様に、
remote
オブジェクトからapp
オブジェクトにアクセスすることもできます.これにより、メインプロセスでelectron.app
オブジェクトにマウントする方法にアクセスできます.//
const { app } = require('electron');
const utils = require('./utils');
app.utils = utils; // Electron app
//
const { remote } = require('electron');
function() {
// remote.app.utils utils 。
remote.app.utils.test();
}
要点:
remote
オブジェクトにより、プロセス間メッセージを送信することなく通信できます.実際には、リモート・オブジェクトを呼び出す方法、関数、またはリモート・コンストラクション関数によって新しいオブジェクトを作成します.実際には同期されたプロセス間メッセージが送信されます(公式文書ではJAVA
のRMI
に類似しています).つまり、remote
メソッドは、送信プロセス間のメッセージを明示的に書く必要がない方法にすぎません.remote
モジュールによってBrowserWindow
が作成された例では、レンダリングプロセスで作成されたBrowserWindow
オブジェクトは、実際にはレンダリングプロセスではなく、プライマリ・インプリメンテーションにすぎません.スレッドはBrowserWindow
オブジェクトを作成し、対応するリモートオブジェクトをレンダリングプロセスに返します.Electron入門レベルの学習資料は無料で入手できます