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
stringlistener
Functionevent
IpcMainEvent...args
any[]
channel
을 구독하며, 새로운 메시지가 도착하면 listener(event, args...)
형태로 리스너가 호출된다.
ipcMain.off(channel, listener)
channel
stringlistener
Functionevent
IpcMainEvent...args
any[]
지정된 channel
에 대한 리스너 배열에서 특정 listener
를 제거한다.
ipcMain.once(channel, listener)
channel
stringlistener
Functionevent
IpcMainEvent...args
any[]
이벤트에 대해 한 번만 실행되는 listener
함수를 추가한다. 이 listener
는 channel
로 메시지가 전송될 때 한 번만 호출되며, 호출된 후에는 제거된다.
ipcMain.addListener(channel, listener)
channel
stringlistener
Functionevent
IpcMainEvent...args
any[]
ipcMain.on
의 별칭이다.
ipcMain.removeListener(channel, listener)
channel
stringlistener
Function...args
any[]
ipcMain.off
의 별칭이다.
ipcMain.removeAllListeners([channel])
channel
string (선택 사항)
지정된 channel
에서 모든 리스너를 제거한다. channel
을 지정하지 않으면 모든 채널의 리스너를 제거한다.
ipcMain.handle(channel, listener)
channel
stringlistener
Function<Promise<any> | any>event
IpcMainInvokeEvent...args
any[]
invoke
가능한 IPC에 대한 핸들러를 추가한다. 이 핸들러는 렌더러 프로세스에서 ipcRenderer.invoke(channel, ...args)
를 호출할 때마다 실행된다.
listener
가 Promise를 반환하면, Promise의 최종 결과가 원격 호출자에게 응답으로 전달된다. 그렇지 않으면 listener
의 반환 값이 응답 값으로 사용된다.
ipcMain.handle('my-invokable-ipc', async (event, ...args) => {
const result = await somePromise(...args)
return result
})
async () => {
const result = await ipcRenderer.invoke('my-invokable-ipc', arg1, arg2)
// ...
}
핸들러의 첫 번째 인자로 전달되는 event
는 일반 이벤트 리스너에 전달되는 것과 동일하다. 이 이벤트는 invoke
요청의 출처가 되는 WebContents에 대한 정보를 포함한다.
메인 프로세스에서 handle
을 통해 발생한 오류는 직렬화되며, 원본 오류의 message
속성만 렌더러 프로세스에 제공된다. 자세한 내용은 #24427을 참조한다.
ipcMain.handleOnce(channel, listener)
channel
stringlistener
Function<Promise<any> | any>event
IpcMainInvokeEvent...args
any[]
단 한 번만 호출 가능한 IPC 메시지를 처리한 후 리스너를 제거한다. 자세한 내용은 ipcMain.handle(channel, listener)
를 참고한다.
ipcMain.removeHandler(channel)
channel
string
channel
에 등록된 핸들러가 있다면 제거한다.