Electron 进程间通信基础教程文档
收录于 2023-04-20 00:10:05 · بالعربية · English · Español · हिंदीName · 日本語 · Русский язык · 中文繁體
Electron 为我们提供了 2 个 IPC(进程间通信)模块,称为
ipcMain 和
ipcRenderer。
ipcMain 模块用于从主进程到渲染器进程的异步通信。在主进程中使用时,该模块处理从渲染器进程(网页)发送的异步和同步消息。从渲染器发送的消息将发送到此模块。
ipcRenderer 模块用于从渲染器进程到主进程异步通信。它提供了一些方法,以便您可以从渲染器进程(网页)向主进程发送同步和异步消息。您还可以接收来自主进程的回复。
我们将创建一个主进程和一个渲染进程,它们将使用上述模块相互发送消息。
创建一个名为
main_process.js 的新文件,内容如下-
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)
现在创建一个新的
index.html 文件并在其中添加以下代码。
<!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>
使用以下命令运行应用程序-
$ electron ./main_process.js
上述命令将生成以下输出-
// On your app console Sync Pong Async Pong // On your terminal where you ran the app Sync Ping Async Ping
建议不要在渲染器进程上执行繁重/阻塞任务的计算。始终使用 IPC 将这些任务委派给主进程。这有助于保持应用程序的速度。