【大话QT之十三】系统软件自动部署实现方案

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

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

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

上图中的组成中,【应用】和【更新服务】部分是运行在客户端的,【数据库】和【文件服务器】是运行在服务端,而【Server (WebServer)】则负责客户端与服务端进行通信,其基本的流程如下:

1> 客户端的【更新服务】采用QTimer::singleShot()定时触发版本检测的逻辑。

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

3> 检测信息返回给客户端的【更新服务】,当【更新服务】根据返回结果判定存在较新的插件/安装包时,开始访问【文件服务器】执行下载操作,这里可以采用FTP下载,或者其它的某种方式将【文件服务器】上的更新文件下载到本地相应目录内。

4> 最后这一部分是系统软件部署/插件升级最麻烦的地方,客户端的【更新服务】会去判断【应用】模块中是否正在运行作业或者对外提供服务。如果此时【应用】模块没有对外提供服务,则在给出用户提示的情况下可以直接升级或安装;如果此时【应用】模块正在对外提供服务,则需要采用空闲时更新的策略,当对外服务完成之后进行更新。

基本上系统软件自动部署的逻辑架构就如上所示,但在实际代码中要实现还需要考虑一些很重要的问题。

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

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

3. 当【应用】模块正在对外提供服务,例如:正在进行网络操作,有打开的端口,在进行插件更新或升级包安装时必须先将原有占用的端口停掉,然后等插件更新完成后重新打开端口恢复以前的任务。这个过程不是很好控制,现在还没有处理这方面问题的经验。

最后,由于客户端要和服务端进行通信,因此必须采用定义相同的数据结构或通信协议,而在这个时候采用的google protobuf则提供了很大的灵活性。它的使用方式不仅简单,而且效率更高(通常和xml进行比较),而且支持很多语言版本,PHP、C++、Java等,强烈建议在以后的项目中涉及到网络通信时采用google protobuf来定义网络协议,它会给你带来意向不到的惊喜。

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

【大话QT之十三】系统软件自动部署实现方案,布布扣,bubuko.com

时间: 2024-10-17 01:04:15

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

系统软件自动部署实现方案

在上篇文章中我们阐述的重点是新版本的插件已经下载到plugins目录后应该如何更新本地正在运行的程序,是整个插件升级实现的后半部分.本篇文章就来讲述软件自动部署(当然,也包括插件升级)的前半部分. 我们必须有这样一点认识,即:我们的程序是运行在用户机器上的,插件更新不是我们手动放进去的,而必须有一种机制使客户端能够检测到需要升级插件了,然后将插件自动下载下来,最后自动进行安装或插件更新. 系统软件自动部署实现的基本架构为: 上图中的组成中,[应用]和[更新服务]部分是运行在客户端的,[数据库]和

【大话QT之十五】ctkPluginFrameWork插件系统Windows下编译

使用ctkPluginFramework作为插件系统框架的确有着众多开发上的优势.最近收到一些站内信,大家都想使用ctkPluginFramework但是不知道如何编译,这篇教程就来讲一讲ctkPluginFramework插件系统在Windows下的编译过程. 准备条件: 1. 安装Git,我们通过它来下载CTK的源码. 2. 安装CMake,我们用它来生成vs下的sln解决方案文件. 相关站点: 1. CTK的官网:http://www.commontk.org/index.php/Main

【大话QT之九】ZMQ偏执海盗模型调研以及模拟实现网盘负载均衡间消息通讯

应用需求: 由于网盘服务端既需要承载用户文件目录的监控又要负责文件的上传和下载,当某一时刻用户访问量较大或用户操作较为频繁是,单台文件监控服务器和文件传输服务器往往无法满足需求,极端情况下很可能造成服务器内存和CPU使用率爆表的情况,而且当Client与文件监控服务器间网络状况不好的情况下,很有可能造成用户操作序列的丢失,即用户在客户端的操作序列没有及时反映到服务端,造成用户本地目录和服务器端存储的文件不一致的情况.基于上述情况的考虑,必须要设计一套负载均衡系统,它能够满足在用户访问量增加或用户

QT程序在windows下部署发布

转载:http://www.cnblogs.com/Fan_Fan/archive/2010/05/29/1746860.html QT程序在windows下部署发布 以下包括了部分网上收集的,以及qt帮助里的内容(Deploying an Application on Qt/Windows) 首先,打开windows控制台,然后,找到vs安装目录下的bin里,执行 vcvars32.bat 这个脚本.执行完之后,vs需要的所有环境变量就已经设置好了. 我的环境是QT 4.3.3 + mingw

【大话QT之六】QT皮肤系统的动态切换

应用需求: 提供皮肤切换选项,在不重启应用程序的情况下实现皮肤的动态切换. 理论基础: 1) 图片资源是如何被利用的 这里先简要说明一下实现原理,皮肤的动态切换其关键在于图片资源的加载方式.QT中每个应用程序启动后都会维护属于自己的资源子库,所有的图片以及UI资源都实现编译到rcc文件中,而rcc文件是整合了所有资源的二进制文件,这种方式属于动态加载. 图片是一种资源,在QT中,对于资源的使用有以下几点: 1>  一般来说:资源在内存中是用资源对象树来表示的,该树在程序启动时创建. 2>   

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

应用需求: 某些场景下我们可能面临这样的问题,在运行着的应用程序不能终止的情况下,升级某个功能(或添,或减,或修改).在不采用CTK Plugin Framework插件系统架构的情况下这将是很困难的,我们需要停止运行程序,然后在相关代码中作出修改,然后再重新编译,再重新启动我们的程序.而如果是基于CTK Plugin Framework插件系统架构构建的系统,则很容易的实现插件的动态升级.在[大话Qt之四]ctkPlugin插件系统实现项目插件式开发中,我对ctkPlugin做了简单介绍,在次

使用gogs,drone搭建自动部署

使用gogs,drone搭建自动部署 使用gogs,drone,docker搭建自动部署测试环境 Gogs是一个使用go语言开发的自助git服务,支持所有平台Docker是使用go开发的开源容器引擎Drone是一个基于容器技术的持续集成平台.每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离.drone易于安装和使用,其目标是替代jenkins 本文所实现的的功能为当你push代码到gogs时,自动更新您测试环境的二进制文件并重启,实现自动部署(以go开发a

在云计算资源池上自动部署业务应用的大数据平台组件开发实战

在云计算提供的分布式资源池构建能够自动部署业务应用的平台组件,该平台组件能够非常简易的被众多的并发终端使用,从而轻而易举的提供业务支持: 尤其是值得注意的是,如果有需要的话,我们的不同业务组件和业务本身可以发生数据和资源的共享,这对于资源和数据的复用,尤其是对于效率的提升是至关重要的.         课程介绍   基于“在资源池上自动部署业务应用的平台组件”的要求,课程包含Spark的架构设计.Spark编程模型.Spark内核框架源码剖析.Spark的广播变量与累加器.Shark的原理和使用

在Eclipse中使用Maven将Web项目自动部署到tomcat服务器

一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如下图所示: 在New窗口中选择 Maven -> Maven Project.点击[next]如下图所示: 1.2 选择项目路径 根据项目的实际情况选择项目的存放目录,也可以选择[Use default Workspace location]默认工作空间.如下图所示: 1.3 选择项目类型 在Artifact Id中选择maven-archetype-webapp,如下图所示