自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)
来源:互联网 发布:知乎 金庸 古龙 编辑:程序博客网 时间:2024/05/16 16:08
一.缘起
之前已经写了两篇关于自动升级系统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 - 使用手册
如果有任何建议或问题,请留言给我。
- 自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)
- 自动升级系统的设计与实现(源码)
- Winform自动升级系统的设计与实现(源码)
- C#实现自动升级(附源码)
- C#实现自动升级(附源码)
- C#实现自动升级(附源码)
- 在线小说网站的设计与实现(附源码)
- 在线小说网站的设计与实现(附源码)
- 在线小说网站的设计与实现(附源码)
- 在线小说网站的设计与实现(附源码)
- IOS 下载文件断点续传原理与实现(附源码)
- 实现HTTP断点续传下载工具(附源代码)
- 实现HTTP断点续传下载工具(附源代码)
- 可复用的自动升级系统实现(一)
- 可复用的自动升级系统C#实现(二)
- 断点续传功能的实现
- Redrain 通用菜单控件使用方法和说明(增加动态添加功能、附源码和demo)
- Redrain 通用菜单控件使用方法和说明(增加动态添加功能、附源码和demo)
- 聊天室的实现(消息实时刷新)
- Java套接字编程
- 后台数据校验
- Mac OS X的Getattrlist系列函数
- 关于 hasLayout-CSS属性
- 自动升级系统的设计与实现(续2) -- 增加断点续传功能 (附最新源码)
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
- Android之JAVASe基础篇-面向对象(二)
- maven 添加本地jar
- XML解析一 使用SAX解析XML
- poj2140-Herd Sums
- ls常用命令参数
- 环形缓冲区的实现原理
- C/C++进阶笔记(一)