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

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

一.緣起    

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

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

     

      

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

二.原始碼實現

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

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就已經具備了斷點續傳的功能了。程式碼看起來非常簡單,那是因為內部核心的檔案傳送功能、斷點續傳功能都由ESFramework封裝好了。在為OAUS增加斷點續傳功能時,就不需要再次實現與斷點續傳相關的繁瑣的業務邏輯了。

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

  一般而言,如果最新客戶端程式與老版本相容,不升級也影響不大,則可以交由使用者決定是否升級;如果最新客戶端程式不相容老版本,或者是有重大更新,則將啟動強制升級。如果流程要進入啟動升級,那麼只要啟動AutoUpdater的資料夾下AutoUpdater.exe就可以了。要注意的是,啟動AutoUpdater.exe程序後,要退出當前的客戶端程序,否則,有些檔案會因為無法被覆蓋而導致更新失敗。程式碼大致如下所示: 

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

三.相關下載

  如果有任何建議或問題,請留言給我。

相關推薦

自動升級系統OAUS的設計實現 最新原始碼

private void button1_Click(object sender, EventArgs e) { int changedCount = 0; int addedCount = 0; List<FileUnit&g

自動升級系統設計實現2 -- 增加斷點功能 最新原始碼

一.緣起       之前已經寫了兩篇關於自動升級系統OAUS的設計與實現的文章(第一篇、第二篇),在為OAUS服務端增加自動檢測檔案變更的功能(這樣每次部署版本升級時,可以節省很多時間,而且可以避免手動修改帶來的錯誤)後,有部分使用者又提出了一個很好的建議:為OAUS增加斷點續傳功能。因為如果網路狀態不是

【活動預告】NEO區塊鏈公開課5:NNS系統設計實現

NEO區塊鏈公開課第5期: 主題:NEL精品課程之NNS系統設計與實現 時間:10月20日13:30—17:00   地點:上海市楊浦區政學路77號INNOSPACE 1樓IPOCLUB   報名連結:http://www.huodongxing.c

《超市智慧化管理系統設計實現》論文筆記

一、基本資訊 標題:超市智慧化管理系統設計與實現 時間:2014 來源:電子科技大學 關鍵詞:超市; 資料庫; 商品; 窗體; 控制元件; 二、研究內容 1.主要內容:         該篇論文主要表述的是完成一個超

Xilinx Zynq-7000嵌入式系統設計實現 學習教程1

學習資料下載地址:http://www.edawiki.com 開篇體會;   Xilinx的ZYNQ系列FPGA是二種看上去對立面的思想的融合,ARM處理器的序列執行+FPGA的並行執行,著力於解決大資料處理、人工智慧等複雜高效能演算法處理。 新的設計工具的推出,vivado HLS,更加註重嵌入式系

基於WebGIS的Web服務器日誌管理系統設計實現_愛學術——免費下載

富客戶端 平臺 .com 服務器日誌 操作 shu 實現 c51 bsp 【摘要】WebGIS優勢是通過互聯網對地理空間數據進行發布和應用,以實現空間數據的共享和相互操作。將WebGIS和富客戶端技術引入Web服務器日誌管理領域,從總體設計、數據庫設計、實現框架等幾個方面設

基於Web的企業排班管理系統設計實現_愛學術——免費下載

安全 html 快速 開發框架 管理 document 企業 search src 【摘要】隨著我國企業的快速發展,落後的排班方式正日益影響企業的工作效率。本文即探討基於Web的企業排班管理。提出基於SSH開發框架並結合MVC設計模式來開發企業排班管理系統,提高系統的安全性

基於James技術的企業電子郵件系統設計實現

     基於James技術的企業電子郵件系統設計與實現   轉載:https://www.taodocs.com/p-156363658.html        1、簡介     

【架構】分散式追蹤系統設計實現

分散式系統為什麼需要 Tracing?   先介紹一個概念:分散式跟蹤,或分散式追蹤。   電商平臺由數以百計的分散式服務構成,每一個請求路由過來後,會經過多個業務系統並留下足跡,併產生對各種Cache或DB的訪問,但是這些分散的資料對於問題排查,或是流程優化都幫助有限。

文獻綜述十四:基於Oracle11g的超市進銷存管理系統設計實現

一、基本資訊   標題:基於Oracle11g的超市進銷存管理系統設計與實現   時間:2016   出版源:技術創新   檔案分類:對資料庫的研究 二、研究背景   為超市設計開發的超市管理系統,採用的是 VC+ Oracle模 式的電子管理平臺,研究基於C/S模式的電子資訊管理的實現。 三、具體內容   

[原始碼和文件分享]基於C++的庫存管理系統設計實現

一 需求分析 1.1 總體要求 運用面向物件程式設計知識,利用C++語言設計和實現一個“庫存管理系統設計”,主要完成對商品的銷售、統計和簡單管理。在實現過程中,需利用面向物件程式設計理論的基礎知識,充分體現出C++語言關於類、繼承和封裝等核心概念,每一個類應包含資料成員和成員函式。 1.

[原始碼和文件分享]基於C++的學生生活系統設計實現

一 需求分析 需要設計並實現如下場景:在那山的那邊,湖的那邊,有一所學校,學校裡有一幢宿舍樓,宿舍樓有若干層,每一層有若干房間 ,一群學生快樂地生活在這裡。他們每天可做的事情有: 換宿舍,從一個房間搬到另一個房間 退學,亦即搬出宿舍樓 入學,亦即搬入宿舍樓

文獻綜述十八:基於SSH框架的進銷存管理系統設計實現

一、基本資訊   標題:基於SSH框架的進銷存管理系統設計與實現   時間:2017   出版源:內蒙古科技與經濟   檔案分類:對框架的研究 二、研究背景   進銷存管理系統在各企業中廣泛應用,使用SSH框架,很大程度上提高了開發效率及系統的可靠性和易用性。 三、具體內容   文獻的主要內容分為三大部分。一

58同城推薦系統設計實現

58同城智慧推薦系統大約誕生於2014年(C++實現),該套系統先後經歷了招聘、房產、二手車、黃頁和二手物品等產品線的推薦業務迭代,但該系統耦合性高,難以適應推薦策略的快速迭代。58同城APP猜你喜歡推薦和推送專案在2016年快速迭代,產出了一套基於微服務架構的推薦系統(Ja

基於JAVA的網上商城商家管理系統設計實現

**基於JAVA的網上商城商家管理系統設計與實現** 基於JAVA的網上商城商家管理系統設計與實現mysql資料庫建立語句 基於JAVA的網上商城商家管理系統設計與實現oracle資料庫建立語句 基於JAVA的網上商城商家管理系統設計與實現sqlserver資料庫建立語句

[原始碼和文件分享]基於QT的考試管理系統設計實現

一、專案概要 1.1 專案名稱 考試管理系統 1.2 專案目標 培養快速學習新的知識,解決問題的能力 規劃專案的整體功能以及相關需求分析,並設計出合理的資料庫,並熟悉整個試題系統的開發流程。 1.3 軟體概要 開發一個考試管理系統,考生可以進行練習,

[原始碼和文件分享]基於VS2012和SQL SERVER的餐廳點餐系統設計實現

一、需求分析 1. 面向物件 點典點菜系統是一款面向顧客和管理人員的全方面系統,其中管理人員又包括服務員、採購員和廚師。本組認真分析了不同物件的需求,為不同的物件都設計了獨特的系統功能。簡化了傳統點菜、燒菜和採購方式繁瑣的步驟,為顧客提供便捷操作的同時提高酒店管理的效率。 2. 市場背景

[原始碼和文件分享]基於JSP的停車場資訊管理系統設計實現

1.1 專案背景 軟體系統的名稱是停車場管理系統。我們開發的系統將幫助停車場管理員和物業公司更加智慧化的管理停車場,省去很多的人力物力。方便隨時查詢停車場的情況,也有助於車主方便隨時查詢附近可以停車的停車場。 1.1.1使用者基本情況介紹 角色1:停車場管理員 檢視剩餘車位數量,

通用屬性系統設計實現

    這兩年做過不少的小型電商系統,有的賣衣服,有的賣鞋子,有的賣電器,甚至還有些賣虛擬服務的。不同商品的屬性千差萬別,為了減少以後賣xxx的電商系統的工作量,特將屬性系統做成通用版的。 設計思路如下: 1、可自定義的無限級商品類別。 2、各類別可自定義屬性,屬性的型別有:普通文字、數字、價格、單項選擇、

kubernetes+ prometheus自動伸縮的設計實現(三)

現在還剩下最後一東西沒有解決了,就是一個查詢的介面,提供一個prometheus轉接的地方。第一篇blog已經介紹了通過自定義指標採集器呼叫custom-metrics介面。現在看看這個介面的實現,首先得有這樣一個介面 這個是基於k8s的一個孵化專案: g