zoukankan      html  css  js  c++  java
  • 关于资源增量更新策略

    符号含义

    • {version} : 指游戏版本,一般来说指 SVN 的 HEAD 版本号
    • {new_version} : 指需要更新的游戏版本号
    • {files_info} : 一个记录了完整的游戏文件结构的文件,包含了文件的路径,版本号,大小,MD5等等信息
    • {new_files_info} : 同上,指需要更新的
    • {diff_info} : 文件差异
    • {web_dir} : 指 WEB 服务器的根目录
    • {res} : 指游戏资源目录

    预先操作

    默认每次发布游戏,不管是发布大版本的安装包,还是小版本的资源更新,都会有一个唯一的版本号 {version} ,这个版本号可以通过一个固定的 WEB API 去获取,比如 http://cdn.game.xxx.com/version.php

    初始化

    在 {web_dir} 创建文件名为 {version} 的文件夹,然后上传游戏资源到 {version} 目录下,目录结构为 {web_dir}/{version}/{res}

    更新准备

    每次更新之前,将 {files_info} 和 {new_files_info} 进行比对,计算出文件差异 {diff_info},比如增加了什么文件,删除了什么文件,修改了什么文件等等,{diff_info} 的文件内容大概是这样:
    +icon/skill/100.assetbundle
    -icon/skill/101.assetbundle
    *icon/skill/102.assetbundle
    + 表示增加,- 表示删除,* 表示修改,这个完全可以自己定义

    游戏更新

    当需要发布新版本的时候,此时版本号为 {new_version} ,在 {web_dir} 创建文件名为 {new_version} 的文件夹,然后递归的将 {web_dir}/{version} 中的所有文件做软链接,做到 {web_dir}/{new_version} 中,只对文件创建软链接,文件夹需要创建,此时,{web_dir}/{new_version} 拥有和 {web_dir}/{version} 一样的资源,但完全不占用硬盘空间。
    接着,将 {diff_info} 中的信息应用到 {web_dir}/{new_version} 中,如果增加,就将软链接删除,并且上传资源,依此类推。

    需要注意的地方

    软链接的删除需要回溯到最根源的地方,因为随着游戏版本发布的增多,可能最新版本的文件,其他链接的目标是一个很老的版本的文件。

    ------

    大概的思路就是这样





  • 相关阅读:
    gif&png&jpg&webp
    设计点滴&css效果点滴
    backbone点滴
    js自己总结的小东西(打印出来方便学习)
    nodejs点滴
    js类型
    mongo学亮的分享
    npm package.json中的dependencies和devDependencies的区别
    161130、Dubbo+SpringMVC工程创建详解
    161129、详解5种跨域方式及其原理
  • 原文地址:https://www.cnblogs.com/yili16438/p/7d5d84602a5aa307e3f38c0bfb7fe11e.html
Copyright © 2011-2022 走看看