Golang 热更新程序OTA的实现之equinox-io分析
给golang开发者介绍一款移植性非常优秀的自动更新项目
https://github.com/equinox-io/equinox/
该项目的官方提供商业的自动更新服务,提供了三种免费/付费选择。
- sandbox 免费5次发布
- Base 基础班 29刀一个月
- Business 商业版 99刀一个月
就问你对于我们普通的开发者来说,这套价格体系贵不贵?>? 反正对普通家庭的我是不会购买的。还不如去买个爱奇艺会员还能天天看4K大片。下面是他的官方地址,你们可以去看看
https://equinox.io/
体验使用equinox
一开始完全是懵逼状态,感觉只要能用自动更新就行,发布了第六个版本的时候被限制了。
所以便开始考虑自己开发一套OTA更新平台,这套东西涉及到很多的模块
- 1、发布二进制程序的工具;
- 2、发布版本管理后台;
- 3、客户端SDK;
- 4、其他(存储、校验、安全等)
估计搭建完这个分发平台全职也需要1-2个月时间,可能出来还是个基础版本。但是如果不做的话,我的10多个设备更新程序时,一台一台的多浪费人力的事情,况且只是我一个人在维护。
于是开始了解equinox.io的sdk实现,golang的大部分项目都是开源的,因为他天生就是为开源而出来的(不想java需要依赖jar,golang是依赖源代码)。通过源代码分析他的原理。
equinox自动更新原理
大概的流程:
- 1、获取本地的系统、架构、版本等信息;
- 2、提交本地信息到检查更新接口;
- 3、响应最新版本信息;
- 4、同意更新,下载新程序替换旧程序;
- 5、重启;
让人兴奋的是
检查更新的接口地址是可配置的
,响应的版本信息也是简单的URL地址,这套sdk完全可以重用。可以节约大部分的时间,既然这样那就“白嫖”过来吧。
数据结构分析
1、检查更新接口
请求方法:POST
- 检查更新的JSON数据结构
AppID: appID,
Channel: opts.Channel,
OS: opts.OS,
Arch: opts.Arch,
GoARM: opts.GoARM,
TargetVersion: opts.Version,
CurrentVersion: opts.CurrentVersion,
CurrentSHA256: checksum,
- 响应的数据结构
{
"Release": {
"Version": "1.2.4"
"Title": "hahahhaha",
"Description": ":",
"CreateDate": "2020-10-10"
},
"DownloadURL": "https://open.joggle.cn/ngrok/darwin_amd64/ngrok",
"checksum": "",
"signature": "",
"available": true,
"patch": ""
}
有了这个数据结构,那么写个接口即可。最佳的选择就是PHP来写了,安装个宝塔面版,简单快速动态编码。
<?php
header('Content-Type:application/json'); //此声明非常重要
echo '{
"release": {
"version": "1.2.4",
"title": "hahahhaha",
"description": ":",
"createDate": "2020-10-10"
},
"download_url": "https://test.joggle.cn/test/ngrok",
"checksum": "",
"signature": "",
"available": true,
"patch_type": ""
}'; //JSON_UNESCAPED_UNICODE防止中文乱码
2、下载新程序接口
随意搭建一个能http或https访问站点