亡羊补牢,犹未晚也 学习会更快乐

一种简单的cocos2d-x动态更新方案

2017-03-30

介绍一个曾经在cocos2d - x项目中使用过的动态更新方案, 这个方案简单易行, 针对小的项目非常有用。

这个方案有两个核心的关键词: JSON, MD5。

原理可以简单地概括为: 服务端持有所有动态更新资源文件的列表及各文件的MD5值, 客户端通过从服务端获取包含有此文件列表的配置文件使本地的资源文件与服务端列表中的文件保持一致。

这种更新方式是与增量更新不同的, 客户端更新文件的条件并不是服务端告知客户端, 需要更新哪些文件, 而是由客户端自己比对与服务端资源文件的不同, 然后自己去更新。 例如, 服务端动态更新列表有A, B, C三个文件, 而客户端有C, D两个文件, 那么这时客户端需要删除文件D, 再下载文件A, B, 并根据比对C的MD5值来判断是否更新C。 即无论何时, 客户端本地的资源文件总是要无条件的与服务端保持一致。

大致流程如下图:

A: 配置文件格式为JSON, 主要内容包括res, download_url, version三部分:

res: 服务端资源文件列表与其对应的MD5值;

download_url: 资源文件的下载地址;

version: 资源列表的版本号。

一个例子:

{
    "res": [{
        "name": "foo.data",
        "md5": "734dc847ac286362b250955b4ffdade8"
    }, {
        "name": "promotion.png",
        "md5": "a01a93ca0e3f818cf788c086de967cad"
    }],
    "download_url": "www.foo.com",
    "version": "123"
}

此文件说明动态更新资源列表中有两个文件, 一个是foo.data, 它的md5值为734dc847ac286362b250955b4ffdade8, 另外一个文件为promotion.png, 它的md5值为a01a93ca0e3f818cf788c086de967cad, 资源下载地址为: www.foo.com, 此资源列表的版本号为123

B: 解析完配置文件后, 将其删除, 本地不保存;

C: 将本地的资源与配置表中的资源保持一致, 规则为:

配置文件资源列表中有文件A, 而本地没有文件A, 则从服务端下载; 配置文件资源列表中没有文件A, 而本地有文件A, 则从本地将A删除; 配置文件资源列表中有文件A, 本地也有文件A, 则比较两个文件的MD5值, 如果相同, 则不做操作, 如果不同, 则下载服务器文件A, 替换本地文件A。 以上方案还可以做如下改进:

原理是相同的。



下一篇 centos7 搭建 svn

目录