Skip to main content

ipcMain

메인 프로세스에서 렌더러 프로세스로 비동기적으로 통신한다.

프로세스: Main

ipcMain 모듈은 [Event Emitter][event-emitter]이다. 메인 프로세스에서 사용할 때, 렌더러 프로세스(웹 페이지)에서 보낸 비동기 및 동기 메시지를 처리한다. 렌더러에서 보낸 메시지는 이 모듈로 전달된다.

사용 예제는 IPC 튜토리얼을 참고한다.

메시지 전송

메인 프로세스에서 렌더러 프로세스로 메시지를 보낼 수도 있다. 자세한 내용은 webContents.send를 참고한다.

  • 메시지를 보낼 때, 이벤트 이름이 channel이 된다.
  • 동기식 메시지에 응답하려면 event.returnValue를 설정해야 한다.
  • 비동기식 메시지를 보내려면 event.reply(...)를 사용할 수 있다. 이 헬퍼 메서드는 메인 프레임이 아닌 프레임(예: iframe)에서 오는 메시지를 자동으로 처리한다. 반면 event.sender.send(...)는 항상 메인 프레임으로 메시지를 보낸다.

메서드

ipcMain 모듈은 이벤트를 수신하기 위해 다음과 같은 메서드를 제공한다:

ipcMain.on(channel, listener)

  • channel string
  • listener Function

channel을 구독하며, 새로운 메시지가 도착하면 listener(event, args...) 형태로 리스너가 호출된다.

ipcMain.off(channel, listener)

  • channel string
  • listener Function

지정된 channel에 대한 리스너 배열에서 특정 listener를 제거한다.

ipcMain.once(channel, listener)

  • channel string
  • listener Function

이벤트에 대해 한 번만 실행되는 listener 함수를 추가한다. 이 listenerchannel로 메시지가 전송될 때 한 번만 호출되며, 호출된 후에는 제거된다.

ipcMain.addListener(channel, listener)

  • channel string
  • listener Function

ipcMain.on의 별칭이다.

ipcMain.removeListener(channel, listener)

  • channel string
  • listener Function
    • ...args any[]

ipcMain.off의 별칭이다.

ipcMain.removeAllListeners([channel])

  • channel string (선택 사항)

지정된 channel에서 모든 리스너를 제거한다. channel을 지정하지 않으면 모든 채널의 리스너를 제거한다.

ipcMain.handle(channel, listener)

  • channel string
  • listener Function<Promise<any> | any>

invoke 가능한 IPC에 대한 핸들러를 추가한다. 이 핸들러는 렌더러 프로세스에서 ipcRenderer.invoke(channel, ...args)를 호출할 때마다 실행된다.

listener가 Promise를 반환하면, Promise의 최종 결과가 원격 호출자에게 응답으로 전달된다. 그렇지 않으면 listener의 반환 값이 응답 값으로 사용된다.

Main Process
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
Renderer Process
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
}

핸들러의 첫 번째 인자로 전달되는 event는 일반 이벤트 리스너에 전달되는 것과 동일하다. 이 이벤트는 invoke 요청의 출처가 되는 WebContents에 대한 정보를 포함한다.

메인 프로세스에서 handle을 통해 발생한 오류는 직렬화되며, 원본 오류의 message 속성만 렌더러 프로세스에 제공된다. 자세한 내용은 #24427을 참조한다.

ipcMain.handleOnce(channel, listener)

  • channel string
  • listener Function<Promise<any> | any>

단 한 번만 호출 가능한 IPC 메시지를 처리한 후 리스너를 제거한다. 자세한 내용은 ipcMain.handle(channel, listener)를 참고한다.

ipcMain.removeHandler(channel)

  • channel string

channel에 등록된 핸들러가 있다면 제거한다.