Theia 架构概述
架构概述
本节介绍 Theia 的整体架构。
Theia 旨在用作本机桌面应用程序、也可以在浏览器和远程服务器中工作。为了通过一份代码支持这两种情况,Theia 在两个单独的进程中运行。这些进程分别称为前端和后端,它们通过 WebSocket 上的 JSON-RPC 消息或 HTTP 上的 REST API 进行通信。对于 Electron,后端和前端都在本地运行,而在远程情况下,后端将在远程主机上运行。
前端和后端进程都有其依赖注入 (DI) 容器(见下文)。
前端
前端进程代表客户端并呈现 UI。在浏览器中,它只是在渲染循环中运行,而在 Electron 中,它在 Electron Window 中运行,Electron Window 基本上是一个带有额外 Electron 和 Node.js API 的浏览器。因此,任何前端代码都可以将浏览器假定为平台,而不是 Node.js。
前端进程启动时,将首先加载所有贡献扩展的 DI 模块,然后获取 FrontendApplication 的实例并在其上调用 start()。
后端
后端进程在 Node.js 上运行。我们使用 express 作为 HTTP 服务器。它不使用任何需要浏览器(DOM API)作为平台的代码。
后端应用程序的启动会首先加载所有贡献扩展的 DI 模块,然后它会获取一个 BackendApplication 实例并在其上调用 start(portNumber)。
默认情况下,后端的express服务器也为前端提供代码。
平台分离
在扩展的上层文件夹中,我们单独的一层目录用来区分平台:
common文件夹包含不依赖于任何运行时的代码。
browser文件夹包含需要现代浏览器作为平台 (DOM API) 的代码。
electron-browser 文件夹包含需要 DOM API 以及 Electron renderer-process特定 API 的前端代码。
node文件夹包含需要 Node.js 作为平台的(后端)代码。
node-electron 文件夹包含专用于 Electron 的(后端)代码。