写了一个自动更新服务网站和自动更新客户端。基本功能测试完毕。记录下

项目地址:https://github.com/TeemoHQ/AutoUpdate

需求

热替换自我更新,自动集成,回退版本,守护进程,服务端操作,更新维度,脚本控制(bat)多个客户端。

介绍



 
 

AutoUpdateServer采用Nancy WEB框架。

功能:1.提供上传文件的接口

2.匹配文件并且建立多个不用客户端的文件仓库

3.打包,提供更新包,

AutoUpdateClient采用控制台

功能:1.循环请求服务端,检查当前客户端是否需要更新

2.检查客户端是否空闲

3.更新客户端文件

4.脚本控制客户端特殊文件

5.检查客户端进程是否关闭,如果关闭则打开(非更新状态下)

客户端

功能:提供当前是否空闲接口


新的知识点梳理

1.Nancy.Forms authentication

2.Nancy CSRF防御

3.Nancy 静态文件的使用

4.7ZIP 压缩解压

5.命名管道通讯

6.自动更新算法逻辑

其他:Nancy IIS部署的时候的权限释放,CRC包的加密,log4net

核心算法

核心的算法都在服务端(大部分时间差不多都花在这里。改了四五次)

1.匹配文件。生成更新包。一开始是通过文件version属性,但发现有些文件没有version属性,找到更好的方法。下面贴出方法。

        private static bool isTheSame(FileInfo f1, FileInfo f2)
{
using (var md5 = MD5.Create())
{
byte[] hash1, hash2;
using (var stream = f1.OpenRead())
hash1 = md5.ComputeHash(stream);
using (var stream = f2.OpenRead())
hash2 = md5.ComputeHash(stream);
return hash1.SequenceEqual(hash2);
}
}
 

2.文件仓库管理算法(代码就不贴了。说下逻辑)

//1.第一次上传的时候或者当前没有出新文件的时候。和模板文件匹配.

BaseModel是基文件,因为每个客户端其实类似,部分DLL不同而已。所以第一次都先匹配这个

//2.第二次开始:

//  A【修改】.上传文件和本地文件都存在,对比不同,则把最新的文件复制到work目录和仓库目录,并且设置上传文件version为最新version(存入数据库时)

//  B【不变】.上传文件和本地文件都存在,对比相同,不复制文件,设置上传文件version为老版本文件的version(存入数据库时)

//  C【新增】.上传文件存在,本地文件不存在,则把最新的文件复制到work目录和仓库目录,并且设置上传文件version为最新version(存入数据库时)

//  D【删除】.上传文件不存在,本地文件存在。暂时不操作。

3.控制回滚 (代码不贴)

逻辑:数据库记录每次上传的文件版本信息。回滚时就想减,就拿到新的文件

 

效果图:

 

 

Nancy+BUI+SQLite自动更新服务端和客户端保护更新程序的更多相关文章

  1. C#<热血传奇>服务端源代码再次给力更新

    前段时间一直在忙公司项目,最近抽点空稍微把部分代码重新整理一下(代码太久没碰很多地方都忘记了 囧~~~) 此次还是更新服务端,并修正上一版里面存在的很多指针 异常BUG...  (代码比较烂,还请各位 ...

  2. 携程apollo配置中心服务端如何感知配置更新?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  3. 携程开源分布式配置系统Apollo服务端是如何实时更新配置的?

    引言 前面有写过一篇<分布式配置中心apollo是如何实时感知配置被修改>,也就是客户端client是如何知道配置被修改了,有不少读者私信我你既然说了client端是如何感知的,那服务端又 ...

  4. SVN 服务端 和 客户端

    网址大全  |  EF CodeFirst  |  电视  |  MyNPOI  |  开源  |  我的皮肤  |  ASP.NET MVC4  |  前端提升  |  LINQ  |  WCF   ...

  5. WCF心跳判断服务端及客户端是否掉线并实现重连接

    WCF心跳判断服务端及客户端是否掉线并实现重连接 本篇文章将通过一个实例实现对WCF中针对服务端以及客户端是否掉线进行判断:若掉线时服务器或客户端又在线时将实现自动重连:将通过WCF的双工知识以及相应 ...

  6. [企业化NET]Window Server 2008 R2[3]-SVN 服务端 和 客户端 基本使用

    1.  服务器基本安装即问题解决记录      √ 2.  SVN环境搭建和客户端使用 2.1  服务端 和 客户端 安装    √ 2.2  项目建立与基本使用     √ 2.3  基本冲突解决, ...

  7. oauth2.0服务端与客户端搭建

    oauth2.0服务端与客户端搭建 - 推酷 今天搭建了oauth2.0服务端与客户端.把搭建的过程记录一下.具体实现的功能是:client.ruanwenwu.cn的用户能够通过 server.ru ...

  8. vertx 从Tcp服务端和客户端开始翻译

    写TCP 服务器和客户端 vert.x能够使你很容易写出非阻塞的TCP客户端和服务器 创建一个TCP服务 最简单的创建TCP服务的方法是使用默认的配置:如下 NetServer server = ve ...

  9. SVN1.6服务端和客户端安装配置指导

    本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1 ...

随机推荐

  1. InfoPi简介、试用链接、资料索引

    InfoPi的定位是“个人信息收集服务器”. 用户可以灵活地定义信息的来源,比如从网页抓取感兴趣的信息.订阅博客.从温度传感器读取数据,等等. 然后,把收集到的信息用web的方式展示出来. 可以把In ...

  2. JS正则截取两个字符串之间的字符串

    match方法 var str = "iid0000ffr"; var substr = str.match(/id(\S*)ff/); console.log(substr) 返 ...

  3. Ubuntu 16.04 安装ftp服务器传输文件

    最近在搞深度学习,老师比较宝贝他的服务器,要求我以后负责管理服务器.往后所有要使用服务器的人都必须向我申请账号,然后只允许客户端访问,使用文件传输软件传输文件.像我这样一个linux菜逼,这种要求不是 ...

  4. CocoaPods使用详细说明

    使用说明: 原文:http://blog.csdn.net/lizhongfu2013/article/details/26384029 http://blog.csdn.net/showhillle ...

  5. tomcat与oracle关于8080端口的冲突

    http://blog.csdn.net/baidu_24256693/article/details/44863935 由于电脑里同时安装了tomcat与oracle,所以8080的端口是冲突的. ...

  6. python---IPy

    Python第三方模块IPy,可完成高效的IP规划工作 #安装 #pip3 install IPy #最新版本V0.83 IP地址 网段的基本处理 >>>from IPy impor ...

  7. (error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about t

    运行redis过程中,突然报错如下: (error) MISCONF Redis is configured to save RDB snapshots, but is currently not a ...

  8. 添加Web引用

  9. Sql Server分割字符串函数

    -- Description: 分割字符串函数 -- SELECT * FROM dbo.Split('a,b,c,d,e,f,g',',') -- ========================= ...

  10. 采用CAS原理构建单点登录

    企业的信息化过程是一个循序渐进的过程,在企业各个业务网站逐步建设的过程中,根据各种业务信息水平的需要构建了相应的应用系统,由于这些应用系统一般是在不同的时期开发完成的,各应用系统由于功能侧重.设计方法 ...