自动升级系统的设计与实现(续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);
       ......//退出当前进程
  } 

三.相关下载

1.自动升级系统OAUS - 源码

2.自动升级系统OAUS(可直接部署)

3.自动升级系统OAUS - 使用手册

  如果有任何建议或问题,请留言给我。

时间: 2024-10-21 17:10:36

自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)的相关文章

自动升级系统OAUS的设计与实现(续) (附最新源码)

一.缘起 自从 自动升级系统的设计与实现(源码) 发布以后,收到了很多使用者的反馈,其中最多的要求就是希望OAUS服务端增加自动检测文件变更的功能,这样每次部署版本升级时,可以节省很多时间,而且可以避免手动修改带来的错误. 现在,我就简单介绍一下最新版本的OAUS中关于这个功能的实现.在上一个版本中,我们是这样操作的: 每次有版本更新时,我们需要把更新的文件拷贝到服务端的FileFolder文件夹下覆盖掉旧的文件,然后通过上述的操作界面,来手动修改每个文件的版本号.这个过程很繁琐,而且容易出错.

自动升级系统的设计与实现(源码)

对于PC桌面应用程序而言,自动升级功能往往是必不可少的.而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用.基于ESFramework的文件传送功能,我实现了一个可直接复用的自动升级系统OAUS,现在将其分享给大家.这篇文章将着重介绍OAUS的相关背景.使用方法,至于详细的实现细节,大家可以直接下载源码研究.如果了解了OAUS的使用,源码的理解就非常容易了.如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包. 一.OAUS的主要功能 目前主流的

自己主动升级系统的设计与实现(续2) -- 添加断点续传功能 (附最新源代码)

一.缘起 之前已经写了两篇关于自己主动升级系统OAUS的设计与实现的文章(第一篇.第二篇).在为OAUS服务端添加自己主动检測文件变更的功能(这样每次部署版本号升级时,能够节省非常多时间.并且能够避免手动改动带来的错误)后,有部分使用者又提出了一个非常好的建议:为OAUS添加断点续传功能.由于假设网络状态不是非常好,就常常会在升级到一半的时候,由于OAUSclient掉线而导致升级失败,这个时候,就必须又一次開始整个升级过程. 即使升级中断的时候.已经完毕了99%,也必须重头再来.所以,为OAU

生产环境监控系统Nginx+Nagios+Cacti+Nconf大整合(最新源码安装)【转载】

在此部署方案基础上可以加入对网络设备监控的组件NTOP,原Cacti运行环境标配的组件为Apache,另针对windows系统的监控插件为NSClient++ 文章转载自:https://blog.linuxeye.com/314.html 此文是成功在<Nginx下搭建Nagios监控平台>基础上继续,安装整合Cacti.Nconf.其中花了很多时间来排错.1.下载所需要最新稳定源码包 cd nagios-cacti wget http://www.cacti.net/downloads/c

《Redis设计与实现》[第一部分]数据结构与对象-C源码阅读(一)

一.简单动态字符串SDS 关键字:空间预分配,惰性空间释放,二进制安全 C字符串不易更改,所以Redis中把C字符串用在一些无须对字符串值进行修改的地方,作为字符串字面量(String literal),比如打印日志: redisLog(REDIS_WARING, "Redis is now ready to exit, bye bye-"); 在Redis数据库中,包含字符串的键值对在底层都是由SDS实现的. SDS还被用作缓冲区(buffer):AOF模块中的AOF缓冲区,以及客户

winform 自动升级

自动升级系统OAUS的设计与实现(续) (附最新源码) http://www.cnblogs.com/zhuweisky/p/4209058.html

智能家居系统-软件设计

1 智能家居远程控制系统的软件实现 1.1 基于uC/OS-II的中央控制器的软件设计 1.1.1 uC/OS-II系统移植 本设计使用uC/OS-II操作系统,uC/OS-II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,uC/OS-II的大部分源码是用标准ANSI C编写,并且编程规范,可读性很高,内核中只有少量的与硬件相关的代码使用汇编语言编写,总共200余行,移植非常方便[37].uC/OS-II软件体系结构如图5-1所示.移植工作主要包括以下几个方面的内容: 1)

基于ARM9的指纹识别系统的设计和实现

生物识别技术是利用人体固有的生理特性(如指纹.脸象.红膜等)和行为特征(如笔迹.声音.步态等)来进行个人身份的鉴定. 生物识别技术比传统的身份鉴定方法更具安全.保密和方便性.生物特征识别技术具有不易遗忘.防伪性能好.不易伪造或被盗.随身"携带"和随时随地可用等优点. 生物识别的工作原理是利用生物识别设备对生物特征进行取样,提取其唯一的特征并将其转化成数字代码,并进一步将这些代码组成特征模板,人们同识别设备交互进行身份认证时,识别设备获取其特征并与数据库中的特征模板进行比对,以确定是否匹

C#实现自动升级(附源码)

对于PC桌面应用程序而言,自动升级功能往往是必不可少的.而自动升级可以作为一个独立的C/S系统来开发,这样,就可以在不同的桌面应用中进行复用.本文将着重介绍OAUS的相关背景.使用方法,至于详细的实现细节,大家可以直接下载源码研究.如果了解了OAUS的使用,源码的理解就非常容易了.如果需要直接部署使用自动升级系统,那么,可下载文末的可执行程序压缩包. 一.OAUS的主要功能 目前主流的程序自动升级策略是,重新下载最新的安装包,然后重新安装整个客户端.这种方式虽然简单直观,但是缺陷也很明显.比如,