断断续续一个月时间,中间各种任务穿插。最后终于写了一个自动更新服务网站和自动更新客户端。基本功能测试完毕。记录下
需求
自动集成,回退版本,守护进程,服务端操作,更新维度,脚本控制(bat)多个客户端。
介绍
AutoUpdateServer采用Nancy WEB框架。
功能:1.提供上传文件的接口
2.匹配文件并且建立多个不用客户端的文件仓库
3.打包,提供更新包,
AutoUpdateClient采用控制台
功能:1.轮循请求服务端,检查当前客户端是否需要更新
2.检查客户端是否空闲
3.更新客户端文件
4.脚本控制客户端特殊文件
5.检查客户端进程是否关闭,如果关闭则打开(非更新状态下)
客户端
功能:提供当前是否空闲接口
新的知识点梳理
1.Nancy.Forms authentication
2.Nancy CSRF防御
3.Nancy 静态文件的使用
4.7ZIP 压缩解压
5.命名管道通讯
6.自动更新算法逻辑
其他:Nancy IIS部署的时候的权限释放,CRC包的加密,log4net
核心算法
核心的算法都在服务端(大部分时间差不多都花在这里。改了四五次,累)
1.匹配文件。生成更新包。一开始相的是通过version,其实有更好的方法。下面贴出方法。
2.文件仓库管理算法(代码就不贴了。说下逻辑)类似SVN
//1.第一次上传的时候或者当前没有出新文件的时候。和模板文件匹配.
BaseModel是基文件,因为每个客户端其实类似,部分DLL不同而已。所以第一次都先匹配这个
//2.第二次开始:
// A【修改】.上传文件和本地文件都存在,对比不同,则把最新的文件复制到work目录和仓库目录,并且设置上传文件version为最新version(存入数据库时)
// B【不变】.上传文件和本地文件都存在,对比相同,不复制文件,设置上传文件version为老版本文件的version(存入数据库时)
// C【新增】.上传文件存在,本地文件不存在,则把最新的文件复制到work目录和仓库目录,并且设置上传文件version为最新version(存入数据库时)
// D【删除】.上传文件不存在,本地文件存在。暂时不操作。
3.控制回滚 (代码不贴)
逻辑:数据库记录每次上传的文件版本信息。回滚时就想减,就拿到新的文件
效果图: