[原创]一种简单的cocos2d-x动态更新方案
介绍一个曾经在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。
以上方案还可以做如下改进:
原理是相同的。
OK,就到这里,感谢大家的收看。
转载注明出处:)
[原创]一种简单的cocos2d-x动态更新方案的更多相关文章
- iOS 利用 Framework 进行动态更新
http://nixwang.com/2015/11/09/ios-dynamic-update/ 前言 目前 iOS 上的动态更新方案主要有以下 4 种: HTML 5 lua(wax)hotpat ...
- asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...
- [原创]一种Unity2D多分辨率屏幕适配方案
此文将阐述一种简单有效的Unity2D多分辨率屏幕适配方案,该方案适用于基于原生开发的Unity2D游戏,即没有使用第三方2D插件,如Uni2D,2D toolkit等开发的游戏,NGUI插件不受这个 ...
- mybatis的update操作的几种动态更新
mybatis是我们开发者常用的dao框架,亿轻巧灵活为特征,在crud操作中,动态更新是常用的操作.我搜集了两种动态更新的sql写法,以备日后备用! 方法1: update loan_product ...
- 【MFC】picture控件 两种有细微差别的动态加载图片方法
摘自:http://www.jizhuomi.com/software/193.html VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) 分类标签: 编程入门 ...
- 一种基于RBAC模型的动态访问控制改进方法
本发明涉及一种基于RBAC模型的动态访问控制改进方法,属于访问控制领域.对原有RBAC模型进行了权限的改进和约束条件的改进,具体为将权限分为静态权限和动态权限,其中静态权限是非工作流的权限,动态权限是 ...
- 一种简单,轻量,灵活的C#对象转Json对象的方案(续)
本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...
- Xamarin.Android之Splash的几种简单实现
对现在的APP软件来说,基本上都会有一个Splash页面,类似大家常说的欢迎页面.启动界面之类的. 正常来说这个页面都会有一些相关的信息,比如一些理念,Logo,版本信息等 下面就来看看在Xamari ...
- Honeywords项目——检查密码是否被破解的一种简单方法
Honeywords项目使用一种简单的方法来改进hash后的密码的安全性——为每个账户维护一个额外的honeywords(假密码).如果有黑客拿到了密码的文件,然后试图用brute froce的方式破 ...
随机推荐
- linux驱动系列之s3c2440内存布局
刚开始学习linux在2440上面 linux内核分配标志可以分为三类:行为修饰符.区修饰符.类型. 区修饰符表示从哪儿分配内存,内核把物理内存分为多个区,每个区用于不同的目的. 内存中缓冲区存在的原 ...
- 实时数据处理环境搭建flume+kafka+storm:0.环境依赖
storm需要java和Python 部署依赖环境 --- 要求Java 6+ .Python 2.6.6+ java,python安装配置完成
- bzoj 1222: [HNOI2001]产品加工 dp
1222: [HNOI2001]产品加工 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 381 Solved: 218[Submit][Status ...
- *****正则表达式匹配URL
最近将匹配URL的正则替换了下 之前的是: ((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3 ...
- android应用崩溃的调试方法(c++ lib so文件库崩溃)
android调试工具addr2line使用: 1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export P ...
- 二维图形的矩阵变换(三)——在WPF中的应用矩阵变换
原文:二维图形的矩阵变换(三)--在WPF中的应用矩阵变换 UIElement和RenderTransform 首先,我们来看看什么样的对象可以进行变换.在WPF中,用于呈现给用户的对象的基类为Vis ...
- Spring中的实例生成方式及其生命周期
三种实例化bean的方式1.使用类构造器实例化 <!-- 使用类构造器实例化,class属性表示要使用的类的全限定名 --> <bean id="userDao1" ...
- P90、面试题11:数值的整数次方
题目:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 需要注意的地方: 1)输入的指 ...
- linux page cache和buffer cache
主要区别是,buffer cache缓存元信息,page cache缓存文件数据 buffer 与 cache 是作为磁盘文件缓存(磁盘高速缓存disk cache)来使用,主要目的提高文件系统系性能 ...
- 远程唤醒 N54L
远程唤醒 N54L 我的N54L装了一块买时带的WD500G黑盘,又装了一个WD2T绿盘,存些电影歌曲什么的,当NAS用,装的WIN7系统,长时间不使用就自动关机了,每次都得按一下电源开关键,于是就研 ...