我正在为游戏客户端开发一个更新程序,这样玩家在更新时就不必下载整个客户端。
现在,创建标准更新程序并不难,但是对于大文件来说却很慢。
客户端未压缩大约 1.5 GB,有大约 250 个文件。更新服务器上的文件经过 gzip 压缩并通过 HTTP 下载。
更新程序的工作方式如下:从服务器获取补丁列表 -> 将补丁列表中的文件与本地文件(crc32 / 文件大小)进行比较 -> 如果丢失/错误的文件大小/哈希不一样 -> 从服务器下载 gzip 压缩文件 -> 解压缩文件
更新程序最耗时的部分:为每个文件生成 crc32 哈希/下载大文件
我想到了一些可以加快速度的事情:
类似 Rsync 的 diff 更新程序 - 这将加快下载速度,因为它只会获取文件的不同部分,而不仅仅是下载整个文件。这会很有帮助,因为通常客户端更新不会影响大文件的许多部分。但我想这将是某种矫枉过正。
更好的压缩——当客户端被压缩时,Gzip 节省了大约 200 MB。我还没有尝试使用其他一些压缩方法,但我猜 bzip2、lzma 或其他方法会节省更多空间并加快下载速度。具有讽刺意味的是,它们会减慢文件的解压缩速度。
其他文件检查方法 - 目前我正在使用 C# crc32 实现,因为它比标准 c# md5 实现更快。有没有更快的算法可以判断文件是否相同?
版本系统 - 它实际上不会加速任何事情,但更新程序不必计算所有哈希值。如果用户愿意,它可以通过额外的“修复”功能检查所有文件与实际版本。
我应该使用这些解决方案中的哪一个,或者是否有任何我没有列出我应该使用的方法?