介绍一个曾经在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:将本地的资源与配置表中的资源保持一致,规则为:
以上方案还可以做如下改进:
原理是相同的。
OK,就到这里,感谢大家的收看。
转载注明出处:)