微端热更新

Posted cyct

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微端热更新相关的知识,希望对你有一定的参考价值。

热更新一般需要包含以下东西:

1.URL1:游戏版本配置文件地址

2.URL2:所有资源的MD5配置文件地址

技术图片

 

问题

如果将热更新分为强更和弱更(静默更新),以上的更新策略将会不支持静默更新。

新策略

在下载资源到缓冲区后添加一步是否同步文件。如果直接同步文件则为强更,如果不直接同步文件则为静默更新。在下一次进入游戏的时候判断是否有文件未同步–先同步再检查热更新。

技术图片

 

 ++++++++++++++============================================================+++++++++++++++++++

MD5值 

      Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)。

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

 

 

MD5的md5典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结构如:

MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515

这就是tanajiya.tar.gz文件的数字签名。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。为了让读者朋友对MD5的应用有个直观的认识,笔者以一个比方和一个实例来简要描述一下其工作过程:

大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为司法机关鉴别罪犯身份最值得信赖的方法;与之类似,MD5就可以为任何文件(不管其大小、格式、数量)产生一个同样独一无二的md5"数字指纹",如果任何人对文件做了任何改动,其MD5值也就是对应的"数字指纹"都会发生变化。

 // MD5加密
    public static string Encrypt(string txt)
    {
        // Create a new instance of the MD5CryptoServiceProvider object.
        MD5 md5Hasher = MD5.Create();

        // Convert the input string to a byte array and compute the hash.
        byte[] data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(txt));

        // Create a new Stringbuilder to collect the bytes
        // and create a string.
        StringBuilder sBuilder = new StringBuilder();

        // Loop through each byte of the hashed data 
        // and format each one as a hexadecimal string.
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }

        // Return the hexadecimal string.
        return sBuilder.ToString();
    }

    /**
     * 解密
     * 
     * @param txt
     * @return
     */
    public static string Decrypt (byte[] bs, string key) {
        byte[] keys = Encoding.UTF8.GetBytes (key); // 密钥转换成字节数组
        int iRandom = bs [bs.Length - 1] & 0xff;
        byte KRandom = bs [iRandom];
        byte[] rb = new byte[bs.Length - 2];
        // 异或
        for (int i = 0; i < rb.Length; i++) {
            if (i < iRandom) {
                bs [i] = (byte)(bs [i] ^ KRandom);
                rb [i] = (byte)(bs [i] ^ keys [i % keys.Length]);
            } else {
                bs [i + 1] = (byte)(bs [i + 1] ^ KRandom);
                rb [i] = (byte)(bs [i + 1] ^ keys [i % keys.Length]);
            }
        }
        // byte数组还原成字符串
        return Encoding.UTF8.GetString (rb);
    }

 

以上是关于微端热更新的主要内容,如果未能解决你的问题,请参考以下文章

TypeScript 服务端热更新

Lua开发手记

H5游戏微端打包工具安卓机和苹果机都能进行打包吗?

gom引擎手机端怎么用

腾讯Bugly干货分享美团大众点评 Hybrid 化建设

gom微端有三个未连接