wechat: albertofwb
请注明 升级客户端-外包
工期 不超过 10 天
报酬 5000 元
本外包发布日期 2020-11-30
过期时间 2020-12-3 23:59
编辑时间: 2020-11-30 11:20
假设你用 pyqt 制作编写了一款工具软件,使用 pyinstaller
集成依赖,基于 NSIS
生成安装包给客户端使用。每当有 bug 解决或者新增特性时,为了方便用户使用到最新版本的软件。需要一个程序,定期检测是否有新版本存在,并将其下载到本地。
updater
每天都要有 commit 记录check_url = http://example.com/client/check_version
# 如果升级服务器位于以下主机名单中,直接升级,不计算升级概率
beta_hosts = test_1.com, 192.168.114.1
# 如果没有提供此参数,输出到 stdout
--log-path /path/to/log
--current_version 2.4.6.2
--version_path /path/to/version/file # 该文件只有版本号独占一行,再无其他任何信息
--check_url 192.168.114.1/client/check_version
--instatlled_root /path/to/program/installed
# 若同时提供命令行参数与配置文件,以命令行参数为准,命令行中未提供的参数,从配置文件中读取
--config /path/to/config/file
客户端发送 HTTP GET 请求 /client/check_version
得到版本列表,每个版本字段如下
{
"os": "windows",
"version": "2.4.6.3",
"update_percent": 30,
"url": "https://example/update/windows/audit-1.2.3.zip",
}
技术注解: update_percent
表示有几成用户可以更新。先让一小部分人升级,如果没有人反馈问题,慢慢增大 update_percent 的数字,直到 100
比较本地和远程版本,如果发现新版本,则进行如下计算
# 以下是伪码,判断当前客户端是否被“选中”升级
# 0 <= updater_percent <= 100
def is_chosen_update(beta_hosts: str, update_percent: int) -> bool:
if update_host in beta_hosts:
return True
random_seed = get_home_path() # 以用户家目录为种子
seed_ascii_sum = sum([ord(i) for i in random_seed])
lucky_number = seed_ascii_sum % 100
can_update = lucky_number <= update_percent
return can_update
下载更新包,解压到 installed_root
目录
压缩包解压后的为 bin-1.2.3 格式
installed_root\version