本文档描述了v2rayN的整体架构,解释了不同组件如何交互和协同工作。它提供了系统结构、设计模式和关键机制的技术概述。
有关组件特定实现的详细信息,请参阅核心组件,有关项目组织信息,请参阅项目结构。
v2rayN遵循客户端-服务器架构,其中GUI(客户端)管理和控制各种代理核心(服务器)。该应用程序使用MVVM(模型-视图-视图模型)模式构建,并由ReactiveUI提供响应式编程能力。
来源: v2rayN/v2rayN/Views/MainWindow.xaml.cs ServiceLib/Handler/CoreHandler.cs ServiceLib/ViewModels/MainWindowViewModel.cs ServiceLib/Handler/AppHandler.cs
v2rayN被组织成几个独立的层,每一层都有特定的职责。
来源: v2rayN/v2rayN/Views/MainWindow.xaml.cs ServiceLib/ViewModels/MainWindowViewModel.cs ServiceLib/ViewModels/StatusBarViewModel.cs
表示层包含使用XAML和C#代码隐藏实现的UI组件。主要类型包括:
MainWindow:应用程序的主窗口,承载所有其他视图。ProfilesView:显示服务器配置文件并允许管理。MsgView:显示日志消息和应用程序通知。ClashProxiesView 和 ClashConnectionsView:显示Clash特定的信息。应用程序支持通过MainGirdOrientation设置配置的不同UI布局(水平、垂直和标签式)。
来源: v2rayN/v2rayN/Views/MainWindow.xaml v2rayN/v2rayN/Views/MainWindow.xaml.cs42-68
ViewModel层实现业务逻辑,并通过ReactiveUI遵循MVVM模式,将属性和命令暴露给视图。
MainWindowViewModel:管理主应用程序窗口并协调其他ViewModel。ProfilesViewModel:处理服务器配置文件管理。StatusBarViewModel:控制状态栏和系统代理设置。ViewModel使用响应式命令和属性来处理用户交互并更新UI。
来源: ServiceLib/ViewModels/MainWindowViewModel.cs68-207 ServiceLib/ViewModels/StatusBarViewModel.cs96-182
服务层为各种应用程序功能提供服务。
这些服务充当ViewModel和核心层之间的中介。
来源: ServiceLib/ViewModels/MainWindowViewModel.cs235-337
核心层包含应用程序的核心功能。
CoreHandler:管理代理核心进程(启动、停止和监控)。ConfigHandler:处理配置管理。AppHandler:应用程序范围内的服务和配置的中心单例。SysProxyHandler:管理系统代理设置。这些处理器提供了应用程序的基本功能。
来源: ServiceLib/Handler/CoreHandler.cs18-184 ServiceLib/Handler/AppHandler.cs
数据层管理数据持久化和检索。
该层确保数据在需要时得到妥善存储和检索。
来源: ServiceLib/Handler/AppHandler.cs124-214 ServiceLib/Global.cs16-22
v2rayN的一个关键方面是它如何与操作系统和代理核心进程进行交互。
来源: ServiceLib/Handler/CoreHandler.cs64-100 ServiceLib/ViewModels/MainWindowViewModel.cs538-597 ServiceLib/ViewModels/StatusBarViewModel.cs332-356
CoreHandler负责管理代理核心进程。
LoadCore方法接收一个选定的配置文件。对于Linux和macOS,该处理程序包含了在需要时(尤其是在TUN模式下)以提升的权限运行进程的特殊处理。
来源: ServiceLib/Handler/CoreHandler.cs64-100 ServiceLib/Handler/CoreHandler.cs183-227
SysProxyHandler管理全局系统代理设置。
StatusBarViewModel上调用SetListenerType。SysProxyHandler相应地更新系统代理设置。来源: ServiceLib/ViewModels/StatusBarViewModel.cs332-356
v2rayN通过两种独立的UI实现支持多平台,并共享核心功能。
来源: v2rayN/v2rayN/Views/MainWindow.xaml.cs v2rayN/v2rayN.Desktop/Views/MainWindow.axaml.cs ServiceLib/Common/Utils.cs797-849
该应用程序在几个关键领域处理平台差异
UI 框架:
系统集成:
可执行文件管理:
文件路径:
来源: ServiceLib/Common/Utils.cs797-849 ServiceLib/Handler/CoreHandler.cs326-408
Utils 类提供了平台检测方法,这些方法在应用程序中得到广泛使用
这些方法用于条件性地执行特定于平台的代码。
来源: ServiceLib/Common/Utils.cs799-805
该应用程序管理各种配置元素
来源: ServiceLib/Global.cs16-22 ServiceLib/Handler/AppHandler.cs3-47
v2rayN 同时使用基于文件的配置和 SQLite 数据库
guiNConfig.json 存储应用程序设置该应用程序确保这些存储机制之间的数据一致性。
来源: ServiceLib/Global.cs16-22 ServiceLib/Handler/AppHandler.cs72-75
该 Utils 类提供了管理各个组件文件路径的方法
这些方法处理特定于平台的路径并确保目录存在。
来源: ServiceLib/Common/Utils.cs637-794
v2rayN 使用 MVVM 模式和 ReactiveUI 来创建响应式、可维护的应用程序。
MainWindow 在其构造函数中设置视图-ViewModel 连接
来源: v2rayN/v2rayN/Views/MainWindow.xaml.cs71-133
ViewModels 使用 ReactiveUI 的响应式命令和属性
来源: ServiceLib/ViewModels/MainWindowViewModel.cs76-105 ServiceLib/ViewModels/MainWindowViewModel.cs55-62
该应用程序使用 ReactiveUI 的 MessageBus 进行组件间的通信
来源: v2rayN/v2rayN/Views/MainWindow.xaml.cs38 ServiceLib/ViewModels/StatusBarViewModel.cs203-204
v2rayN 采用结构良好的架构,将关注点分为不同的层,遵循 MVVM 模式,并支持多平台。该应用程序的核心组件协同工作,可在不同操作系统上提供无缝的代理管理体验。
ReactiveUI 和基于消息的通信的使用实现了响应式的 UI 和组件之间的松耦合。特定于平台的代码的仔细分离允许应用程序在 Windows、Linux 和 macOS 上运行,同时保持一致的核心功能。