📜  电子-进程间通信

📅  最后修改于: 2020-10-25 10:55:19             🧑  作者: Mango


Electron为我们提供了2个IPC(进程间通信)模块,称为ipcMainipcRenderer

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文件,并在其中添加以下代码。


      Hello World!
   
   
   
      
   

使用以下命令运行应用程序-

$ 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将这些任务委托给主流程。这有助于维持您的应用程序进度。