Electron-프로세스 간 통신

Electron은 2 개의 IPC (Inter Process Communication) 모듈을 제공합니다. 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 파일에 다음 코드를 추가하십시오.

<!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를 사용하여 이러한 작업을 기본 프로세스에 위임하십시오. 이는 애플리케이션의 속도를 유지하는 데 도움이됩니다.