Files
ssq-desk/docs/04-功能迭代/版本更新/版本更新设计.md
2026-01-14 14:17:38 +08:00

7.4 KiB
Raw Blame History

版本更新功能设计文档

1. 功能概述

实现应用版本更新检查、下载、安装功能,支持自动和手动更新,提供更新日志展示。

1.1 核心功能

  • 版本检查:自动/手动检查远程版本信息
  • 更新下载:支持断点续传的更新包下载
  • 更新安装:自动备份、安装、重启
  • 进度展示:实时显示下载和安装进度

1.2 设计原则

  • 安全性文件哈希验证、HTTPS 传输
  • 可靠性:断点续传、备份回滚机制
  • 用户体验:实时进度反馈、错误提示
  • 代码质量:遵循 DRY 原则,简洁易维护

2. 架构设计

2.1 模块划分

版本更新模块
├── 后端服务层
│   ├── update_service.go      # 版本检查服务
│   ├── update_download.go      # 下载服务
│   ├── update_install.go      # 安装服务
│   └── update_config.go        # 配置管理
├── API 层
│   └── update_api.go           # 更新 API 接口
└── 前端层
    └── useVersion.ts           # 版本管理 Composable

2.2 数据流

前端 (useVersion.ts)
    ↓ 调用 API
API 层 (update_api.go)
    ↓ 调用服务
服务层 (update_service.go / update_download.go / update_install.go)
    ↓ 事件推送
前端 (通过 Wails Events 接收进度)

2.3 关键组件

版本检查服务

  • 职责:获取远程版本信息,比较版本号
  • 输入:检查 URL
  • 输出:更新信息(版本号、下载地址、更新日志等)

下载服务

  • 职责:下载更新包,计算进度,验证文件
  • 输入:下载 URL
  • 输出:下载结果(文件路径、哈希值)
  • 特性:断点续传、进度回调

安装服务

  • 职责:备份、安装、重启应用
  • 输入:安装包路径
  • 输出:安装结果
  • 特性:自动备份、失败回滚

3. 技术实现要点

3.1 版本号格式

  • 格式:语义化版本 主版本号.次版本号.修订号(如 1.0.0
  • 比较逻辑:逐级比较主版本号、次版本号、修订号
  • 解析支持:支持 v1.0.01.0.0 格式

3.2 远程版本信息接口

接口地址

https://img.1216.top/ssq/last-version.json

接口返回格式

{
  "version": "0.1.1",
  "download_url": "https://img.1216.top/ssq/releases/ssq-desk-0.1.1.exe",
  "changelog": "更新日志内容",
  "force_update": false,
  "release_date": "2026-01-07"
}

字段说明

  • version: 最新版本号(语义化版本)
  • download_url: 更新包下载地址
  • changelog: 更新日志内容
  • force_update: 是否强制更新
  • release_date: 发布日期

3.3 更新包格式

  • Windows.exe 安装包或 .zip 压缩包
  • 支持方式:全量更新(当前实现)

3.4 下载机制设计

断点续传

  • 使用 HTTP Range 头实现断点续传
  • 支持从已下载位置继续下载
  • 自动检测已下载文件大小

进度计算

  • 更新频率:每 0.3 秒更新一次
  • 进度值保护:多层防护确保进度值在 0-100% 之间
    • 后端 normalizeProgress() 函数标准化
    • API 层最后一道防线检查
    • 前端 clampProgress() 函数确保显示值合法

文件大小获取

  1. 优先从 Content-Range 头获取(最准确)
  2. 从响应 ContentLength 获取
  3. 通过 HEAD 请求获取(备用方案)

3.5 安装机制设计

安装流程

  1. 备份:安装前自动备份当前版本到 ~/.ssq-desk/backups/
  2. 验证可选的文件哈希验证MD5/SHA256
  3. 安装
    • .exe 文件:直接替换可执行文件
    • .zip 文件:解压后替换文件
  4. 重启:安装成功后自动重启应用
  5. 回滚:安装失败时自动恢复备份

Windows 文件替换

  • 使用重命名方式(.old 后缀)
  • 如果文件正在使用,将在重启后替换

3.6 检查间隔设计

检查触发机制

  • 启动时检查:应用启动时立即检查一次
  • 自动检查:根据配置的检查间隔自动检查
  • 手动检查:用户可随时手动触发检查

推荐配置

  • 开发/测试5-30分钟
  • 生产环境60分钟1小时推荐
  • 省流模式360分钟6小时
  • 最小间隔5分钟防止过于频繁
  • 最大间隔1440分钟24小时

4. 接口设计

4.1 后端 API 接口

CheckUpdate()

  • 功能:检查是否有新版本
  • 返回:更新信息(版本号、下载地址、更新日志等)

GetCurrentVersion()

  • 功能:获取当前版本号
  • 返回:当前版本号

DownloadUpdate(downloadURL)

  • 功能:下载更新包(异步)
  • 参数:下载地址
  • 事件:通过 download-progressdownload-complete 事件推送进度

InstallUpdate(filePath, autoRestart)

  • 功能:安装更新包
  • 参数:文件路径、是否自动重启
  • 返回:安装结果

4.2 前端事件

download-progress

  • 触发时机:下载过程中(每 0.3 秒)
  • 数据格式
{
  "progress": 50.5,
  "speed": 1024000,
  "downloaded": 5242880,
  "total": 10485760
}

download-complete

  • 触发时机:下载完成或失败
  • 数据格式(成功):
{
  "success": true,
  "file_path": "C:\\Users\\...\\ssq-desk-0.1.1.exe",
  "file_size": 10485760
}
  • 数据格式(失败):
{
  "error": "下载失败:网络错误"
}

5. 安全设计

5.1 已实现的安全措施

  • 文件哈希验证:支持 MD5/SHA256 哈希验证
  • HTTPS 传输:使用 HTTPS 确保传输安全
  • 进度值安全:多层防护确保进度值不会异常

5.2 待增强的安全措施

  • ⚠️ 数字签名验证:未实现(建议增强)
    • Windows: 验证 .exe 文件的 Authenticode 签名
    • macOS: 验证 .app 的代码签名
  • ⚠️ URL 白名单验证:未实现(建议增强)
    • 在配置中维护允许的下载域名列表
    • 下载前验证 URL 是否在白名单中

6. 错误处理

6.1 网络错误

  • 处理方式:提示用户检查网络连接
  • 重试机制:支持手动重试

6.2 下载失败

  • 处理方式:显示错误信息,支持重新下载
  • 断点续传:支持从断点继续下载

6.3 安装失败

  • 处理方式:自动回滚到备份版本
  • 备份机制:安装前自动创建备份

6.4 进度值异常

  • 处理方式:多层防护确保进度值在 0-100% 之间
  • 保护机制
    • 后端标准化函数
    • API 层检查
    • 前端标准化函数

7. 性能优化

7.1 代码优化2026-01-08

  • 后端代码量减少40-50%
  • 前端代码量减少:约 40%485行 → 300行
  • 优化措施
    • 提取重复逻辑为函数
    • 精简日志输出
    • 优化事件处理

7.2 下载优化

  • 进度更新频率0.3 秒(平衡性能和用户体验)
  • 缓冲区大小32KB
  • 超时时间30 分钟

8. 扩展性设计

8.1 可扩展功能

  • 增量更新支持
  • 更新包压缩
  • 多通道更新(稳定版/测试版)
  • 数字签名验证

8.2 配置化设计

  • 检查间隔可配置
  • 检查地址可配置
  • 自动检查开关可配置

文档维护者JueChen
创建时间2026-01-08