【大话QT之十三】系统软件自己主动部署实现方案
本篇文章是对【大话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之十三】系统软件自己主动部署实现方案的更多相关文章
- 【大话QT之十二】基于CTK Plugin Framework的插件版本号动态升级
应用需求: 某些场景下我们可能面临这种问题,在执行着的应用程序不能终止的情况下,升级某个功能(或添,或减.或改动).在不採用CTK Plugin Framework插件系统架构的情况下这将是非常困难的 ...
- 菜鸟教程工具(三)——Maven自己主动部署Tomcat
书连接至背面,在博客上,他介绍了如何使用Maven该项目包,这篇文章说,关于如何使用Maven会踢war部署包Tomcat.而不是手动copy过去. 眼下比較流行的方式有两种:一种是利用Tomcat官 ...
- Powershell 的自己主动部署
工作中反复性的版本号移植,一天上线10几次,让我痛不欲生,频繁的操作也可能出现疲劳性失误,导致严重的生产故障.于是乎,闲暇时间.我開始研究使用powershell自己主动部署程序到Linuxse ...
- Eclipse中的Web项目自己主动部署到Tomcat
一.原因. 1.写java程序有一段时间了,但非常久没用eclipse了.所以使用eclipse编写的web项目部署到tomcat 的方式也不是非常清楚,以下记录一下将Eclipse 上的web项目自 ...
- 【大话QT之十四】QT实现多语言切换
功能需求: 网盘client要可以实现多国语言的切换,第一版要支持中.英文的切换. 在实现过程中感觉QT对多国语言的支持还是非常不错的.制作多语言包非常方便.切换的逻辑也非常easy. 以下就来看一下 ...
- SVN配置以及自己主动部署到apache虚拟文件夹
SVN配置以及自己主动部署到apache虚拟文件夹 一.VisualSVN server 服务端和TortoiseSVNclient下载 VisualSVN下载:http://subversion.a ...
- 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战
"使用ctkPluginFramework插件系统构建项目实战",这篇文章是写博客以来最纠结的一篇文章. 倒不是由于技术都多么困难,而是想去描写叙述一个项目架构採用ctkPlugi ...
- 【大话QT之七】QT序列化操作
应用需求: 在网盘开发过程中有这样一个需求.即对文件版本号进行控制,即记录文件版本号的更替信息,这里说的更替信息不过记录不同一时候刻的文件变化,即文件的增.删.改.重命名等操作.在每一个待监控的文件夹 ...
- 【大话QT之十七】Jenkins介绍及安装使用文档(与Git集成)
文章文件夹结构例如以下: 1> Jenkins与Git相关介绍 2> Jenkins部署安装 3> Gitblit部署安装 4> Jenkins与Git集成使用 5> 项 ...
随机推荐
- django --01 helloworld样例入门
很好的一个django教程:https://www.w3cschool.cn/django/django-first-app.html django版本:1.8 1.创建django工程 django ...
- 【shiro】2.spring整合shiro,注解控制shiro用户/角色/权限And/OR,没有权限跳转到固定页面
这几天粗浅的把shiro整合到spring中,并且注解控制shiro用户/角色/权限And/OR 步骤: 1.首先maven搭建web项目 2.创建数据库 user/role/authority 其中 ...
- 2011年排名前七位的Linux操作系统。
下面列出了2011年排名前七位的Linux操作系统. Ubuntu Ubuntu 是一个由全球化的专业开发团队建造的操作系统.它包含了所有您需要的应用程序:浏览器.Office 套件.多媒体程序.即时 ...
- RES协议
MFC 通过HTML访问内部资源 资源导入JPG的图片,资源对应ID是137 <img src="res:/JPG/#137" width="100%" ...
- Spring WebSocket入门(二) 转载
本文转载自:http://www.jianshu.com/p/8500ad65eb50 WebSocket前端准备 前端我们需要用到两个js文件:sockjs.js和stomp.js SockJS:S ...
- 如何获取gcr等镜像
在cloud.docker.com上注册一个用户,然后登录 然后在github.com上注册一个用户 通过github Desktop建立一个repository,同时加入一个Dockerfile,然 ...
- 统一D3D与OpenGL坐标系统
作者:游蓝海(http://blog.csdn.net/you_lan_hai) DirectX 3D与OpenGL坐标系统的差异性,给我们带来非常大的麻烦.让跨平台编程的新手非常困惑.近期在做一个跨 ...
- SecureCRT配置文件保存和导入
每次重装系统,都要重新配置SecureCRT,为了减少重复工作.直接在SecureCRT软件中找到:选项---全局选项---常规---配置文件夹下面路径:C:\Users\Administrator\ ...
- wireshark在windows下无法抓取localhost数据包
在调试SSL时要抓包,通过tcpview和minisniffer等工具明明看到tcp连接已经建立并开始收发数据了,但wireshark却总是无法抓到相应的数据包. 今天早上,HQ的高工告诉我“wire ...
- 浅析SQL Server中的执行计划缓存(上)
简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ...