Electron - IPC

442次阅读  |  发布于4年以前

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

ipcMain模块用于从主进程与呈现程序进程异步通信。在主进程中使用时,模块处理从呈现程序进程(web页面)发送的异步和同步消息。从呈现程序发送的消息将被发送到此模块。

ipcRenderer模块用于从呈现程序进程与主进程异步通信。它提供了一些方法,以便您可以将同步和异步消息从呈现程序流程(web页面)发送到主流程。你也可以收到来自主进程的回复。

我们将创建一个主进程和一个呈现程序进程,它们将使用上述模块互相发送消息。

用以下内容创建一个

名为 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 =newBrowserWindow({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 sendingasynchronous 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>

 <metacharset="UTF-8">

 <title>Hello World!</title>

 </head>

 <body>

 <script>

 const{ipcRenderer}= require('electron')

 // Synchronous message emmiter andhandler

 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将这些任务委派给主进程。这有助于保持应用程序的速度。

本文翻译转载自www.tutorialspoint.com

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8