[CC] Cocos2d-x热更新后台实现

转载 2016年08月30日 18:34:52
后台环境:
python 2.7 + webpy0.37
webpy安装:
1、解压webpy,cmd至webpy路径下
2、cmd运行python setup.py install
详细了解webpy,请访问其官网:http://webpy.org/


为了保持客户端最安全与最小化热更新,我们需要判断出每个版本的差异,将差异文件下载到客户端。为了差异识别,我们将生产res与src下所有文件的MD5,并将其保存至相关文件夹,保存内容如下:
src/test1.lua:e6e8feb29a41a0d83c29c834c10a42a2
src/test2.lua:b87957f382a4a292db91bd937b66a000
res/ani/enemy/monster.csb:6a42885d985f777418d97ef956758f2e
res/ani/enemy/monster.exportjson:1c26ec5818281794e98a4d05c3d871c4
后面我们只需要对比客户端当前版本与服务器最新版本的资源列表的md5以及判断哪些是新增文件,这样我们就可最小化获取需要更新的列表。
到此,我们可以将此文件连同当前版本文件放至服务器,让客户端下载更新列表,并在客户端判断需要下载那些文件,但是这样真的好么,如果一次更新n个文件,那样的连接将会有n次,可能是我多虑了。但我考虑到我们的版本不可能无限次发布,因此我决定将版本差异的包放在服务器,这样客户端只用告诉我们他当前什么版本,就可以获取到升级至最新版本的更新包。
比如客户端当前版本为1.0,服务器最新版本为2.0,通过url传至服务器,客户端就可以获取一个1.0升级到2.0的资源包,客户端通过assertManager可以文件解压,我们再将解压目录文件移动至我们的查找目录就ok了。
服务器通过各个版本的资源列表,获取改动和新增的文件,并将其打包压缩至zip文件。而且由于我们发布的版本是确定的,因此这些更新文件在服务器只会生成一次,对服务器来说基本没什么压力,而且我们可以将其预先生成,保存至服务器。

在服务端,我采用如下路径配置:
App:(项目名称)
--project:(保存最新项目资源,手工配置)
----res:(资源路径)
----src:(脚本路径)
--publish:(更新包路径,目录下文件自动生成)
----version.txt (当前最新版本号,手工修改)
----1.0(1.0版本包)
------list.txt(当前版本1.0的资源列表及MD5)
------update.zip(只有基本版本才会在当前路径层级下有更新包)
----2.0
------list.txt
------1.0
--------update.zip(1.0升级到2.0需要的更新资源包)
...
我们需要手工配置下project文件,这里面保存我们所发布的最新资源和脚本;publish下保存的是各种版本的更新包。
最终我们运行程序后,可以通过url访问版本与获取更新资源包:
获取最新版本号:http://127.0.0.1:8080/?action=ver

下载更新包:http://127.0.0.1:8080/?action=update.zip&ver=1.1(ver为本地当前版本,url中需要有.zip,cocos2d-x终对url做了判断)

项目工程: 点击下载



相关文章推荐

quick-cocos2d-x游戏开发【10】——触摸捕获事件 cc.NODE_TOUCH_CAPTURE_EVENT

如果看过sample中touch的代码,你会发现示例中有一个cc.NODE_TOUCH_CAPTURE_EVENT事件,它和cc.NODE_TOUCH_EVENT触摸事件一样,是引擎级别的事件,我们来...

Cocos2d-x之CC_CALLBACK详解

本文转载于CC_CALLBACK 与 std::bind之间不可告人的秘密 本篇的主题就是揭露CC_CALLBACK 与 std::bind之间不可告人的秘密……首先看一段代码: [cpp] vi...

Cocos2d-x3.0-std::bind与CC_CALLBACK不得不说的故事

本篇的主题就是揭露CC_CALLBACK 与 std::bind之间不可告人的秘密…… 首先看一段代码: //先是创建3个精灵 boy = Sprite::create("boy.png");//创建...

详解Cocos2d-X中宏CC_DLL

转载自:http://www.ziliao1.com/Article/Show/716662CB4AD94EB2D020C3E74EA62A4C.html 在cocos2d-x的源码中,...

Cocos2d-x Lua 回调函数cc.CallFunc类,内部调用其他类函数报空

版本:cocos2d-x 3.11 语言:Lua   今天逛了一遍论坛,看到一些独立游戏制作者制作的游戏,感觉好羡慕。自己也有种想要制作一个的冲动,不过不是那种益智类的小游戏,而是世界观庞大的高自...

详解Cocos2d-X中宏CC_DLL(转)

在cocos2d-x的源码中,经常可以看到宏CC_DLL的使用,比如在类CCScene的定义中: class CC_DLL CCScene : public CCNode { public:    ...

quick-cocos2d-x游戏开发【10】——触摸捕获事件 cc.NODE_TOUCH_CAPTURE_EVENT

如果看过sample中touch的代码,你会发现示例中有一个cc.NODE_TOUCH_CAPTURE_EVENT事件,它和cc.NODE_TOUCH_EVENT触摸事件一样,是引擎级别的事件,我们来...

【cocos2d-x 3.0之四】CC_CALLBACK原理及应用

c++ 11 基础 :     std::function         类模版 std::function是一种通用、多态的函数封装。std::func...

Cocos2d-x 中的 CC_DLL

在cocos2d-x的源码中,经常可以看到宏CC_DLL的使用,比如在类CCScene的定义中: class CC_DLL CCScene : public CCNode { public:    ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)