总的来说,和JIT即时编译机制有相通之处,就是一个创建时间的比较
首先要明白:客户端的文件如果是最新的,那么创建时间肯定晚于服务器上文件的创建时间,反之客户端的文件就是旧的需要更新了,但是为了提高更新效率,并不是一个个和服务器上的文件做对比
而是建立一个文件列表索引文件,里面记录服务器上的“最新版”所有文件的创建时间,首先更新本地的索引文件,如果更新了,说明服务器上的文件列表有更新,然后和本地做对比,整理一份需要更新或新建的文件列表清单,然后主动连接服务器进行下载,全部完成以后,在索引文件进行记录,更新完一个就记录一个ok,这样方便“断点续传”,所有都更新完成,全部是ok了,就证明本地都是最新的了,不过这里面有个小问题是值得注意的,本地文件的创建时间不能是本地计算机的时间,应该下载完以后,修改成服务器的当前时间,(比如如果本地时间设置到了一年以前)那本地的列表可能永远都是旧的,每次都要更新,这是可怕的。
通过这个文件列表索引,能大大提高更新效率,而且也能做好版本的控制。
另外,更新服务器一般和游戏服务器分离,大致思路就是这样
打包和网络传输方面,自己封装一套序列化和反序列化的IO流协议就可以了,游戏里面这些都必须是最基本的功能了
当然,这套思路还有一些不完善的地方,比如更新正在运行的exe或一些内存保护的DLL,是比较麻烦的事情,需要尽量避免