VSCode源码分析 - 进程通信
进程通信
main.ts在启动应用后就创建了一个主进程 main process,它可以通过electron中的一些模块直接与原生GUI交互。
仅启动主进程并不能给你的应用创建应用窗口。窗口是通过main文件里的主进程调用叫BrowserWindow的模块创建的。
在electron中,主进程与渲染进程有很多通信的方法。比如ipcRenderer和ipcMain,还可以在渲染进程使用remote模块。
- 主进程:ipcMain
- 渲染进程:ipcRenderer
ipcMain模块和ipcRenderer是类EventEmitter的实例。
在渲染进程中使用ipcRenderer向主进程发送同步或异步消息,也可以接收到主进程的消息。
- 发送消息,事件名为 channel .
- 回应同步消息, 你可以设置 event.returnValue .
- 回应异步消息, 你可以使用 event.sender.send(…)
创建IPC服务 src/vs/base/parts/ipc/node/ipc.net.ts
这里返回一个promise对象,成功则createServer
创建信道
src/vs/code/electron-main/app.ts
-
electronIpcServer
- updateChannel
- issueChannel
- workspacesChannel
- windowsChannel
- menubarChannel
- urlChannel
- storageChannel
- logLevelChannel
每一个信道,内部实现两个方法 listen和call
例如:src/vs/platform/localizations/node/localizationsIpc.ts
构造函数绑定事件