- Electron 教程
- Electron - 主页
- Electron - 概述
- Electron - 安装
- Electron 如何工作?
- Electron - Hello World
- Electron - 构建 UI
- Electron - 文件处理
- Electron - Node 核心库
- 进程间通信 (IPC)
- Electron - 系统对话框
- Electron - 菜单
- Electron - 系统托盘
- Electron - 通知
- Electron - Web 视图
- Electron - 音频和视频捕获
- Electron - 定义快捷键
- Electron - 环境变量
- Electron - 调试
- Electron - 打包应用程序
- Electron - 资源
- Electron 的有用资源
- Electron - 快速指南
- Electron - 有用资源
- Electron - 讨论
Electron - 进程间通信
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 将这些任务委托给主进程。这有助于保持应用程序执行。
广告