Golang 热更新程序OTA的实现之equinox-io分析
给golang开发者介绍一款移植性非常优秀的自动更新项目
https://github.com/equinox-io/equinox/
该项目的官方提供商业的自动更新服务,提供了三种免费/付费选择。
- sandbox 免费5次发布
- Base 基础班 29刀一个月
- Business 商业版 99刀一个月
https://equinox.io/
体验使用equinox
一开始完全是懵逼状态,感觉只要能用自动更新就行,发布了第六个版本的时候被限制了。 所以便开始考虑自己开发一套OTA更新平台,这套东西涉及到很多的模块- 1、发布二进制程序的工具;
- 2、发布版本管理后台;
- 3、客户端SDK;
- 4、其他(存储、校验、安全等)
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防止中文乱码