架构

这是关于 DotNetBrowser 架构的概述。

概述

DotNetBrowser 库的架构由多个进程组成,例如.NET 应用程序和不同的 Chromium 进程:

dotnetbrowser-architecture-diagram .NET Process .NET App Chromium GPU DotNetBrowser BrowserView WPF WinForms Engine Profile Browser Frame Chromium Main Engine Profile Browser Chromium Renderer Frame DOM JS Frame DOM JS DOM JS Frame DOM JS IPC Chromium IPC Chromium IPC Chromium IPC IPC IPC

以下部分提供了每个进程的详细信息、库的主要组件,并描述了它们的工作原理。

进程

.NET 进程

这是运行 .NET 应用程序的标准 .NET 进程。

Chromium 主进程

这是 Chromium engine 的主进程。 这是由 DotNetBrowser 在您创建一个 IEngine 实例时启动的。

对于每个 IEngine 实例,都使用一个单独的 Chromium 主进程。

Chromium 渲染器进程

此进程包含管理已加载网页的 DOM 和 JavaScript 的 IFrame 实例。 当您将 IBrowser导航到具有不同域的网页时,该进程由 Chromium 引擎启动。

Chromium GPU 进程

此进程使用 GPU 渲染在不同 Chromium 渲染器进程中加载的网页内容。

进程间通信

使用进程间通信 (IPC) 执行不同进程之间的通信。 使用进程间通信 (IPC) 执行不同进程之间的通信。

为了在 .NET 和 Chromium 进程之间传输数据,DotNetBrowser 使用基于套接字和共享内存的自己的 IPC 实现。 Chromium 进程之间的通信是使用 Chromium IPC 实现的。

主要组件

IEngine

IEngine 实例管理 Chromium 主进程的生命周期,并提供访问与默认 Profile 相关的核心 Chromium 功能,例如缩放、代理、缓存、Cookie、插件、下载等。

所有与引擎相关的操作均通过 IEngine 接口执行。 引擎是库对象层次结构中的顶级对象。 使用该库的任何操作都以创建 IEngine 实例开始。

有关创建和使用 IEngine 实例的详细说明,请参阅引擎指南。

配置文件

表示 Chromium 配置文件。 它允许单独保存所有浏览器数据,例如历史记录、cookie、缓存、代理设置、拼写检查器配置等。 每个 IEngine 都有一个在 Engine 初始化期间自动创建的默认配置文件。 默认配置文件无法被移除。

您可以使用 Profiles 服务创建新的配置文件并在不需要时将其删除。

配置文件的历史记录、cookie、缓存等文件存储在用户数据目录中。 如果您使用用户数据目录配置 IEngine 并创建一个配置文件,它将存储在用户数据目录中,并在应用程序重启后恢复。

配置文件指南中阅读有关配置文件的更多信息。

浏览器

这是一个网页浏览器,可用于执行多项操作,例如:

  • 加载网页或本地 HTML 文件;
  • 在已加载的网页上查找文本;
  • 修改缩放级别;
  • 启用或静音音频;
  • 获取有关加载进度的通知;
  • 调度键盘和鼠标事件。

所有与浏览器的操作都是通过IBrowser接口执行的。 每个 IBrowser 实例都绑定Profile 。 当 Profile 被删除、其父级 IEngine 实例崩溃或被应用程序处置时,IBrowser 实例会自动释放。

有关如何创建和使用 IBrowser 实例的详细信息,请参阅浏览器指南。

框架

IBrowser 实例中加载的任何网页都有一个主 IFrame 实例。 此 IFrame 可能有子框架。 您可以使用 IFrame 实例来访问和使用 DOMJavaScript。 当网页被卸载时,它的主 IFrame实例和所有的子框架都会被自动释放。

工作原理

创建引擎

当您创建一个 IEngine 实例时,库会执行以下操作:

  1. 启动 Chromium Main 进程和 GPU 进程。
  2. 在 Chromium 主进程中初始化 Chromium 引擎。
  3. 初始化默认配置文件。
  4. 在 .NET 和 Chromium 主进程之间建立 IPC 连接。
run-engine .NET App Engine Chromium Main Engine Chromium GPU IPC Channel Chromium IPC

如果您创建两个 IEngine 实例,则会为每个实例启动单独的 Chromium Main 进程和 GPU 进程。 请参阅以下示例:

run-engines .NET App Engine Engine Chromium Main Engine Chromium GPU Chromium Main Engine Chromium GPU IPC Channel IPC Channel Chromium IPC Chromium IPC

创建浏览器

当您创建一个 IBrowser 实例时,该库会自动在其中加载一个 about:blank 网页。 作为结果, Chromium 渲染器 进程开始处理网页上的所有 DOM 和 JavaScript:

run-browser .NET App Engine Profile Browser Frame about:blank DOM JS Chromium Main Engine Profile Browser Chromium Renderer Frame about:blank DOM JS Chromium GPU IPC Channel IPC Channel Chromium IPC Chromium IPC

如果您将 IBrowser 实例导航到一个网页,该网页会加载到这个 Chromium 渲染器 进程中。 如果您稍后从不同域导航到网页,该网页将会在自动启动的不同 Chromium 渲染器进程实例中加载。 请注意,处理先前网页内容的 Chromium 渲染器 进程会被终止。

浏览器处理

当您释放 IBrowser实例时,相应的 Chromium 渲染器 进程会自动终止。 因此,所有在已终止进程中运行的 IFrame 实例也将自动处理:

run-engine .NET App Engine Chromium Main Engine Chromium GPU IPC Channel Chromium IPC

引擎处理

当您处理 IEngine 实例时,库会执行以下操作:

  1. 关闭 .NET 和 Chromium 主进程之间现有的 IPC 连接。
  2. Chromium Main 进程中处理 Chromium 引擎。
  3. 终止 Chromium 主进程和 GPU 进程。
Go Top