架构
这是关于 DotNetBrowser 架构的概览。
概述
DotNetBrowser 库的架构由多个进程组成,例如.NET 应用程序和不同的 Chromium 进程:
以下部分提供了每个进程的详细信息、库的主要组件,并描述了它们的工作原理。
进程
.NET 进程
这是运行 .NET 应用程序的标准 .NET 进程。
Chromium 主进程
这是 Chromium engine 的主进程。 它在您创建 IEngine
实例时由 DotNetBrowser 启动。
对于每个 IEngine
实例,使用一个单独的 Chromium 主进程。
Chromium 渲染器进程
此进程包含管理已加载网页的 DOM 和 JavaScript 的 IFrame
实例。 当您将 IBrowser
导航到具有不同域的网页时,该进程由 Chromium 引擎启动。
Chromium GPU 进程
此进程使用 GPU 渲染在不同 Chromium 渲染器进程中加载的网页内容。
进程间通信
使用进程间通信(IPC)执行不同进程之间的通信。 IPC 在本地机器上的两个进程之间传输数据。
为了在 .NET 和 Chromium 进程之间传输数据,DotNetBrowser 使用自己的基于套接字和共享内存的 IPC 实现。 Chromium 进程之间的通信是使用 Chromium IPC 实现完成的。
主要组成部分
IEngine
IEngine
实例管理 Chromium 主进程的生命周期,并提供对核心 Chromium 功能的访问,如缩放、代理、缓存、cookie、插件、下载等与默认 Profile
相关的功能。
引擎的所有操作都是通过 IEngine
接口执行的。引擎是库对象层次结构中的顶级对象对库的任何操作都始于 IEngine
实例的创建。
有关 IEngine 实例的创建和使用的详细说明,请参阅引擎指南。
配置文件
表示 Chromium 配置文件。 它允许单独保存所有浏览器数据,例如历史记录、cookie、缓存、代理设置、拼写检查器配置等。每个 IEngine
都有一个在 Engine
初始化期间自动创建的默认配置文件。 无法删除默认配置文件。
您可以使用配置文件服务创建新的配置文件并在不需要时将其删除。
配置文件的历史、cookie、缓存等文件存储在用户数据目录中。 如果您使用用户数据目录配置 IEngine 并创建一个配置文件,它将存储在用户数据目录中并在应用程序重启后恢复。
在配置文件指南中阅读有关配置文件的更多信息。
浏览器
这是一个网页浏览器,可用于执行许多操作,例如:
- 加载网页或本地 HTML 文件;
- 在已加载的网页上查找文本;
- 修改缩放级别;
- 启用或静音音频;
- 获取有关加载进度的通知;
- 调度键盘和鼠标事件。
对浏览器的所有操作都是通过IBrowser
接口执行的。 每个 IBrowser
实例都绑定到 Profile
。 当 IBrowser
实例的 Profile
被删除或父 IEngine
实例崩溃或由应用程序处置时, IBrowser
实例将被自动处置。
有关如何创建和使用 IBrowser
实例的详细信息,请参阅浏览器指南。
框架
在 IBrowser
实例中加载的任何网页都有一个主 IFrame
实例。 此 IFrame
可能有子框架。 您可以使用 IFrame
实例来访问和使用 DOM 和 JavaScript。 当一个网页被卸载时,它的主 IFrame 实例和所有的子框架都会被自动释放。
它是如何运作的
创建一个引擎
当您创建一个 IEngine
实例时,库会执行以下操作:
- 启动 Chromium 主进程和 GPU 进程。
- 在 Chromium 主进程中初始化 Chromium 引擎。
- 初始化默认配置文件。
- 在 .NET 和 Chromium 主进程之间建立 IPC 连接。
如果您创建两个 IEngine
实例,则会为每个实例启动单独的 Chromium 主进程和 GPU 进程。 请参见下面的示例:
创建一个浏览器
当您创建一个 IBrowser
实例时,该库会自动在其中加载一个 about:blank
网页。 作为结果,Chromium 渲染器进程开始处理网页上的所有 DOM 和 JavaScript:
如果您将 IBrowser
实例导航到网页,该页面将在此 Chromium 渲染器进程中加载。 如果您稍后从不同域导航到网页,它将加载到自动启动的不同 Chromium 渲染器进程实例中。 请注意,处理先前网页内容的 Chromium 渲染器进程将被终止。
浏览器处理
当您释放 IBrowser
实例时,相应的 Chromium 渲染器进程会自动终止。 因此,所有在已终止进程中运行的 IFrame
实例也将自动处理:
引擎处理
当您处置 IEngine
实例时,库会执行以下操作:
- 关闭 .NET 和 Chromium 主进程之间现有的 IPC 连接。
- Chromium 主进程中 Chromium 引擎的处置。
- 终止 Chromium 主进程和 GPU 进程。