Elektronen-Inter-Prozess-Kommunikation
Electron stellt uns 2 IPC-Module (Inter Process Communication) zur Verfügung ipcMain und ipcRenderer.
Das ipcMainDas Modul wird verwendet, um asynchron vom Hauptprozess zu den Rendererprozessen zu kommunizieren. Bei Verwendung im Hauptprozess verarbeitet das Modul asynchrone und synchrone Nachrichten, die von einem Renderer-Prozess (Webseite) gesendet werden. Die von einem Renderer gesendeten Nachrichten werden an dieses Modul gesendet.
Das ipcRendererDas Modul wird verwendet, um asynchron von einem Renderer-Prozess zum Hauptprozess zu kommunizieren. Es bietet einige Methoden, mit denen Sie synchrone und asynchrone Nachrichten vom Renderer-Prozess (Webseite) an den Hauptprozess senden können. Sie können auch Antworten vom Hauptprozess erhalten.
Wir werden einen Hauptprozess und einen Renderer-Prozess erstellen, die sich gegenseitig Nachrichten mit den oben genannten Modulen senden.
Erstellen Sie eine neue Datei mit dem Namen main_process.js mit folgenden Inhalten -
const {app, BrowserWindow} = require('electron')
const url = require('url')
const path = require('path')
const {ipcMain} = require('electron')
let win
function createWindow() {
win = new BrowserWindow({width: 800, height: 600})
win.loadURL(url.format ({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}))
}
// Event handler for asynchronous incoming messages
ipcMain.on('asynchronous-message', (event, arg) => {
console.log(arg)
// Event emitter for sending asynchronous messages
event.sender.send('asynchronous-reply', 'async pong')
})
// Event handler for synchronous incoming messages
ipcMain.on('synchronous-message', (event, arg) => {
console.log(arg)
// Synchronous event emmision
event.returnValue = 'sync pong'
})
app.on('ready', createWindow)
Erstellen Sie jetzt eine neue index.html Datei und fügen Sie den folgenden Code hinzu.
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8">
<title>Hello World!</title>
</head>
<body>
<script>
const {ipcRenderer} = require('electron')
// Synchronous message emmiter and handler
console.log(ipcRenderer.sendSync('synchronous-message', 'sync ping'))
// Async message handler
ipcRenderer.on('asynchronous-reply', (event, arg) => {
console.log(arg)
})
// Async message sender
ipcRenderer.send('asynchronous-message', 'async ping')
</script>
</body>
</html>
Führen Sie die App mit dem folgenden Befehl aus:
$ electron ./main_process.js
Der obige Befehl generiert die folgende Ausgabe:
// On your app console
Sync Pong
Async Pong
// On your terminal where you ran the app
Sync Ping
Async Ping
Es wird empfohlen, keine Berechnungen für schwere / blockierende Aufgaben im Renderer-Prozess durchzuführen. Verwenden Sie IPC immer, um diese Aufgaben an den Hauptprozess zu delegieren. Dies hilft dabei, das Tempo Ihrer Anwendung aufrechtzuerhalten.