[原创]一种简单的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的方式破 ...
随机推荐
- GodSon Easyui 结合Pluplaod插件的文件分割上传
自己整理了一个文件分割上传的实例,提供研究学习使用. 在线查看效果 下载该资源pluplaod文件分割上传Demo.zip 简介: 首先,进入页面会看到下面的效果: 点击一个按钮,出现如图 ...
- c++ string char* const char*
#include <iostream> #include <string> #include <cstring> using namespace std; int ...
- spoj 416
又臭又长的烂代码 ...... #include <iostream> #include <cstdio> #include <cstring> #include ...
- Clojure语法学习-循环
do和块语句 在Scala中,花括号{}括起来的语句构成一个block,它的值就是最后一个语句的值. scala> val a = { | println("a") | 1} ...
- html5移动web开发实战必读书记
原文 http://itindex.net/detail/50689-html5-移动-web 主题 HTML5 一.配置移动开发环境 1.各种仿真器.模拟器的下载安装 http://www.mob ...
- linux useradd添加用户
useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户. useradd -m -s /bin/bash -g 群组名 用户名 其中 -m:自动建立用户的登入目录. -s:指定用户 ...
- UR #13 Yist
第一次打UR,打了一个半小时就弃疗了QAQ 这是我唯一一道考试的时候做出来的题目,其他两道连暴力都懒得写了 很容易发现对于每个要删除的点 我们找到左边第一个比他小的不用删除的点,右边第一个比他小的不用 ...
- xcode 预编译头文件
xcode 预编译头文件 cocos2d-prefix.pch #import <Foundation/Foundation.h>
- 关于MIM金属注射成型技术知识大全
1.什么是MIM MIM即(Metal Injection Molding)是金属注射成型的简称.是将金属粉末与其粘结剂的增塑混合料注射于模型中的成形方法.它是先将所选粉末与粘结剂进行混合,然后将混合 ...
- QT的Paint 系统
下面对于QT的绘制系统做一个简要说明, 这个系统主要由三部分组成, QPainter, QPaintDevice, QPaintEngine. QPainter 是一个绘制接口类,提供绘制各种面向用 ...