목차
软件的增量更新
原来怎么做
覆盖安装
打补丁
理理我们最核心的需求吧
省流量
下载方便
服务端发布方便
那么我们该怎么做
文件的格式
简单的说明
项目地址
客户端
服务端
这样做的好处
跟其他软件结合方便
服务器发布方便
怎么用
怎么用客户端呢
客户端的运行图
不妥之处
实现的不妥之处
후기
백엔드 개발 C#.Net 튜토리얼 소프트웨어의 증분 업데이트란 무엇입니까?

소프트웨어의 증분 업데이트란 무엇입니까?

Jun 23, 2017 pm 04:53 PM
고쳐 쓰다 소프트웨어

软件的增量更新

因为转战C#了,之前很多东西都丢了。现在从头开始弄基础服务,首先第一个就是客户端的自动更新。之前简单搜了一下相关功能的实现。有一个文章我没有看懂,另一片文章里边说的应该是提交本地数据,然后计算差异化包,让服务器返回差异化数据包。当然这样不是不行。肯定是可行的,但是对于服务器来说这部分工作可能就有点麻烦了。因为你得让服务器有这个计算能力。参考Cocos2dx 3.9的Lua增量更新模块,简单做了一个基础框架模型出来。

原来怎么做

覆盖安装

这个其实很简单,就是重新下载一个完整的安装包,然后重新安装一遍,不管原来存不存在内容,如果原来存在内容那么久替换掉,如果原来不存在内容那么就添加上新内容就是了。其实这个说起来很简单,但是可能会存在一些问题。

- 流量问题 可能现在看来这个问题并不是多么大的问题,因为现在带宽已经非常宽了。100M的内容按照10Mpbs的带宽来算,也就一分多钟就能下载完了。

- 渣子问题 这种覆盖安装一般会存在一个渣子的问题。比如说,我在安装目录里边生成了一个不在后续安装包的文件,那么这个文件就没有办法被清理掉。这就可能很尴尬了,比如说你的项目依赖系统提供的一个Dll,如果你的目录中直接存在这个Dll那么就会优先使用你对应目录中的Dll(如果我没记错应该是这样),如果是我作为攻击者的话,我很有可能会给你放一个我种下病毒的Dll。这就很尴尬了
로그인 후 복사

打补丁

这个原理也比较简单,其实就是我们都觉得完全安装太费劲了,那么我的软件又需要比较频繁的更新,比如说某些桌游可能过个节日要上节日相关的功能,这样就可以添加新的Dll然后又不能出一个一个的完整安装包。那么我可以在完整安装包的基础上打补丁嘛。比如说,我出了版本1.0,过了十天半个月过端午了,我出个龙舟皮肤一类的,那我就可以直接在1.0的基础上打个龙舟补丁,这样他就变成了最新的客户端1.1。如果将来要上别的功能了我就在1.1的基础上打个补丁,让客户端变成1.2。不过这样也会有他的问题。

- 顺序安装 在安装的过程中只能以此递增式安装,我只能1.0 => 1.1 => 1.2;不能1.0 =》 1.2。因为中间是没有对应的补丁的。

- 流量问题 其实这种解决方案可能会带来一些问题,比如说,现在端午节,我需要把房子装饰成龙舟的样式;然后五一劳动节,我又需要把房子装修成五一劳动节的样子。那么都是关于房子的皮肤,我是没有办法都保留的,因为来年的时候肯定就不能这么装修了,因为过时了太Low了。那么关于这部分的内容,如果你想一点一点的升级上来对于最后的版本来说是没用的,你占用的流量一点用都没有。太尴尬了。

- 维护的复杂度 因为你不能直接出了一个1.0之后全都是使用补丁,如果当你的版本号递增到一定程度以后,补丁的大小可能远远超过了你重新去下载一个最新的客户端的大小。所以只能通过时间也好(比如半年或者一个季度)通过意义(比如说大版本号 2.0 3.0)来生成一个完整的客户端。这样用户在下载的时候就可以找一个最近的完整的客户端版本号。然后再打补丁的方式来获得最新的客户端,不过这种维护的复杂度应该也不小。
로그인 후 복사

理理我们最核心的需求吧

其实我们的需求很简单,获取最新的客户端。然后附加要求就是要省流量、下载方便、服务端发布方便。

省流量

其实说到省流量,就是能用本地的就直接使用本地。本地实在是没有的文件,那么就从网络上下载。这样基本上就做到了省流量的效果。

下载方便

不需要做太多的操作,当然这个很多软件都做到了这一点。上文中提到的其实也可以做到自动化,比如说,完整安装的那么我就直接下载最新的完整安装包就好了,如果是打补丁的这种,那么就下载最新的完整安装包以及后边的补丁就好了。其实这个真的要做,对用户来说应该是没有感觉得。都一样,不过对于程序员来说。可能面临的开发就不太一样了。

服务端发布方便

其实这个完全是针对于程序员的了,一般来说,如果这个事情可以程序来自动完成那么就肯定交给程序了。比如说完整晚装包的这种,肯定能够做到自动打包。打补丁的这种,无非也就是根据上一个版本生成一个补丁。或者再生成一个完整安装包。上传到合适的文件服务器就好了。其实打补丁也好,完整安装包也好,都有一个显著的优势就是可以很方便的放到多个服务器上来进行文件的负载均衡。

那么我们该怎么做

在考虑这个问题的时候,我想到了之前接触的Cocos2dx 3.9 Lua 自动更新模块,他是这么做,通过一个配置文件,来说明最新的客户端中都包含了那些文件,这些文件的MD5值是什么,然后网络路径是什么。这样客户端拿到这个配置清单的时候,就可以轻松的判断本地的那些文件是可以继续用的。那些文件是过时了的,这样客户端通过配置心中的网络路径位置获取最新的对应文件就好了嘛。不过那也是很久之前的事情了,不然,我就不需要自己重新规划了。直接抄一份代码就好了嘛。还是自己整理一套吧。这样来的更彻底一些,想改什么就改什么。

文件的格式

{"VersionsCheckCode": "XC09VU4QCRD43LRF01BYOD26D45DWEEKX5KECUKIA7Q4160FKAWQBHXTKE63Z148","TimeStamp": 1496649771,"ServerUrl": "http://or2dwwrsz.bkt.clouddn.com","FileInfos": [{"FilePath": "JumpKick.HttpLib\\packages\\Moq.4.2.1409.1722\\lib\\net40\\Moq.xml","FileMD5": "c7e9c70a19b84f31e51eb65f4ee38803","FileUrl": "LV4ZBB_c7e9c70a19b84f31e51eb65f4ee38803"},{"FilePath": "JumpKick.HttpLib\\packages\\Moq.4.2.1409.1722\\lib\\sl4\\Moq.Silverlight.dll","FileMD5": "0ee20e7ccba7d6667c48efebe41503ff","FileUrl": "X057QT_0ee20e7ccba7d6667c48efebe41503ff"},{"FilePath": "JumpKick.HttpLib\\packages\\Moq.4.2.1409.1722\\lib\\sl4\\Moq.Silverlight.xml","FileMD5": "c25417228db2dd820f45e93112e8596c","FileUrl": "S0LO6G_c25417228db2dd820f45e93112e8596c"}]}
로그인 후 복사

简单的说明

  • VersionsCheckCode:当前的版本文件校验信息。

  • TimeStamp:做这个文件的的时间戳

  • ServerUrl:服务器的地址,主要是用来跟后续的文件进行拼接来用的

  • FileInfos:对应的文件信息列表

  • FileInfos[?]:FilePath:本地文件路径,从网络下载之后对应的本地地址

  • FileInfos[?]:FileMD5:这个文件的MD5值,用来判断原始的对应位置的文件是否与网络中的文件相同

  • FileInfos[?]:FileUrl:这个文件在网络中存在的位置,当然这个是没有前边的URL路径的是ServerUrl后边的内容

项目地址

其实嘛整个项目最复杂的地方时这个更新的想法与这个文件的制定。剩下的内容其实就比较简单了,就是具体的代码的实现了。代码方便我就懒得讲了,直接把项目的地址扔上来了事。

客户端


服务端


这样做的好处

省流量、跟其他软件结合方便、服务器发布方便。省流量这个上边提到了我就说了。

跟其他软件结合方便

其实很容易理解,就是这个软件跟被更新的软件一毛钱关系没有。所以我可以直接跑起来就行了,不需要关系具体被更新的软件是怎么搞得。最多采用这个的项目。重新改一下我们这边的UI就行了。

服务器发布方便

其实最麻烦的事情就是服务器这边。需要生成这个配置文件,我这边服务器端其实并没有在运行指的就是生成这个文件的工具。我可以指定一个目录。然后生成这个文件,将对应目录的所有文件导出到一个输出目录。不过对于很多CDN不支持多级目录(比如七牛),所以我将所有的文件都换掉了名字,让他们尽量的不重复,程序可读就行了。

怎么用

首先使用我写好的服务端生成对应的配置文件和改名文件。

소프트웨어의 증분 업데이트란 무엇입니까?

生成的目录结构是这样色的,配置文件放到一个固定的目录里边去。UpLoad文件夹上传到某一个文件服务器上,这里我是用的七牛云

소프트웨어의 증분 업데이트란 무엇입니까?

然后把UpLoad目录中的文件全都上传上来

소프트웨어의 증분 업데이트란 무엇입니까?

上传完了就是这个样子的。

소프트웨어의 증분 업데이트란 무엇입니까?

致辞服务器就部署好了,等有了新版本重复一遍这个操作就行。其实上传服务器的这部分工作可以集成到服务端中。上传内容就好了嘛,其实很简单的。当然了,这个我懒。之前也没有研究七牛的SDK这个可以作为一个功能上的扩展,反正项目我已经开源了,感兴趣的人可以自己扩展这部分功能。好吧我们继续来说客户端怎么弄吧。

怎么用客户端呢

            AutoUpdateHelper helper = new AutoUpdateHelper();
            helper.WebXmlUrl = "http://7xs9hw.com1.z0.glb.clouddn.com/VersionInfo.json";
            helper.ConfigXmlPath = "SynchronizeVersions.xml";
            helper.TempXmlPath = "SynchronizeVersions_Temp.xml";
            helper.FilePath = "Client";

            helper.CallBack = obj =>
            {
                if (obj is Dictionary<UpdateDataType, object>)
                {
                    var dic = obj as Dictionary<UpdateDataType, object>;
                    foreach (var item in dic)
                    {
                        if (Name2Action.ContainsKey(item.Key))
                            Name2Action[item.Key](item.Value);
                    }
                }
            };

            try
            {
                helper.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
로그인 후 복사

其实就是一个简单的设置网址跟配置文件。其实呢这个地方应该吧配置也放到配置文件里边去,为什么没放呢?因为我懒,哈哈哈。

客户端的运行图

소프트웨어의 증분 업데이트란 무엇입니까?

客户端跑完了就关了,其实应该是跑完了运行某一个具体的文件,然后自动更新的逻辑就完成了,这部分我会之后继续完善。

不妥之处

这么样处理其实下载会变得很灵活。但是也会带来其他的问题。比如之前提到的打包的问题。因为服务器只是一个文件服务器,所以服务器并没有计算出差异包的能力,所以所有的文件都是一个一个的下载的,这样就会出现很多小文件的下载。这样的下载其实是比较蛋疼的。这是设计上的坑。为了灵活只能妥协了。

实现的不妥之处

其实到目前为止我只是实现了最基础的功能。甚至还不全,比如之后的文件启动,不过大体的框架已经搭建起来了。至于后边有很多实现不是很合理的地方,我先简单列一列,方便之后维护。

  • 下载失败重试不存在

  • 下载数量的限制不存在(现在是有多少下载多少,很多同时下载可能会存在超时的问题。)

  • 完成了之后没有启动对应的文件

  • 现在没有快速启动的功能(现在每次启动都需要重新校验所有文件,其实可以避免这个问题的。)

후기

이 프로젝트는 불완전한 프레임워크일 뿐이지만. 하지만 이 접근 방식은 업데이트를 더욱 흥미롭게 만들 것입니다. 이 프레임워크를 함께 완성해 봅시다. 나는 원래 의도를 잊지 않고 성공적인 오픈소스 프로젝트를 구축하는 것을 선호합니다.

위 내용은 소프트웨어의 증분 업데이트란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Blizzard Battle.net 업데이트가 45%에서 멈추는 문제를 해결하는 방법은 무엇입니까? Blizzard Battle.net 업데이트가 45%에서 멈추는 문제를 해결하는 방법은 무엇입니까? Mar 16, 2024 pm 06:52 PM

블리자드 Battle.net 업데이트가 45%에서 계속 멈춥니다. 어떻게 해결하나요? 최근 많은 사람들이 소프트웨어를 업데이트할 때 진행률이 45%에서 멈췄습니다. 여러 번 다시 시작해도 계속 멈춥니다. 그렇다면 이 상황을 해결하려면 어떻게 해야 할까요? 이 소프트웨어 튜토리얼은 더 많은 사람들에게 도움이 되기를 바라며 작업 단계를 공유할 것입니다. 블리자드 Battle.net 업데이트가 45%에서 계속 멈춥니다. 해결 방법 1. 클라이언트 1. 먼저 클라이언트가 공식 웹사이트에서 다운로드한 공식 버전인지 확인해야 합니다. 2. 그렇지 않은 경우 사용자는 아시아 서버 웹사이트에 들어가 다운로드할 수 있습니다. 3. 입력 후 오른쪽 상단의 다운로드를 클릭하세요. 참고: 설치할 때 중국어 간체를 선택하지 마십시오.

크리스탈디스크마크란 어떤 소프트웨어인가요? -크리스탈디스크마크는 어떻게 사용하나요? 크리스탈디스크마크란 어떤 소프트웨어인가요? -크리스탈디스크마크는 어떻게 사용하나요? Mar 18, 2024 pm 02:58 PM

CrystalDiskMark는 순차 및 무작위 읽기/쓰기 속도를 빠르게 측정하는 하드 드라이브용 소형 HDD 벤치마크 도구입니다. 다음으로 편집자님에게 CrystalDiskMark 소개와 crystaldiskmark 사용법을 소개하겠습니다~ 1. CrystalDiskMark 소개 CrystalDiskMark는 기계식 하드 드라이브와 솔리드 스테이트 드라이브(SSD)의 읽기 및 쓰기 속도와 성능을 평가하는 데 널리 사용되는 디스크 성능 테스트 도구입니다. ). 무작위 I/O 성능. 무료 Windows 응용 프로그램이며 사용자 친화적인 인터페이스와 다양한 테스트 모드를 제공하여 하드 드라이브 성능의 다양한 측면을 평가하고 하드웨어 검토에 널리 사용됩니다.

CrystalDiskinfo 사용 튜토리얼-CrystalDiskinfo는 어떤 소프트웨어입니까? CrystalDiskinfo 사용 튜토리얼-CrystalDiskinfo는 어떤 소프트웨어입니까? Mar 18, 2024 pm 04:50 PM

CrystalDiskInfo는 컴퓨터 하드웨어 장치를 확인하는 데 사용되는 소프트웨어입니다. 이 소프트웨어에서는 읽기 속도, 전송 모드, 인터페이스 등과 같은 컴퓨터 하드웨어를 확인할 수 있습니다! 그러면 이러한 기능 외에도 CrystalDiskInfo를 사용하는 방법과 CrystalDiskInfo가 정확히 무엇인지 정리해 보겠습니다! 1. CrystalDiskInfo의 유래 컴퓨터 호스트의 세 가지 주요 구성 요소 중 하나인 솔리드 스테이트 드라이브는 컴퓨터의 저장 매체이며 컴퓨터 데이터 저장을 담당합니다. 소비자 경험에 영향을 미칩니다. 소비자가 새 장치를 받으면 타사 소프트웨어나 기타 SSD를 사용하여 다음을 수행할 수 있습니다.

Ubuntu 24.04에 Angular를 설치하는 방법 Ubuntu 24.04에 Angular를 설치하는 방법 Mar 23, 2024 pm 12:20 PM

Angular.js는 동적 애플리케이션을 만들기 위해 자유롭게 액세스할 수 있는 JavaScript 플랫폼입니다. HTML 구문을 템플릿 언어로 확장하여 애플리케이션의 다양한 측면을 빠르고 명확하게 표현할 수 있습니다. Angular.js는 코드를 작성, 업데이트 및 테스트하는 데 도움이 되는 다양한 도구를 제공합니다. 또한 라우팅 및 양식 관리와 같은 많은 기능을 제공합니다. 이 가이드에서는 Ubuntu24에 Angular를 설치하는 방법에 대해 설명합니다. 먼저 Node.js를 설치해야 합니다. Node.js는 서버 측에서 JavaScript 코드를 실행할 수 있게 해주는 ChromeV8 엔진 기반의 JavaScript 실행 환경입니다. Ub에 있으려면

Windows가 지정된 장치, 경로 또는 파일에 액세스할 수 없습니다. Windows가 지정된 장치, 경로 또는 파일에 액세스할 수 없습니다. Jun 18, 2024 pm 04:49 PM

친구의 컴퓨터에 이러한 오류가 있습니다. "이 PC"와 C 드라이브 파일을 열면 "Explorer.EXE Windows가 지정된 장치, 경로 또는 파일에 액세스할 수 없습니다. 프로젝트에 액세스할 수 있는 적절한 권한이 없을 수 있습니다. " 폴더, 파일, 이 컴퓨터, 휴지통 등을 포함하여 더블클릭하면 이런 창이 뜨는데, 마우스 오른쪽 버튼을 클릭해서 여는 것이 정상입니다. 이는 시스템 업데이트로 인해 발생합니다. 이러한 상황이 발생하면 아래 편집기에서 해결 방법을 알려드립니다. 1. 레지스트리 편집기 Win+R을 열고 regedit를 입력하거나 시작 메뉴를 마우스 오른쪽 버튼으로 클릭하여 실행하고 regedit를 입력합니다. 2. "Computer\HKEY_CLASSES_ROOT\PackagedCom\ClassInd" 레지스트리를 찾습니다.

Edge와 함께 로드하려는 호환되지 않는 소프트웨어 시도를 해결하는 방법은 무엇입니까? Edge와 함께 로드하려는 호환되지 않는 소프트웨어 시도를 해결하는 방법은 무엇입니까? Mar 15, 2024 pm 01:34 PM

Edge 브라우저를 사용하다 보면 가끔 호환되지 않는 소프트웨어가 함께 로드를 시도하는 경우가 있는데 무슨 일이 일어나고 있는 걸까요? 이 사이트에서는 Edge와 호환되지 않는 소프트웨어를 로드하는 문제를 해결하는 방법을 사용자에게 주의 깊게 소개합니다. Edge로 로드하려고 하는 호환되지 않는 소프트웨어를 해결하는 방법 솔루션 1: 시작 메뉴에서 IE를 검색하고 IE로 직접 액세스합니다. 해결 방법 2: 참고: 레지스트리를 수정하면 시스템 오류가 발생할 수 있으므로 주의해서 작업하십시오. 레지스트리 매개변수를 수정합니다. 1. 작동 중에 regedit를 입력하십시오. 2.\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Micros 경로를 찾으세요.

photoshopcs5는 어떤 소프트웨어인가요? -photoshopcs5 사용법 튜토리얼 photoshopcs5는 어떤 소프트웨어인가요? -photoshopcs5 사용법 튜토리얼 Mar 19, 2024 am 09:04 AM

PhotoshopCS는 Photoshop Creative Suite의 약자로 Adobe에서 제작한 소프트웨어입니다. 그래픽 디자인 및 이미지 처리에 널리 사용됩니다. PS를 처음 배우는 사용자로서 오늘은 photoshopcs5가 무엇인지, photoshopcs5를 사용하는 방법에 대해 설명하겠습니다. . 1. Photoshop CS5는 어떤 소프트웨어입니까? Adobe Photoshop CS5 Extended는 영화, 비디오 및 멀티미디어 분야의 전문가, 3D 및 애니메이션을 사용하는 그래픽 및 웹 디자이너, 엔지니어링 및 과학 분야의 전문가에게 이상적입니다. 3D 이미지를 렌더링하고 이를 2D 합성 이미지로 병합합니다. 쉽게 비디오 편집

MSI 그래픽 카드 드라이버를 업데이트하는 방법은 무엇입니까? MSI 그래픽 카드 드라이버 다운로드 및 설치 단계 MSI 그래픽 카드 드라이버를 업데이트하는 방법은 무엇입니까? MSI 그래픽 카드 드라이버 다운로드 및 설치 단계 Mar 13, 2024 pm 08:49 PM

MSI 그래픽 카드는 시장의 주류 그래픽 카드 브랜드입니다. 우리는 그래픽 카드가 성능을 달성하고 호환성을 보장하려면 드라이버를 설치해야 한다는 것을 알고 있습니다. 그렇다면 MSI 그래픽 카드 드라이버를 최신 버전으로 업데이트하는 방법은 무엇입니까? 일반적으로 MSI 그래픽 카드 드라이버는 공식 웹사이트에서 다운로드하여 설치할 수 있습니다. 자세한 내용은 아래에서 알아보세요. 그래픽 카드 드라이버 업데이트 방법: 1. 먼저 "MSI 공식 웹사이트"에 들어갑니다. 2. 입력 후 오른쪽 상단의 "검색" 버튼을 클릭하여 그래픽 카드 모델을 입력하세요. 3. 그런 다음 해당 그래픽 카드를 찾아 세부 정보 페이지를 클릭합니다. 4. 그런 다음 위의 "기술 지원" 옵션을 입력하세요. 5.마지막으로 "드라이버 및 다운로드"로 이동합니다.

See all articles