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访问站点

来源: 雨林博客(www.yl-blog.com)