需求背景
项目上要开发一个C/S架构的系统,在客户单位的内网上使用。客户要求,系统上线后,有版本更新时,要能够自动检测新版本并获取更新,而不需要每次使用U盘等介质拷贝安装新版本。基于此需求,我们需要设计一套可以在线更新的C/S架构,在系统启动时,检测服务器有无更新版本,如果有的话,就自动下载新版本组件到本地。更新完成后,启动新版本。
功能设计
服务器端版本库目录
设置一个专门用于发布版本的目录,每个版本有更新时,手动放到此目录下。客户端更新时,也从此目录下获取最新版本。可定义版本文件夹的命名规则,如:版本1、版本2、版本3,或:版本_V20190601、版本_V20190603、版本_V20190610。当然,如果不定义规则,将自动获取最后一次进行写操作的文件夹,视为最新版本。
服务器端版本更新服务接口
- 获取最新版本摘要:包括版本号、版本发布日期、版本更新文件汇总信息(总个数、总大小)等
- 获取最新版本更新文件详细信息:包括相对路径、大小、时间、MD5码等
- 获取最新版本完整信息:包括摘要与更新文件详细信息
- 下载更新文件:根据文件名,从服务器端逐个下载更新文件到客户端
客户端与服务器通信机制
- 基于HTTP协议的WebAPI通信,架构清晰,开发简单,成熟高效。
- HTTP协议传输对象(除文件流外)均采用轻量易解析的JSON格式。
- 内网环境下使用,不考虑客户端身份校验。
客户端更新机制
启动时,首先判断有无版本更新文件,如有,则取得本地版本信息。获取服务器端最新版本,如版本号、版本更新时间、版本文件摘要内容与本地相同,则表示无新版本,不需更新。如不同,则启动更新过程,取得服务器端更新文件信息,逐文件对比服务器端文件与本地文件是否一致,不一致即进行下载更新。
更新的文件先放到一个临时目录下。更新完成时,将更新文件拷贝到可执行文件(主程序)目录下,替换旧版文件。
拷贝替换完成时,删除临时文件,关闭更新窗口,启动主程序(无更新时不显示更新窗口,直接启动主程序)。