Interprozesskommunikation (IPC)
Lernen Sie, sichere Kommunikationskanäle zwischen Main- und Renderer-Prozess mit Electron-IPC-Modulen wie `ipcMain` und `ipcRenderer` zu implementieren.
Interprozesskommunikation (IPC) ist eine kostenlose Electron Desktop App Development-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Electron Desktop App Development-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Electron Desktop App Development-Kurs umfasst insgesamt 4 Lektionen.
Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.
What is IPC in Electron?
In Electron, your application runs across two main types of processes: the Main Process and Renderer Processes.
- The Main Process manages the app's lifecycle and interacts with the operating system.
- Renderer Processes (web pages) display your UI and run your web code.
They can't directly access each other's resources or global variables. This is where Inter-Process Communication (IPC) comes in!
Why IPC is Essential
Imagine your Renderer Process needs to:
- Read a file from the user's computer.
- Open a native dialog box.
- Perform a heavy task without freezing the UI.
These actions require access to Node.js modules or the OS, which are restricted to the Main Process for security and stability. IPC provides a safe way for these processes to talk to each other.
IPC Core Modules: ipcMain & ipcRenderer
Electron provides two special modules for IPC:
ipcMain: Used in the Main Process to listen for and send messages.ipcRenderer: Used in Renderer Processes to send messages to the main process and listen for replies.
These modules are the backbone of communication between your Electron app's different parts.
Renderer to Main: One-Way Send
The most common communication is from a Renderer Process to the Main Process. You can send a message using ipcRenderer.send().
This is useful for triggering native actions or requesting data from the main process without needing an immediate reply in the renderer.
Code: Renderer to Main (Client)
Here's how your renderer.js would send a message when a button is clicked. You'd also need an index.html with a button (<button id="myButton">) that loads this script.
const { ipcRenderer } = require('electron');
document.addEventListener('DOMContentLoaded', () => {
const btn = document.getElementById('myButton');
if (btn) {
btn.addEventListener('click', () => {
ipcRenderer.send('channel-name', 'Hello from Renderer!');
console.log('Renderer sent message.');
});
}
});Code: Renderer to Main (Server)
This is the main.js code. It sets up the Electron window and uses ipcMain.on() to listen for messages on the specified 'channel-name'.
Note: nodeIntegration and contextIsolation are simplified here. For secure apps, use preload scripts.
const { app, BrowserWindow, ipcMain } = require('electron');
const path = require('path');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true, // Simplified for demo
contextIsolation: false // Simplified for demo
}
});
mainWindow.loadFile('index.html');
// Open the DevTools.
// mainWindow.webContents.openDevTools()
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});
// Handle messages from the renderer process
ipcMain.on('channel-name', (event, message) => {
console.log('Main process received:', message);
// Acknowledge or perform an action
});Main to Renderer: One-Way Send
The Main Process can also send messages to a Renderer Process using mainWindow.webContents.send().
This is useful for pushing updates from the main process (e.g., progress updates, data changes) to the UI without the renderer having to request them.
Code: Main to Renderer (Server)
This main.js will send a message to the renderer once the window has finished loading. This time, the ipcMain isn't listening, but sending!
const { app, BrowserWindow } = require('electron');
const path = require('path');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true,
contextIsolation: false
}
});
mainWindow.loadFile('index.html');
// Send a message to the renderer after the window is ready
mainWindow.webContents.on('did-finish-load', () => {
mainWindow.webContents.send('main-channel', 'Update from Main!');
console.log('Main sent message to renderer.');
});
mainWindow.on('closed', () => {
mainWindow = null;
});
}
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit();
}
});Code: Main to Renderer (Client)
In your renderer.js, you'll use ipcRenderer.on() to listen for messages coming from the main process. We'll display it in a <div id="messageDisplay">.
const { ipcRenderer } = require('electron');
document.addEventListener('DOMContentLoaded', () => {
const messageDiv = document.getElementById('messageDisplay');
if (messageDiv) {
ipcRenderer.on('main-channel', (event, message) => {
messageDiv.innerText = `Received: ${message}`;
console.log('Renderer received:', message);
});
}
});Request/Reply with Invoke & Handle
For more complex interactions where the Renderer needs a response from the Main Process, Electron offers a request/reply pattern.
ipcRenderer.invoke(channel, ...args): Sends a message from renderer and waits for a response.ipcMain.handle(channel, listener): In the main process, sets up a handler function that processes the request and returns a value (or a Promise that resolves to a value).
This allows for more structured and asynchronous communication.
Quick Check: IPC Methods
Which of the following statements about Electron's IPC modules are TRUE?
Recap: Inter-Process Communication
Great job! You've learned the fundamentals of Electron's Inter-Process Communication.
- IPC is vital for Main and Renderer Processes to safely interact.
ipcMainandipcRendererare the core modules.- One-way communication uses
ipcRenderer.send()(Renderer to Main) andwebContents.send()(Main to Renderer). - For request/reply patterns,
ipcRenderer.invoke()andipcMain.handle()provide a robust solution.
You're now ready to build more interactive and powerful Electron applications!
Lerne JavaScript mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 12
- Lektionen
- 47
Häufig gestellte Fragen
Ist die Lektion „Interprozesskommunikation (IPC)“ kostenlos?
Ja — der vollständige Text von „Interprozesskommunikation (IPC)“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Electron Desktop App Development-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Electron Desktop App Development-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Interprozesskommunikation (IPC)“?
Lernen Sie, sichere Kommunikationskanäle zwischen Main- und Renderer-Prozess mit Electron-IPC-Modulen wie `ipcMain` und `ipcRenderer` zu implementieren. Du übst Electron Desktop App Development mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Electron Desktop App Development zu starten?
Keine Vorkenntnisse erforderlich. Electron Desktop App Development auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Interprozesskommunikation (IPC)“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Electron Desktop App Development-Lektion Code schreiben und ausführen?
Ja. Jede Electron Desktop App Development-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Main- und Renderer-Prozess
- Interprozesskommunikation (IPC)
- Ihre Electron-App paketieren
- Mehrere Fenster verwalten