C++实现客户端升级流程

  • 一,需求分析
  • 二,主程序实现
  • 三,升级程序实现
  • 四,服务端程序实现

对于一个客户端软件,升级程序是很常见的,当客户端有新增需求或者bug修复时,后台发布升级版本,前端进行版本比较并进行升级,以实现客户端迭代更新的效果,因此学会如何设计一个简单的客户端升级流程是我们必须要掌握的能力。

一,需求分析

程序升级最常见的架构就是C/S架构了,包括主程序客户端,升级程序客户端,服务端程序。客户端每次启动向服务端发送请求,获取到最新版本号,与本地版本号进行对比。如果版本一致,那么不需要更新;如果客户端版本号小于服务端版本号,那么就弹出交互界面,询问用户是否需要升级,如果不升级,本次版本检测升级流程结束;如果升级,则让用户选择是“立即升级”和是“静默升级”。这两者区别如下:
1,“立即升级”指的是结束主程序进程,弹出升级界面,升级完成后,覆盖原有文件,并重新启动主程序,一般选择记住用户的账号名和密码,给用户减少操作步骤。
2,“静默升级”指的是升级程序客户端隐藏界面或缩小界面,在后台静默下载需要更新的文件,当下载完成后,既可以再次弹出交互界面,让用户确认是不是立即升级,还是等当次主程序退出后再升级;也可以一直隐藏在后台,等主程序退出后,自动替换更新后的文件,当用户下一次启动时,已经是最新版本。

二,主程序实现

主程序启动后,直接调用服务端接口获取到版本号信息,或者下载服务端的版本信息文件,再从文件中解析出版本号,然后与本地的版本号进行对比,如果版本不一致,提示用户升级。如果是“静默升级”,升级程序下载完升级文件后,挂在后台,主程序退出前通知升级程序替换文件;如果是“立即升级”,则主程序退出,并且通过SheelExcuteEx调起升级客户端,升级程序下载完升级文件,立刻替换原有文件。

三,升级程序实现

升级程序也是一个win32界面程序,因为需要显示更新进度,以及与用户之间的交互。升级程序一般是由主程序拉起来的,但是也存在用户单独启动它,那么这时候升级程序也需要加入服务端版本文件获取,以及本地版本比较等一系列的操作。有两种解决方案:
1,升级程序中也加上版本获取和版本比较的流程,根据它启动的参数来判断,对于控制台程序,int main(int argc, char** argv),argv就是参数;对于界面程序,int _stdcall WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
),lpCmdLine就是启动参数。
2,可以直接去掉主程序中的版本获取和版本比较的流程,将它只放在升级程序中来实现,各种升级交互都是由升级程序来进行的,升级程序可以一直挂在后台进程中。
     个人更倾向于第二种方式。

四,服务端程序实现

服务端的实现有多种,比如用原生socket实现来进行客户端和服务端的通信,也可以吧服务端做成http服务端。当然更方便的是利用操作系统的特性来达到客户端和服务端的通信以及文件传输功能,因为我本人对windows操作系统熟一点,所以我们的服务端部署在windows server 2008上面,使用的是windows自带的ftp服务器。如何在windows上开启ftp服务功能,请参考我的另一篇博客,不再重复。
ftp服务端目录主要分为一个文件和一个文件夹:
1,版本信息文件
     本文件中主要包含了当前服务端的版本信息,以及升级更新的内容(本次升级主要更新了一下内容:1,…2,…),可以使用ini配置文件和xml文件,具体选择哪一种看个人使用习惯。

2,升级文件夹
     升级文件夹(UploadFile)里存放的是升级需要更新的文件,升级程序判断要升级后首先需要获取到服务端的ftp路径目录,对UploadFile中的每一个文件进行下载操作,保存到升级程序本地。
     这里我之前考虑到的是在版本信息文件里加上需要升级的文件名(路径),由升级程序根据这个配置项去一个个的下载,但是又要考虑到服务端的易操作特点(升级文件的替换可能是由其他人来做),所以还是没有使用这个方法,而是由升级程序自己来遍历目录。

C++实现客户端升级流程相关推荐

  1. Android 8.0 (35)----Android8.0.0-r4的OTA升级流程

    Android8.0.0-r4的OTA升级流程 原网址:https://blog.csdn.net/dingfengnupt88/article/details/52875228  Android系统 ...

  2. cocos creator麻将教程系列(四)—— 达达麻将客户端初始化流程

    达达麻将客户端初始化流程 达达麻将版图 客户端代码结构 1: scripts文件夹下: (1) 3rdparty: 第三方代码 socket-io; (2) Comonents: 游戏中挂到节点上的组 ...

  3. NetApp Ontap升级流程及注意事项

    长话短说,Ontap升级无特殊情况均可以用WebUI傻瓜式一键升级,首先导航到Ontap的升级界面,如下图: 不同版本的Ontap实际位置可能会有不同,另外注意9.5之后的版本新增从客户端添加,但实测 ...

  4. 【android系统】android系统升级流程分析(一)---recovery模式中进行update包升级流程分析

    今天我们直接来看下android中具体的升级过程是如何的. 升级流程概述 升级的流程图: 升级流程分析 第一步:升级包获取 升级获取可以通过远程下载,也可直接拷贝到指定目录即可. 第二步:准备升级 然 ...

  5. 关于开发人员数据库权限配置以及规范数据库升级流程

    在项目的新版本发布过程中,暴露出了一些数据库权限管理的问题和数据库升级流程规范的问题. 在这次发布完真实版后,居然发现有些脚本没有被执行,导致用户升级完就出现了些Bug,产生了很不好的影响. 为此项目 ...

  6. 客户端升级为select模型

    文章目录 1 客户端升级为select模型 1.1 概述 1.2 客户端代码实现 1.3 服务端代码实现 1 客户端升级为select模型 1.1 概述 这里我们为了让客户端有时间去处理其它业务逻辑, ...

  7. iOS客户端开发流程

    客户端项目流程: 1)产品经理做需求调研,确定产品需求,编写需求文档 2)产品人员完成产品原型 3)产品经理召开会议(产品.UI.UE.开发.服务器) 4) 设计人员根据原型设计出一系列UI界面.用户 ...

  8. Netty实战 IM即时通讯系统(五)客户端启动流程

    ## Netty实战 IM即时通讯系统(五)客户端启动流程 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteBuf ...

  9. Linux下编写UDP/TCP版本的服务器和客户端的流程

    Linux下编写UDP/TCP版本的服务器和客户端的流程 文章目录 Linux下编写UDP/TCP版本的服务器和客户端的流程 一:UDP和TCP的区别 二.UDP编写服务器的步骤 三.UDP编写客户端 ...

最新文章

  1. SQL Server基础操作(此随笔仅作为本人学习进度记录七 !--存储过程)
  2. 栈与队列10——可见的山峰对数量
  3. EOS 源代码解读 (2)插件-流程
  4. 团队作业—预则立他山之石
  5. Photoshop切图学习
  6. java反序列化异常接不到_由Java对象反序列化异常想到的
  7. 【高级】小程序 - 腾讯云 - wafer - PHP - 数据库接口的应用和研究 - 02 - DB::select - 正确的接口写法 - 包括布尔判断
  8. hadoop 自定义OutputFormat
  9. python中while的用法_Python—while循环,内涵五种九九乘法表
  10. paurse java_Java学习笔记一
  11. Ruby笔记三(类、对象、属性)
  12. MFC UpdateData
  13. UI 假死的可能性和处理方法总结
  14. MVC3学习 七 Razor使用、路由模块、框架自带校验
  15. yum install安装时 提示“Another app is currently holding the yum lock; waiting for it to exit...”原因和解决
  16. andriod驱动之旅-a31s芯片-android环境
  17. RC523读身份证ID
  18. 使用JS 实现 分享到 新浪微博 QQ 空间
  19. windows7内存诊断工具有用吗_用Windows内存诊断工具检查内存可靠性
  20. ros软路由防火墙(双线路、日志配置)

热门文章

  1. JS 数据结构:链表
  2. Chipscope调试工具使用说明
  3. 无锁CAS/无锁队列
  4. 大模型的好伙伴,浅析推理加速引擎FasterTransformer
  5. c++游戏设计五:打飞机
  6. 哪里是乐土?--关于团队良性循环
  7. HDU 4562 守护雅典娜(金山复赛第二场)
  8. 什么是 web 语义化?有什么好处?
  9. LRN(Local Response Normalization)局部归一化分析
  10. SAP各模块常用事物代码