1. 程式人生 > >自己主動升級系統的設計與實現(續2) -- 添加斷點續傳功能 (附最新源代碼)

自己主動升級系統的設計與實現(續2) -- 添加斷點續傳功能 (附最新源代碼)

blog down 決定 top lin dom itl com 關於

一.緣起    

  之前已經寫了兩篇關於自己主動升級系統OAUS的設計與實現的文章(第一篇、第二篇)。在為OAUS服務端添加自己主動檢測文件變更的功能(這樣每次部署版本號升級時,能夠節省非常多時間。並且能夠避免手動改動帶來的錯誤)後,有部分使用者又提出了一個非常好的建議:為OAUS添加斷點續傳功能。由於假設網絡狀態不是非常好,就常常會在升級到一半的時候,由於OAUSclient掉線而導致升級失敗,這個時候,就必須又一次開始整個升級過程。

即使升級中斷的時候。已經完畢了99%,也必須重頭再來。所以,為OAUS添加斷點續傳功能是非常必要的。

  如今,最新版本號的OAUS已經添加了這個重要特性,當升級由於掉線而中斷的時候,OAUSclient並不會退出,而是一直嘗試斷線重連,重連成功後,就會從上次中斷的地方繼續升級。例如以下圖所看到的:

技術分享

技術分享

  在網絡狀態極差時,可能在一次升級的過程中。會出現多次斷線重連的情況。這都沒關系,OAUSclient會一直正常工作,直到整個升級過程完畢為止。 

二.源代碼實現

  以下簡單說明一下代碼實現的詳細過程,OAUS斷點續傳功能是在client實現的,服務端不須要做不論什麽改動。

1.預定網絡連接斷開的事件,得到掉線通知。此時。須要記錄是在升級第幾個文件的時候。升級中斷的。

2.預定重連成功時間。得到網絡鏈接恢復的通知。

此時。開始又一次下載下一個須要升級的文件。

技術分享
    void rapidPassiveEngine_RelogonCompleted(LogonResponse res)
    {
        
if (res.LogonResult == LogonResult.Succeed) { this.DownloadNextFile(); this.logger.LogWithTime("重連成功。開始續傳。"); if (this.UpdateContinued != null) { this.UpdateContinued(); } return
; } }
技術分享技術分享
    private void DownloadNextFile()
    {
        if (this.haveUpgradeCount >= this.fileCount)
        {
            return;
        }

        DownloadFileContract downLoadFileContract = new DownloadFileContract();
        downLoadFileContract.FileName = this.downLoadFileRelativeList[this.haveUpgradeCount];
        //請求下載下一個文件
        this.rapidPassiveEngine.CustomizeOutter.Send(InformationTypes.DownloadFiles, CompactPropertySerializer.Default.Serialize(downLoadFileContract));               
    }
技術分享

  加上以上的邏輯處理之後,OAUS就已經具備了斷點續傳的功能了。代碼看起來非常easy,那是由於內部核心的文件傳送功能、斷點續傳功能都由ESFramework封裝好了。

在為OAUS添加斷點續傳功能時,就不須要再次實現與斷點續傳相關的繁瑣的業務邏輯了。

3. 怎樣使用OAUS升級機制的說明

  一般而言,假設最新client程序與老版本號兼容,不升級也影響不大,則能夠交由用戶決定是否升級。假設最新client程序不兼容老版本號,或者是有重大更新,則將啟動強制升級。假設流程要進入啟動升級,那麽僅僅要啟動AutoUpdater的目錄下AutoUpdater.exe就能夠了。

要註意的是。啟動AutoUpdater.exe進程後,要退出當前的client進程。否則,有些文件會由於無法被覆蓋而導致更新失敗。代碼大致例如以下所看到的:

  if (VersionHelper.HasNewVersion(oausServerIP,oausServerPort)) 
  {      
       string updateExePath = AppDomain.CurrentDomain.BaseDirectory + "AutoUpdater\\AutoUpdater.exe";   
       System.Diagnostics.Process myProcess = System.Diagnostics.Process.Start(updateExePath);     
       ......//退出當前進程  
  } 

三.相關下載

1.自己主動升級系統OAUS - 源代碼

2.自己主動升級系統OAUS(可直接部署)

3.自己主動升級系統OAUS - 使用手冊

  假設有不論什麽建議或問題。請留言給我。


自己主動升級系統的設計與實現(續2) -- 添加斷點續傳功能 (附最新源代碼)