[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做了判断)

项目工程: 点击下载



【步兵 cocos2dx】热更新(下)

【步兵 cocos2dx】热更新(下) By EOS.上一篇把基本的理论都讲了一遍,接下来讲一下代码部分。 (ps:上下两篇讲完刚好,如果再来个上中下。。。岂不成三集篇了 =、=?)热更否我这边启动...
  • id___E_O_S___
  • id___E_O_S___
  • 2017年06月12日 00:12
  • 492

Cocos2dx Lua 热更新

在我没接触热更新之前,我对热更新是一脸懵逼。后来看了些资料,自己动手试验了下,基本上了解了它的过程。 所谓的热更新,就是在线更新代码和资源。 热更新的过程 首先,客户端向服务器发送请...
  • u010693827
  • u010693827
  • 2017年02月13日 13:55
  • 2108

cocos2dx 3.1.1 在线热更新 自动更新(使用AssetsManager更新游戏资源包)

为什么要在线更新资源和脚本文件? 简单概括,如果你的游戏项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新...
  • yixiao3660
  • yixiao3660
  • 2016年10月14日 16:22
  • 1252

Cocos2dx一步一步实现Android端热更新(C++)

现在Cocos2dx开发的网游基本上都支持热更新功能,但大多都用LUA语言开发,由于我们项目启动时间较早,开发语言为C++,今天就把自己的项目是怎么一步一步实现热更新的, 分享给大家:   ...
  • a2651257380
  • a2651257380
  • 2016年02月19日 14:26
  • 1394

【cocos2d-x 3.5】简单Lua 热更新

local title = root:getChildByName("Text") local function onError(errorCode) if errorCode == cc....
  • slow_liao
  • slow_liao
  • 2015年05月19日 21:49
  • 4096

cocos3.3 无限热更新问题

今天碰到的,每次进应用都会更新。查得原来3.3在热更新的时候会先对比远程版本和本地版本,如果本地安装包版本大于远程版本就会删掉本地热更新的目录,这就造成了每次重新登录都会更新的错误。。。...
  • wanziqin
  • wanziqin
  • 2016年12月01日 19:21
  • 478

【Cocos2d-x】实现资源热更新

转载地址:http://blog.csdn.net/linchaolong/article/details/42321767 热更新介绍 什么是热更新? ...
  • u011458784
  • u011458784
  • 2015年01月07日 23:44
  • 1039

cocos2d-x 3.10 热更新 使用AssetsManagerEx

热更新的思路:玩家一启动游戏时,将客户端资源的版本与服务器进行比对,如果客户端版本低于服务端版本,则下载最新的资源,并将客户端的资源版本更新至服务端的版本。由于我们没有对打包出来的APK中的资源有写的...
  • strivero
  • strivero
  • 2016年04月12日 10:09
  • 8716

cocos2d-js热更新

cocos2d-js热更新 1. 热更新基本思路 得到cocoachina论坛上fysp和akira_cn的帮助,理清了游戏热更新的思路: 执行AssetsManager...
  • zhaoguanghui2012
  • zhaoguanghui2012
  • 2015年04月27日 15:50
  • 673

Cocos2d-x 3.6版本学习笔记-热更新

Cocos 3.6版本热更新梳理   cocos热更新实现了项目资源和脚本文件的动态更新。当工程有新的改动时,用户无需重新下载完整的安装包,而是通过对比本地与最新的版本信息,仅下载有改动的文件到本地,...
  • itol925
  • itol925
  • 2015年05月25日 12:09
  • 2467
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[CC] Cocos2d-x热更新后台实现
举报原因:
原因补充:

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