本篇文章是对【大话QT之十二】基于CTK Plugin Framework的插件版本号动态升级文章的补充,在上篇文章中我们阐述的重点是新版本号的插件已经下载到plugins文件夹后应该怎样更新本地正在执行的程序,是整个插件升级实现的后半部分。本篇文章就来讲述软件自己主动部署(当然,也包含插件升级)的前半部分。

我们必须有这样一点认识。即:我们的程序是执行在用户机器上的,插件更新不是我们手动放进去的,而必须有一种机制使client可以检測到须要升级插件了。然后将插件自己主动下载下来,最后自己主动进行安装或插件更新。

系统软件自己主动部署实现的基本架构为:

上图中的组成中,【应用】和【更新服务】部分是执行在client的,【数据库】和【文件server】是执行在服务端。而【Server (WebServer)】则负责client与服务端进行通信。其主要的流程例如以下:

1> client的【更新服务】採用QTimer::singleShot()定时触发版本号检測的逻辑。

2> 版本号检測逻辑中採用WebServer请求訪问服务端的版本号检測服务(通过PHP实现)。服务端回去訪问【数据库】。去检查比較是否有更高版本号的插件/升级包。

3> 检測信息返回给client的【更新服务】,当【更新服务】依据返回结果判定存在较新的插件/安装包时,開始訪问【文件server】运行下载操作,这里能够採用FTP下载。或者其他的某种方式将【文件server】上的更新文件下载到本地对应文件夹内。

4> 最后这一部分是系统软件部署/插件升级最麻烦的地方,client的【更新服务】会去推断【应用】模块中是否正在执行作业或者对外提供服务。

假设此时【应用】模块没有对外提供服务,则在给出用户提示的情况下能够直接升级或安装;假设此时【应用】模块正在对外提供服务,则须要採用空暇时更新的策略,当对外服务完毕之后进行更新。

基本上系统软件自己主动部署的逻辑架构就如上所看到的,但在实际代码中要实现还须要考虑一些非常重要的问题。

1. 要兼容安装包/升级包的各种文件,下载的文件有exe,dll,zip包等,必需要可以区分出下载文件的后缀名,然后依据不同的后缀,採用不同的安装或升级策略。

2. 要兼容各种平台,Windows、Linux、Mac OS等,不同的平台下安装包的形式有各种各样,比如:windows下有exe、dll、zip等;Linux下有rpm、tar.gz等。

3. 当【应用】模块正在对外提供服务,比如:正在进行网络操作,有打开的port,在进行插件更新或升级包安装时必须先将原有占用的port停掉。然后等插件更新完毕后又一次打开port恢复曾经的任务。

这个过程不是非常好控制,如今还没有处理这方面问题的经验。

最后。因为client要和服务端进行通信。因此必须採用定义同样的数据结构或通信协议,而在这个时候採用的google protobuf则提供了非常大的灵活性。

它的使用方式不仅简单,并且效率更高(通常和xml进行比較),并且支持非常多语言版本号,PHP、C++、Java等,强烈建议在以后的项目中涉及到网络通信时採用google protobuf来定义网络协议,它会给你带来意向不到的惊喜。

坚持每天的学习和积累。加油!

【大话QT之十三】系统软件自己主动部署实现方案的更多相关文章

  1. 【大话QT之十二】基于CTK Plugin Framework的插件版本号动态升级

    应用需求: 某些场景下我们可能面临这种问题,在执行着的应用程序不能终止的情况下,升级某个功能(或添,或减.或改动).在不採用CTK Plugin Framework插件系统架构的情况下这将是非常困难的 ...

  2. 菜鸟教程工具(三)——Maven自己主动部署Tomcat

    书连接至背面,在博客上,他介绍了如何使用Maven该项目包,这篇文章说,关于如何使用Maven会踢war部署包Tomcat.而不是手动copy过去. 眼下比較流行的方式有两种:一种是利用Tomcat官 ...

  3. Powershell 的自己主动部署

     工作中反复性的版本号移植,一天上线10几次,让我痛不欲生,频繁的操作也可能出现疲劳性失误,导致严重的生产故障.于是乎,闲暇时间.我開始研究使用powershell自己主动部署程序到Linuxse ...

  4. Eclipse中的Web项目自己主动部署到Tomcat

    一.原因. 1.写java程序有一段时间了,但非常久没用eclipse了.所以使用eclipse编写的web项目部署到tomcat 的方式也不是非常清楚,以下记录一下将Eclipse 上的web项目自 ...

  5. 【大话QT之十四】QT实现多语言切换

    功能需求: 网盘client要可以实现多国语言的切换,第一版要支持中.英文的切换. 在实现过程中感觉QT对多国语言的支持还是非常不错的.制作多语言包非常方便.切换的逻辑也非常easy. 以下就来看一下 ...

  6. SVN配置以及自己主动部署到apache虚拟文件夹

    SVN配置以及自己主动部署到apache虚拟文件夹 一.VisualSVN server 服务端和TortoiseSVNclient下载 VisualSVN下载:http://subversion.a ...

  7. 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战

    "使用ctkPluginFramework插件系统构建项目实战",这篇文章是写博客以来最纠结的一篇文章. 倒不是由于技术都多么困难,而是想去描写叙述一个项目架构採用ctkPlugi ...

  8. 【大话QT之七】QT序列化操作

    应用需求: 在网盘开发过程中有这样一个需求.即对文件版本号进行控制,即记录文件版本号的更替信息,这里说的更替信息不过记录不同一时候刻的文件变化,即文件的增.删.改.重命名等操作.在每一个待监控的文件夹 ...

  9. 【大话QT之十七】Jenkins介绍及安装使用文档(与Git集成)

    文章文件夹结构例如以下: 1> Jenkins与Git相关介绍 2> Jenkins部署安装 3> Gitblit部署安装 4> Jenkins与Git集成使用 5> 项 ...

随机推荐

  1. C#读取Windows日志

    管理-->事件查看器     可以查看[应用程序].[安全].[系统]等分类的日志 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 2 ...

  2. 深入浅出RxJava就这一篇就够了

    前言: 第一次接触RxJava是在前不久,一个新Android项目的启动,在评估时选择了RxJava.RxJava是一个基于事件订阅的异步执行的一个类库.听起来有点复杂,其实是要你使用过一次,就会大概 ...

  3. 分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)

    阅读目录 简介 系统特色 系统介绍 - 首页 系统介绍 - 列表页 系统介绍 - 明细页(表单) 系统介绍 - 菜单/按钮 系统介绍 - 权限中心 系统介绍 - 数据权限 系统介绍 - 字段权限 系统 ...

  4. needtrue需要真实的答案

    现在从底层做起来,相当的不容易啊,无论是哪个行业,每个人都需要付出很多的努力.但是现在人们的心是浮躁的,都想一下得到自己想要的东西,钱也好,车也好,房子也好,女人也好.最近很喜欢两句话,这里写下来与大 ...

  5. java--生成实体类方法

    由于工作中使用eclipse开发,没有安装hibernate插件,所以无法使用自动生成实体类的功能,为了方便在网上找了段别人写的自动生成实体类方法,稍加修改,直接运行就可以生成对应表的实体类. 注意使 ...

  6. excel宏调用webservice使用存储过程同步excel数据的方法

    excel宏: 随后更新 webservice: 1.创建空应用程序 2.加入web服务 3.创建数据库訪问类库DataHelper sqlserver: 创建数据同步的存储过程 下面是一些须要的代码 ...

  7. 我的Android进阶之旅------>Android关于TextWatcher的初步了解

    首先来看一下TextWatcher的源码 package android.text; /** * When an object of a type is attached to an Editable ...

  8. zabbix 配置外部邮件server发送邮件报警

    一.安装配置msmtp 1.下载msmtp wget http://downloads.sourceforge.net/msmtp/msmtp-1.4.30.tar.bz2?big_mirror=0 ...

  9. Lina Group

    var query = from ll in proListRequestList group ll by new {ll.pro_id} into g select new ProListReque ...

  10. java中的初始化块

    public class Person { int a=6;//声明实例变量制定默认值,也可以认为是对象的初始化代码,执行顺序与源代码中的排列顺序相同 { System.out.println(&qu ...