⚙️ 选择你的更新策略
更新策略 = GeneralUpdate 用什么方式来发现和下载新版本。
根据你有没有后端服务、是否需要节省带宽、是否需 要用户感知,选择一个适合你的策略。
先理解:更新策略的本质
不管哪种策略,最终都是回答 3 个问题:
① 去哪查有没有新版本? ② 去哪下载更新包? ③ 怎么下载?
│ │ │
├ 自己查(轮询) ├ 自己的服务器 ├ 全量下载
├ 服务端通知(推送) ├ 对象存储 OSS └ 只下载差异部分
└ └
策略快速选择表
看不懂术语没关系,先看这一列就行:
| 你的情况 | 推荐策略 | 一句话说明 |
|---|---|---|
| 有后端服务,新手入门 | ① 标准 | 最简单的方案,服务端返回版本信息,客户端下载更新 |
| 没有后端,只想把包放云存储 | ② OSS | 把更新包上传到 S3/MinIO,零服务端成本 |
| 带宽有限,用户量大 | ④ 差分 | 每次只下载有变化的部分,省 60-90% 流量 |
| 需要强制用户升到最新(跳过中间版本) | ⑤ 跨版本 | 用户从 v1.0 直升 v3.0,不用逐个版本升 |
| 用户无感知自动更新 | ③ 静默 | 后台下载完,下次启动自动生效 |
| 需要紧急推送安全补丁 | ⑥ 推送 | 服务端主动告诉客户端"立刻更新" |
逐个策略详解
① 标准客户端-服务端(推荐新手入门)
适用场景:你有后端服务(如 GeneralSpacestation),想快速实现自动更新。
流程:客户端 → 问服务端"有新版本吗?"
服务端 → 返回版本列表
客户端 → 下载更新包 → 启动升级
优点:实现最简单,1 个 API 接口就能跑起来 缺点:需要部署和维护后端服务
② OSS 对象存储
适用场景:你没有后端服务,但有对象存储(阿里云 OSS / AWS S3 / MinIO)。
流程:客户端 → 定期读取 OSS 上的 versions.json
OSS → 返回版本列表
客户端 → 从 OSS 下载更新包 → 启动升级
优点:零服务端,成本最低 缺点:不区分主程序和升级程序的更新包;Bucket 要设置好权限
③ 静默更新
适用场景:用户不需要看到更新过程,后台静默完成。
流程:客户端在后台定期检查 → 发现新版本 → 静默下载
下载完成后 → 通知用户"更新已下载,是否重启?"
或:下次启动时自动生效
优点:用户体验好,不打扰 缺点:需要处理"下载完但用户不重启"的版本状态 轮询频率建议:30-60 分钟一次(太短耗电/流量,太长用户等得久)
④ 差分更新
适用场景:你的更新包很大(>100MB),用户量多,想省带宽。
流程:服务端生成"补丁"(只记录新旧版本之间的差异)
客户端下载补丁 → 本地合成新版本
优点:节省 60-90% 的下载量 缺点:服务端需要额外构建差分包;大文件(>2GB)可能触发整数溢出
⑤ 跨版本更新(CVP)
适用场景:你的用户版本分散(有人还在 v1.0,有人是 v2.5),都需要升到 v3.0。
流程:服务端保留所有版本的升 级路径
v1.0 用户 → 直接下载 v3.0 全量包
v2.5 用户 → 只下载 v2.5→v3.0 的差分包
优点:用户不用逐个版本升级 缺点:服务端需要额外构建和维护版本跳转逻辑
⑥ SignalR 推送
适用场景:需要紧急推送安全修复,不能让用户等轮询。
流程:服务端通过 SignalR 连接主动推送"有新版本"
客户端立刻开始下载更新
优点:实时推送,秒级响应 缺点:需要额外部署 SignalR Hub;断线后要回退到轮询
混合策略组合
实际项目中,这些策略可以组合使用:
| 组合 | 适合谁 | 怎么做 |
|---|---|---|
| ① 标准 + UI | 几乎所有人 | 标准检查 + 显示下载进度条 |
| ② OSS + ④ 差分 | 无后端 + 省带宽 | 更新包放 OSS,只下载差量 |
| ③ 静默 + ① 标准 | 后台服务 | 定时间隔检查,后台下载 |
| ⑤ 跨版本 + ⑥ 推送 | 强制升级 | 服务端推送"请立即更新",跳过所有中间版本 |
如果你不确定选哪个
有后端服务?
├── 是 → ① 标准(先跑起来再说)
│ 以后需要时再加 ④ 差分 或 ③ 静默
│
└── 否 → ② OSS(零成本起步)
把更新包上传到 S3/MinIO
这个方案不会错。先跑通再优化。
需要留意的事情
| # | 问题 | 建议 |
|---|---|---|
| 1 | NuGet 版本不一致导致 "Method not found" | Client 和 Upgrade 的 NuGet 版本必须完全一致 |
| 2 | OSS 模式不区分 Main/Upgrade 更新 | 这是 OSS 的正常限制,接受即可 |
| 3 | 升级程序必须放在 update/ 子目录 | 从第一个版本就建好这个目录结构 |
| 4 | Linux/macOS 不支持 Bowl 崩溃守护 | 只有 Windows 可以用 Bowl |
| 5 | 差分包不要超过 2GB | 大文件用全量包 |
相关页面
- generalupdate-init — Bootstrap 配置
- generalupdate-ui — 更新界面
- generalupdate-advanced — 高级定制
- generalupdate-troubleshoot — 遇到问题