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. 每日一皮:如何用一句话让领导和同事都尴尬至极?
  2. 10、oracle下PL/SQL编程基础
  3. PHP中英文截取函数,php字符串截取函数,支持中英文混体
  4. canvas笔记-使用canvas画圆及点阵的使用
  5. php 横屏和竖屏,面试问题,视频横屏与竖屏的设计差异?我是这样回答的
  6. 在阿里云注册域名后怎样进行网站的备案流程
  7. 基于java报刊图书征订管理系统
  8. Elasticsearch 的 Task 停止方法
  9. 2019/04/15 在调试https://blog.csdn.net/hjw2719/article/details/83473199中程序时出现的问题
  10. Google Earth Engine(GEE)——注册GEE被拒绝,官网的回复给出答案
  11. 快速排序---(面试碰到过好几次)
  12. Android电视开机进入AV,康佳电视如何设置开机成AV模式-康佳开机直接进电视
  13. C++ 将字符串转换为浮点数
  14. find ? find !
  15. “AI+”将比“互联网+”落地更容易
  16. TC SRM 573
  17. 基于Vue封装酷炫进度条插件
  18. 关于我国电子商务立法的思考
  19. 2021年中山大学计算机专业学硕复试线,2021中山大学研究生分数线一览表(含2019-2020历年复试)...
  20. STM32链接脚本STM32F407ZETx_FLASH.ld

热门文章

  1. 机器学习python库--seaborn
  2. 用VLC转换视频格式
  3. 数学真简单 _ 牛吃草问题 (1
  4. 【记录LVM挂载磁盘错误】Devices have inconsistent logical block sizes (512 and 4096).
  5. hdu 4562 守护雅典娜 (Simple Geometry + dp)
  6. rss技术为blog带来什么?
  7. C/C++获取键盘事件
  8. 二维数组作为函数参数传递
  9. [爱分享]Linux命令——cd
  10. python 结束循环事件,python asyncio事件循环(Event Loop)及事件循环策略(Event Loop Policy)...