自己主动升级系统的设计与实现(续2) -- 添加断点续传功能 (附最新源代码)
2017-07-18 17:56
429 查看
一.缘起
之前已经写了两篇关于自己主动升级系统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 - 使用手冊
假设有不论什么建议或问题。请留言给我。
相关文章推荐
- 自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)
- 自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)
- 设计与实现模块管理系统基本功能定义自己(28--所述多个模块之间的关联[4])
- 模块管理常规功能自己定义系统的设计与实现(16--模块数据的导出和打印[1])
- C#实现自己主动升级(附源代码)
- 模块管理常规功能自己定义系统的设计与实现(52--功能更新[2] 对百分比字段的操作)
- 模块管理常规功能自己定义系统的设计与实现(36--终级阶段 综合查询[3])
- 设计与实现模块管理系统的基本功能定义自己的(38--终极阶段 综合查询[5])
- 设计与实现模块管理系统基本功能定义自己(18--设计模块附件[1])
- [课程设计]Scrum 2.7 多鱼点餐系统开发进度(下单一览页面-菜式添加功能的继续实现)
- 模块管理常规功能自己定义系统的设计与实现(31--第三阶段 权限设计[1])
- 模块管理常规功能自己定义系统的设计与实现(53--演示程序和视频解说 )
- [课程设计]Scrum 2.6 多鱼点餐系统开发进度(下单一览页面-菜式添加功能实现)
- 自动升级系统OAUS的设计与实现(续) (附最新源码)
- 模块管理常规功能自己定义系统的设计与实现(22--第二个模块的增加)
- 企业级服务器设计与实现经验之系统框架(二)--功能/应用服务器主体框架
- DNS 域名信息主动获取及备份系统的设计和实现
- 用Java实现HTTP断点续传功能
- 实现HTTP断点续传下载工具(附源代码)
- 通用的web系统数据导出功能设计实现(导出excel2003/2007 word pdf zip等)