3d Game Walkman

3d图形渲染,网络引擎 — tonykee's Blog
随笔 - 45, 文章 - 0, 评论 - 309, 引用 - 0
数据加载中……

游戏资源在线更新的思路

总的来说,和JIT即时编译机制有相通之处,就是一个创建时间的比较

 

首先要明白:客户端的文件如果是最新的,那么创建时间肯定晚于服务器上文件的创建时间,反之客户端的文件就是旧的需要更新了,但是为了提高更新效率,并不是一个个和服务器上的文件做对比

而是建立一个文件列表索引文件,里面记录服务器上的“最新版”所有文件的创建时间,首先更新本地的索引文件,如果更新了,说明服务器上的文件列表有更新,然后和本地做对比,整理一份需要更新或新建的文件列表清单,然后主动连接服务器进行下载,全部完成以后,在索引文件进行记录,更新完一个就记录一个ok,这样方便“断点续传”,所有都更新完成,全部是ok了,就证明本地都是最新的了,不过这里面有个小问题是值得注意的,本地文件的创建时间不能是本地计算机的时间,应该下载完以后,修改成服务器的当前时间,(比如如果本地时间设置到了一年以前)那本地的列表可能永远都是旧的,每次都要更新,这是可怕的。

通过这个文件列表索引,能大大提高更新效率,而且也能做好版本的控制。

另外,更新服务器一般和游戏服务器分离,大致思路就是这样

打包和网络传输方面,自己封装一套序列化和反序列化的IO流协议就可以了,游戏里面这些都必须是最基本的功能了

当然,这套思路还有一些不完善的地方,比如更新正在运行的exe或一些内存保护的DLL,是比较麻烦的事情,需要尽量避免

posted on 2009-05-08 23:27 李侃 阅读(2301) 评论(9)  编辑 收藏 引用 所属分类: 网络模块

评论

# re: 游戏资源在线更新的思路  回复  更多评论   

本人的思路,不用比较创建的时间,用版本号来比较不是危险性低一些么。每个文件都有一个版本号,更新一次版本号add下。本地一份文件列表(包含文件版本号),更新的时候如你所说,下载一份文件列表(同样是有版本号的)比较版本来更新。本人的看法,还请斟酌.
2009-05-09 14:03 | miwei

# re: 游戏资源在线更新的思路  回复  更多评论   

那DLL里面的版本号呢?功能模块的DLL都是编译器生成的,你要在每个DLL里面再附加资源信息吗?我觉得有点繁琐了。何况如果每个文件都去解析里面的版本号的数据,速度是会很慢的,不仅繁琐,而且更难控制。
不过一些版本控制软件的却是加了版本号的,但也是有版本索引文件去记录这些版本,但绝对没有要求一定要在源文件中去加版本号。所以时间要素控制版本是高效便宜的做法
2009-05-09 22:42 | 李侃

# re: 游戏资源在线更新的思路  回复  更多评论   

有点问题:
如果按照楼主的做法,那么每次更新都需要检查。目前客户端资源都是上G的,那么这个操作就会非常耗时。
而且这么做服务器的资源必须零散存放。
但目前资源基本都是打包出现的。

楼主的这个操作是需要的,只是在客户端出现资源不完整时候才需要这么做。一般值需要比较版本,下载压缩包,更新就可以了。
2009-05-10 13:19 | chib

# re: 游戏资源在线更新的思路  回复  更多评论   

这种方法有点麻烦。。
倒不如生成一个XML里面写入各个文件的名称和md5码。。
这样在读取下载XML后对比客户端的XML文件里的MD5就行了。。
2009-05-10 15:10 | 笨笨狼

# re: 游戏资源在线更新的思路  回复  更多评论   

用客户机本地的时间是非常不安全的,用户有可能因为某种原因修改时间。
笨笨狼同学的办法是现在网游大多采用的一种方法。不过需要注意网络的缓存问题,最好用FTP服务器来存放XML文件。
2009-05-11 09:34 | kevin.c

# re: 游戏资源在线更新的思路[未登录]  回复  更多评论   

我们的做法:
做一个更新服务器,用来匹配资源版本号。
客户端每次登陆前都先连接更新服务器,如果发现有新的版本,则去文件服务器(http,ftp服务器)下载更新包。之后客户端本地解压打包就完成了更新。
2009-05-20 08:39 | christanxw

# re: 游戏资源在线更新的思路  回复  更多评论   

既然客户端那么大,可以尝试用P2P 。
2009-05-22 16:26 | wangok

# re: 游戏资源在线更新的思路  回复  更多评论   

你在样不太好的。 因为我们以前这样做过,当时打过包后。一个GUI.xx就是40MB 假如想更新一个图片就要更新40m的包 ,如果详细划分包里面的文件。
那文件列表就会很大。所以这并不太完美。 最后我也是和 christanxw 的做法一样了,。
2009-10-13 17:14 | Johnson

# re: 游戏资源在线更新的思路  回复  更多评论   

如何获得服务器上文件的创建时间捏?
2014-04-29 16:23 | jcjc

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理