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

286 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 版本更新功能设计文档
## 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.0``1.0.0` 格式
### 3.2 远程版本信息接口
#### 接口地址
```
https://img.1216.top/ssq/last-version.json
```
#### 接口返回格式
```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-progress``download-complete` 事件推送进度
#### InstallUpdate(filePath, autoRestart)
- **功能**:安装更新包
- **参数**:文件路径、是否自动重启
- **返回**:安装结果
### 4.2 前端事件
#### download-progress
- **触发时机**:下载过程中(每 0.3 秒)
- **数据格式**
```json
{
"progress": 50.5,
"speed": 1024000,
"downloaded": 5242880,
"total": 10485760
}
```
#### download-complete
- **触发时机**:下载完成或失败
- **数据格式**(成功):
```json
{
"success": true,
"file_path": "C:\\Users\\...\\ssq-desk-0.1.1.exe",
"file_size": 10485760
}
```
- **数据格式**(失败):
```json
{
"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