ZeroIce 的IcePatch2概念上相当简单,下面以Ice-3.6.3为例讲解如何实现远程更新:
在windows(Linux类似)下安装Ice-3.6.3后,在其\bin\有三款ZeroIce涉及更新功能的三个小工具,是动态版本的,如果需要静态版本请自行编译。
(1)icepatch2calc.exe该工具负责压缩指定目录下文件,并为每个文件生成一个包含校验和的索引。
(2)icepatch2server.exe是一个服务端,负责包含要分发给IcePatch2客户端的文件和子目录的文件系统目录(数据目录)。
(3)icepatch2client.exe是一个客户端,负责在客户端指定目录下重新创建数据目录及其内容或修补自上次运行以来更改的任何文件。
假如我们目前有一些需要更新到客户端的信息存放在D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\serverData目录下,其结构为:
conf
install.txt test.ini
lib
read.txt
首先需要通过icepatch2calc工具将serverData目录下的文件进行压缩和生成校对信息,启动cmd窗口(管理员),运行命令:
cd D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\
D:\ZeroC\Ice-3.6.3\bin\icepatch2calc.exe .\\serverData
则serverData目录下发生变更:
conf
install.txt install.txt.bz2 test.ini test.ini.bz2
lib
read.txt read.txt.bz2
IcePatch2.sum
接下来就是启动服务等待客户端的链接和更新数据,服务端需要配置其运行需要一些简要参数的配置文件iceSrv.patch如下,
#实例名
IcePatch2.InstanceName=MCSSVCGrid
#指定目录
IcePatch2.Directory=D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\serverData
#服务地址与端口
IcePatch2.Endpoints=tcp -h 127.0.0.1 -p 9988
在刚启动cmd窗口运行命令启动服务:
D:\ZeroC\Ice-3.6.3\bin\icepatch2server.exe --Ice.Config=iceSrv.patch
最后我们用客户端去加载和更新配置,启动客户端样例前需要先配置客户端所需的运行参数简要配置文件iceClient.patch.
假如我的客户端配置文件iceClient.patch放置在本机D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\icePathTestClient下,需要加载更新的资料指定为D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\iceParhTestLoad下,则iceClient.patch配置为:
#服务端链接信息(实例、地址、端口)
IcePatch2Client.Proxy=MCSSVCGrid/server:tcp -h 127.0.0.1 -p 9988
#配置加载或更新的指定目录
IcePatch2Client.Directory=D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\iceParhTestLoad
再启动一个cmd命令窗口,
cd D:\SYE_MCS_PRO\pcs_project\sye_mcs\mgr\icePathTestClient
D:\ZeroC\Ice-3.6.3\bin\icepatch2client.exe --Ice.Config=iceClient.patch
客户端会查询IcePatch2.sum文件进行校验,如果是第一次会进行创建,创建时会询问,进行确认即可,若存在该文件会将其与服务端的IcePatch2.sum进行比较,进行更新。
最终在iceParhTestLoad下
conf
install.txt test.ini
lib
read.txt
IcePatch2.sum
一个IcePatch远程更新样例如此简单部署就可实现,但实际中使用时需要注意几点:
1)目录文件和空文件不会生成压缩文件
2)只会在顶层目录(指定目录)下生成校验和文件
3)服务端需要给各个客户端分发的文件资料有更新,需要icepatch2calc重新校验并重启服务icepatch2server
4)可以在自身的客户端集成IcePatch2 Client实用库的API(IcePatch2/ClientUtil.h),实现客户端启动校对版本,自动更新升级等更复杂的功能要求。