自動升級系統的設計與實現(續2) -- 增長斷點續傳功能 (附最新源碼)

一.緣起    

  以前已經寫了兩篇關於自動升級系統OAUS的設計與實現的文章(第一篇第二篇),在爲OAUS服務端增長自動檢測文件變動的功能(這樣每次部署版本升級時,能夠節省不少時間,並且能夠避免手動修改帶來的錯誤)後,有部分使用者又提出了一個很好的建議:爲OAUS增長斷點續傳功能。由於若是網絡狀態不是很好,就常常會在升級到一半的時候,因爲OAUS客戶端掉線而致使升級失敗,這個時候,就必須從新開始整個升級過程。即便升級中斷的時候,已經完成了99%,也必須重頭再來。因此,爲OAUS增長斷點續傳功能是很是必要的。html

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

     

      

  在網絡狀態極差時,可能在一次升級的過程當中,會出現屢次斷線重連的狀況,這都不要緊,OAUS客戶端會一直正常工做,直到整個升級過程完成爲止。 網絡

二.源碼實現

  下面簡單說明一下代碼實現的具體過程,OAUS斷點續傳功能是在客戶端實現的,服務端不須要作任何修改。this

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

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就已經具有了斷點續傳的功能了。代碼看起來很是簡單,那是由於內部核心的文件傳送功能、斷點續傳功能都由ESFramework封裝好了。在爲OAUS增長斷點續傳功能時,就不須要再次實現與斷點續傳相關的繁瑣的業務邏輯了。code

3. 如何使用OAUS升級機制的說明orm

  通常而言,若是最新客戶端程序與老版本兼容,不升級也影響不大,則能夠交由用戶決定是否升級;若是最新客戶端程序不兼容老版本,或者是有重大更新,則將啓動強制升級。若是流程要進入啓動升級,那麼只要啓動AutoUpdater的文件夾下AutoUpdater.exe就能夠了。要注意的是,啓動AutoUpdater.exe進程後,要退出當前的客戶端進程,不然,有些文件會由於沒法被覆蓋而致使更新失敗。代碼大體以下所示: htm

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

三.相關下載

1.自動升級系統OAUS - 源碼blog

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

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

  若是有任何建議或問題,請留言給我。

相關文章
相關標籤/搜索