联系方式
wechat: albertofwb
请注明 升级客户端-外包
开发者要求
- 有独立客户端软件开发经验,提供你做过的客户端 git 连接
- 熟练 linux 操作系统,没有该经验只怕难以写出跨平台客户端
工期与酬劳
工期 不超过 10 天
报酬 5000 元
外包过期时间
本外包发布日期 2020-11-30
过期时间 2020-12-3 23:59
自升级程序需求说明
编辑时间: 2020-11-30 11:20
1 、背景说明
假设你用 pyqt 制作编写了一款工具软件,使用 pyinstaller 集成依赖,基于 NSIS 生成安装包给客户端使用。每当有 bug 解决或者新增特性时,为了方便用户使用到最新版本的软件。需要一个程序,定期检测是否有新版本存在,并将其下载到本地。
2 、开发要求
1 、功能要求
- 可使用 C/C++/Golang 任意一种种编译型语言,确保编译后只有一个 exe
- 使用 github 平台托管代码,命名为
updater每天都要有 commit 记录 - 每个模块需要有测试函数,具体要求参考此项目 proxychains-ng
- 以 YYYY-mm-dd HH:MM:DD log-level 的格式,记录日志到文件中
- 不要被网络异常,文件权限错误等情况搞得 crash,谨慎处理异常
2 、功能要求
- 支持配置文件和命令行的解析
- 提供构建脚本,一键获取源码,安装依赖并自动构建可执行程序
- 提供测试脚本,一条命令跑完所有单元测试
3 、系统支持
- win7/win10
- ubuntu 18.04
3 、配置文件格式
check_url = http://example.com/client/check_version
# 如果升级服务器位于以下主机名单中,直接升级,不计算升级概率
beta_hosts = test_1.com, 192.168.114.1
4 、命令行说明
# 如果没有提供此参数,输出到 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
5 、升级流程
-
客户端发送 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
