5000 元 10 天内按要求完成一个跨平台自升级客户端程序

2020-11-30 19:35:08 +08:00
 albertofwb

联系方式

wechat: albertofwb

请注明 升级客户端-外包

开发者要求

  1. 有独立客户端软件开发经验,提供你做过的客户端 git 连接
  2. 熟练 linux 操作系统,没有该经验只怕难以写出跨平台客户端

工期与酬劳

工期 不超过 10 天

报酬 5000 元

外包过期时间

本外包发布日期 2020-11-30

过期时间 2020-12-3 23:59

自升级程序需求说明

编辑时间: 2020-11-30 11:20

1 、背景说明

假设你用 pyqt 制作编写了一款工具软件,使用 pyinstaller 集成依赖,基于 NSIS 生成安装包给客户端使用。每当有 bug 解决或者新增特性时,为了方便用户使用到最新版本的软件。需要一个程序,定期检测是否有新版本存在,并将其下载到本地。

2 、开发要求

1 、功能要求

  1. 可使用 C/C++/Golang 任意一种种编译型语言,确保编译后只有一个 exe
  2. 使用 github 平台托管代码,命名为 updater 每天都要有 commit 记录
  3. 每个模块需要有测试函数,具体要求参考此项目 proxychains-ng
  4. 以 YYYY-mm-dd HH:MM:DD log-level 的格式,记录日志到文件中
  5. 不要被网络异常,文件权限错误等情况搞得 crash,谨慎处理异常

2 、功能要求

  1. 支持配置文件和命令行的解析
  2. 提供构建脚本,一键获取源码,安装依赖并自动构建可执行程序
  3. 提供测试脚本,一条命令跑完所有单元测试

3 、系统支持

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 、升级流程

  1. 客户端发送 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

  2. 比较本地和远程版本,如果发现新版本,则进行如下计算

    # 以下是伪码,判断当前客户端是否被“选中”升级
    # 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
    
  3. 下载更新包,解压到 installed_root目录

压缩包解压后的为 bin-1.2.3 格式

  1. 更新版本文件,将当前版本写入文件 installed_root\version
260 次点击
所在节点    外包
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/730713

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX