菜单

架构

相关源文件

本文档描述了 Shadowsocks Windows 客户端的高层架构,包括其关键组件、它们之间的关系以及所使用的设计模式。有关项目结构和组织的信息,请参阅项目结构

概述

Shadowsocks Windows 遵循模型-视图-控制器 (MVC) 架构模式,其中有一个中央控制器负责协调大部分功能。该应用程序被设计为一个在系统托盘中运行的独立代理客户端,提供多种代理模式、服务器管理和流量监控功能。

高层架构

核心架构组件

来源: shadowsocks-csharp/Program.cs132-137 shadowsocks-csharp/Controller/ShadowsocksController.cs21-64 shadowsocks-csharp/View/MenuViewController.cs21-64

核心组件

Program(入口点)

Program 类作为应用程序的入口点,负责初始化核心组件并处理顶层异常和系统事件。它

  1. 实现单实例检查
  2. 设置异常处理器
  3. 创建并启动主控制器
  4. 管理系统电源事件(睡眠/唤醒)
  5. 注册热键

来源: shadowsocks-csharp/Program.cs42-157

ShadowsocksController

ShadowsocksController 是应用程序的核心组件,实现了 MVC 模式的控制器部分。它管理

  1. 配置(加载、保存、验证)
  2. 代理服务(创建和管理监听器和中继)
  3. 系统集成(系统代理设置、自动启动)
  4. PAC(代理自动配置)管理
  5. 服务器策略和插件
  6. 流量统计

控制器使用事件驱动架构与其他组件(特别是 UI)进行通信。

关键事件

  • ConfigChanged(配置已更改)
  • EnableStatusChanged(启用状态已更改)
  • EnableGlobalChanged(全局模式已更改)
  • ShareOverLANStatusChanged(局域网共享状态已更改)
  • TrafficChanged(流量已更改)
  • UpdatePACFromGeositeCompleted(PAC 从 Geosite 更新完成)
  • ProgramUpdated(程序已更新)

组件结构

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs23-104 shadowsocks-csharp/Controller/ShadowsocksController.cs112-166

MenuViewController 实现了 MVC 模式的视图部分,管理系统托盘图标、上下文菜单和用户交互。它

  1. 创建并管理系统托盘图标
  2. 构建包含所有选项的上下文菜单
  3. 处理用户操作并将其转换为控制器调用
  4. 根据系统状态变化更新 UI
  5. 管理用于配置的对话窗口

该组件订阅 ShadowsocksController 的事件,以便在系统状态更改时更新 UI。

来源: shadowsocks-csharp/View/MenuViewController.cs23-104 shadowsocks-csharp/View/MenuViewController.cs242-309

配置

Configuration 类代表 MVC 模式的模型部分,存储所有应用程序设置和服务器配置。它提供

  1. 配置的加载和保存到磁盘
  2. 服务器设置的验证
  3. 默认设置管理
  4. 配置处理和版本升级

来源: shadowsocks-csharp/Model/Configuration.cs14-110 shadowsocks-csharp/Model/Configuration.cs161-183

网络架构

Shadowsocks 客户端作为一个本地代理服务器运行,加密流量并将其转发到远程 Shadowsocks 服务器。本节描述了网络组件和数据流。

网络组件

代理服务组件

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs217-234

网络数据流

下图说明了数据如何通过 Shadowsocks 客户端流动

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs217-234

系统代理集成

Shadowsocks 提供不同的方式与系统代理设置集成

  1. 全局模式:所有流量都通过代理
  2. PAC 模式:只有符合 PAC 规则的流量通过代理
  3. 禁用:无系统代理集成(应用程序中需要手动配置代理)

PAC 系统

PAC(代理自动配置)系统允许根据目的地规则进行选择性代理

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs193-196 shadowsocks-csharp/Controller/ShadowsocksController.cs336-339

启动过程

应用程序遵循结构化的启动过程

来源: shadowsocks-csharp/Program.cs42-157 shadowsocks-csharp/Controller/ShadowsocksController.cs114-142

事件系统

Shadowsocks Windows 使用事件驱动架构进行组件间通信。ShadowsocksController 暴露事件,其他组件(主要是 MenuViewController)可以订阅这些事件。

关键事件及其用途

事件目的来源
ConfigChanged(配置已更改)配置更新时通知ShadowsocksController
EnableStatusChanged(启用状态已更改)代理启用/禁用时通知ShadowsocksController
EnableGlobalChanged(全局模式已更改)在 PAC/全局模式之间切换时通知ShadowsocksController
ShareOverLANStatusChanged(局域网共享状态已更改)局域网共享切换时通知ShadowsocksController
TrafficChanged(流量已更改)每秒更新一次网络流量时通知ShadowsocksController
PACFileReadyToOpen(PAC 文件准备好打开)PAC 文件准备好打开时通知ShadowsocksController
ProgramUpdated(程序已更新)程序版本更新时通知ShadowsocksController

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs70-89 shadowsocks-csharp/View/MenuViewController.cs83-93

线程管理

应用程序使用多线程处理不同任务

  1. 主 UI 线程:处理用户界面和事件
  2. 流量统计线程:每秒更新流量计数器
  3. TCP/UDP 中继线程:处理网络连接

线程管理遵循此模型

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs622-658

设计模式

Shadowsocks Windows 客户端利用了几种设计模式

  1. 模型-视图-控制器 (MVC):

    • 模型:Configuration 类及相关模型
    • 视图:MenuViewController 和窗体
    • 控制器:ShadowsocksController
  2. 事件驱动架构:

    • 组件通过事件而非直接方法调用进行通信
    • 实现组件之间的松散耦合
  3. 工厂模式:

    • EncryptorFactory 创建适当的加密器实例
  4. 策略模式:

    • 服务器选择策略(负载均衡、高可用性)
  5. 单例模式:

    • 控制器和关键服务的单实例

来源: shadowsocks-csharp/Controller/ShadowsocksController.cs23-104 shadowsocks-csharp/View/MenuViewController.cs23-104 shadowsocks-csharp/Model/Configuration.cs14-110

总结

Shadowsocks Windows 客户端遵循结构良好的 MVC 架构,其中中央控制器 (ShadowsocksController) 管理应用程序的所有方面。客户端提供带加密的本地代理服务、系统代理集成以及可配置的 PAC 系统,用于选择性代理。

事件驱动的设计允许组件之间松散耦合,使系统更易于维护和扩展。该应用程序主要设计为在系统托盘中运行,为用户提供对代理配置和服务器管理的便捷访问。