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

一.缘起    

  之前已经写了两篇关于自己主动升级系统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 - 使用手冊

  假设有不论什么建议或问题。请留言给我。

时间: 2024-10-12 20:15:19

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

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

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

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

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

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

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

domino升级系统数据库

升级系统数据库 注意:不同命令和参数请勿同时执行,相同命令和参数可以同时执行多个. 在Domino 服务器的notes.ini中添加如下参数CREATE_R85_DATABASES=1 注意如果加在了最后一行,还要留一个空行. 1.修复系统数据库 1)       打开一个命令行窗口: 2)       进入Domino数据目录,例如“cd D:\Lotus\Domino\Data”(以实际数据目录路径为准): 3)       执行以下命令(以实际程序目录路径为准): D:\Lotus\Dom

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

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

Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_汇总贴

51CTO学院 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) H:\BaiDu\微服务0830\2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版) 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-1课程整体介绍 原文地址:https://www.cnblogs.com/wangjunwei/p/11524192.html

电商峰值系统架构设计--转载

1.1 系统架构设计目录 摘要:双11来临之际,<程序员>以“电商峰值系统架构设计”为主题,力邀京东.当当.小米.1号店.海尔商城.唯品会.蘑菇街.麦包包等电商企业,及商派.基调网络等服务公司,分享电商峰值系统架构设计的最佳技术实践. 自2009年11月11日,淘宝商城(现名天猫)拉开网购狂欢节的序幕,各大电商的促销浪潮此起彼伏.此时的电商大战不仅是价格之争,更是技术的较量.如何设计电商峰值系统来更好地满足用户蜂拥而至的访问,如何在海量数据处理中实时发现有效信息并转化为商机,成为众多电商企业密

高性能、高可用、高扩展ERP系统架构设计

ERP之痛 曾几何时,我混迹于电商.珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP).作为一个ERP系统,系统主要功能模块无非是订单管理.商品管理.生产采购.仓库管理.物流管理.财务管理等等.作为一个管理系统,大家的一般开发习惯就是使用.Net或Java技术,建立一个单块(单进程)架构的应用,只有一个SQLServer或MySql数据库.然后在项目文件中分一下各个模块,三层结构方式组织代码编写开发.最后测试,交付上线. 起初,因为数据量不大,系统性能还不错,各种列表查询,报表查询,E

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业