斷斷續續一個月時間,中間各種任務穿插。最后終于寫了一個自動更新服務網站和自動更新客戶端?;竟δ軠y試完畢。記錄下
需求
自動集成,回退版本,守護進程,服務端操作,更新維度,腳本控制(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.控制回滾 (代碼不貼)
邏輯:數據庫記錄每次上傳的文件版本信息?;貪L時就想減,就拿到新的文件
效果圖: