博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己主动升级系统的设计与实现(续2) -- 添加断点续传功能 (附最新源代码)...
阅读量:6991 次
发布时间:2019-06-27

本文共 2174 字,大约阅读时间需要 7 分钟。

一.缘起    

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

2.

3.

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

转载地址:http://wjbvl.baihongyu.com/

你可能感兴趣的文章
xenapp 6.5添加用户,显示如下提示 ima服务器上下文无效用户或组
查看>>
浅析JDK动态代理的源码
查看>>
自旋锁和互斥锁
查看>>
在网页中使用JS动态显示时间
查看>>
我的友情链接
查看>>
java开发基础【AtomicInteger】
查看>>
mybatis-spring整合
查看>>
如何设置 SPF 的 DNS 记录
查看>>
4 招教你如何在应用商店脱颖而出
查看>>
linux-yum库建立和常见使用
查看>>
【3大杂烩】history 目录结构 ls用法 查看文件状态
查看>>
【20180607】关于TCP队列信息溢出的排查和解释
查看>>
利用三层交换机实现VLAN间路由
查看>>
ifconfig
查看>>
Linux安装weblogic服务
查看>>
Populating Next Right Pointers in Each Node II
查看>>
MVC Contoller 控制器的返回类型
查看>>
基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)...
查看>>
tab-选项卡-[data-class]
查看>>
批量修改文件名re_name.py
查看>>