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

    构造函数绑定事件