本篇文章是对【大话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. mysql join优化

    http://www.jb51.net/article/50427.htm 七.性能优化1.显示(explicit) inner join VS 隐式(implicit) inner join 如: ...

  2. ATL7窗口类详细剖析

    前言: ATL是微软继MFC之后提供的一套C++模板类库,小巧.精妙.效率极高.它的主要作用是为我们编写COM/DOM/COM+程序提供了丰富的支持.但是ATL只能写COM么?我以前只是MFC程序员的 ...

  3. meteor学习-- #一 安装meteor快速使用

    下载安装 curl https://install.meteor.com/ | sh meteor会自动下载mongodb和其他需要依赖的库,不需要手动安装. 如果是Windows 的用户,请使用 m ...

  4. Android 卡顿优化 1 卡顿解析

    1, 感知卡顿 用户对卡顿的感知, 主要来源于界面的刷新. 而界面的性能主要是依赖于设备的UI渲染性能. 如果我们的UI设计过于复杂, 或是实现不够好, 设备又不给力, 界面就会像卡住了一样, 给用户 ...

  5. URLScan参数说明

    本文分步说明如何配置 URLScan 工具以防止 Web 服务器受到攻击和利用. 修改 URLScan.ini 文件 URLScan 的所有配置都是通过 URLScan.ini 文件执行的,此文件位于 ...

  6. mysql多实例介绍及配置

    mysql多实例介绍及配置 1.mysql多实例介绍 1.1 什么是mysql多实例 mysql多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过 ...

  7. 封装实现JavaScript 文件的动态载入功能

    function loadScript(url, callback){ var script = document.createElement ("script") script. ...

  8. Android常用传感器用法一览(3)

    Android 开发包标准有8个传感器: Sensor.TYPE_ACCELEROMETER o 加速度计 (X, Y, Z) m/s2 Sensor.TYPE_GYROSCOPE o 陀螺仪 (X, ...

  9. 从客户端的角度来谈谈移动端IM的消息可靠性和送达机制

    1.前言 IM App 是我做过 App 类型里复杂度最高的一类,里面可供深究探讨的技术难点非常之多.这篇文章和大家聊下从移动端客户端的角度所关注的IM消息可靠性和送达机制(因为我个人对移动客户端的经 ...

  10. git push --set-upstream origin

    设置本地分支追踪远程分支 之后就可以直接使用git push提交代码