`
feipigwang
  • 浏览: 743838 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

ESFramework介绍之(20)―― 插件自动升级

 
阅读更多

当我们的服务平台搭建成功后,所需要做的主要事情就是开发服务端功能插件(IFunAddin)和客户端插件(IPassiveAddin),每个插件对(AddinPair)实现了一组相似或相近的需求/功能。

好了,我们已经开发了十多对插件对,然后分别XCopy到了各个服务器节点上,“整个系统”已经投入了运行。通过前面的介绍(回顾),相信大家对我们的“整个系统”有了个大致的映像。我们的IRAS服务器通常只存在于一个节点上,而我们的AS和对应的多个FS通常分布在非常多个节点上(比如每个大中城市都分配一个AS),而且这些节点相距非常遥远,深圳AS位于深圳、上海AS位于上海、武汉AS位于武汉等等。整个系统非常正常稳定的运行了一段时间后,某一天,用户要求增加一个新功能,这时你说,“非常简单,只需要开发一个对应的功能插件和客户端插件即可”。是的,对开发来说确实只需要这样,但是对于部署了?你需要“跑到”每个节点上安装新的功能插件,你也需要“跑到”所有的客户端那里安装新的客户端插件。安装是很容易的,XCopy就行了,但是,你“跑”得过来吗?

看来,插件能够自动升级、自动加载/运行是非常重要的。手动进行这些工作,不仅效率低、而且非常容易出错。好了,我们来看ESFramework是如何对插件自动升级进行支持的。
插件自动升级包括以下几个方面的意思:
(1)当发现有更新版本的插件时,下载新版本插件覆盖旧版本插件。(插件版本升级)
(2)当发现有原来没有的插件时,下载新插件。(添加新功能)
(3)当发现原来的某插件在标准的插件目录中已经不存在时,删除本地对应的插件。(删除某项功能)

AddinUpgradeType枚举反映了以上几种情况。

publicenumAddinUpgradeType
{
Add,Remove,Update,Keep
//keep表示不需更新
}

我们需要在某个地方保存“标准的插件目录”信息,这通常是位于CommonDb(公共数据库,每个AS、FS、IRAS都可以访问)。标准插件目录中存储了每个插件的最新版本信息,这些信息由AddinVersionInformation类表示:

1 publicclassAddinVersionInformation
2{
3publicintAddinKey;
4publicfloatNewVersion;
5publicboolValid;
6publicstringAddinFileName;
7}

插件的自动升级由IAddinUpgrador支持,每当启动升级过程时,IAddinUpgrador的工作步骤如下:
(1)获取标准目录中的所有插件信息,并与本地的插件信息相比较,得到一个AddinUpgradeContent集合,集合中的AddinUpgradeContent对象反映了对某个插件应该进行怎样的操作――下载新版本覆盖、删除、下载新添加的插件。 AddinUpgradeContent定义如下:

1 publicclassAddinUpgradeContent
2{
3publicintAddinKey=-1;
4publicAddinUpgradeTypeUpgrageType=AddinUpgradeType.Keep;
5
6publicstringAddinFileName;//下载插件后存储于本地的名称
7}


(2)对于每个AddinUpgradeContent,IAddinUpgrador进行审查,并根据UpgrageType执行对应的操作。
比如是覆盖本地的插件,则IAddinUpgrador首先会删除本地存储介质上的插件,然后下载新版本插件到本地,接着要求IAddinManagement从内存中动态移除对应的插件,最后,命令IAddinManagement加载新版本的插件。这里存在一个插件动态替换的问题,大家可以通过链接进行了解。

(3)将升级成功/失败的信息输出、或记录到日志中。

IAddinUpgrador接口定义如下:

publicinterfaceIAddinUpgrador
{
IAddinUpgradeHelperAddinUpgradeHelper{
set;}
IAddinManagementAddinManagement{
set;}
stringLocalAddinDirectory{set;}

IAddinUpgradeMsgOutputerAddinUpgradeMsgOutputer{
set;}

voidStartUpgrador();
}

publicinterfaceIAddinUpgradeHelper
{
stringGetAddinUrl(intaddinKey);
AddinVersionInformation[]GetAddinVersionNew();
}

publicinterfaceIAddinUpgradeMsgOutputer
{
voidPutoutMsg(stringmsg);//用于记录升级成功、异常等信息
}

关于IAddinUpgrador的实现,大家可以参考发布的ESFramework源码中的Addin目录。

在我们的FS或客户端程序中(因为这两个地方需要实现插件自动升级),我们通常设置一个定时器,每隔一段时间就调用IAddinUpgrador. StartUpgrador()方法一次,来实现自动升级过程。

这里讲的是插件自动升级的过程,如果我们的服务平台发生了改变,AS、FS需要升级,该如何处理?其实思想与本文是差不多的,这将在下篇文章中介绍。
感谢关注!

上一篇文章:ESFramework介绍之(19)―― 对动态组ActiveGroup的支持

转到:ESFramework 可复用的通信框架(序)

分享到:
评论

相关推荐

    ESFramwork2.0

    消息部分: 1.ESFramework介绍之(1)――网络通信消息协议接口IContract <br>2.ESFramework介绍之(2)――网络通信消息NetMessage<br> <br>3.ESFramework介绍之(3)――消息处理器和处理器工厂 <br>4....

    ESFramework

    ESFramework ESFramework ESFramework

    ESFramework系列Demo源码

    本demo是在1.ESFramework之入门Demo的基础之上,增加了客户端之间传送文件(夹)的功能,并可以演示文件传送中断通知、断点续传等特性。 3.ESFramework之P2P通信Demo 本demo是在2.ESFramework之文件传送Demo的基础...

    PHP实例开发源码-ESFramework之P2P通信Demo php版.zip

    PHP实例开发源码—ESFramework之P2P通信Demo php版.zip PHP实例开发源码—ESFramework之P2P通信Demo php版.zip PHP实例开发源码—ESFramework之P2P通信Demo php版.zip

    ESFramework .net框架

    ESFramework的前生是EnterpriseServerBase类库,后来我将EnterpriseServerBase中的Network部分及建立于之上的应用抽象重新整理为ESFramework框架,这是一套完全可复用的、灵活的、单纯的、支持N层C/S架构的轻量级...

    ESFramework之文件传送Demov1.0

    本demo是在ESFramework.Demos.Simplest的基础之上,增加了客户端之间传送文件(夹)的功能,并可以演示文件传送中断通知、断点续传等特性。

    ESFramework之P2P通信Demo.rar

    本demo是在ESFramework.Demos.FileTransfer的基础之上,增加了P2P通信的功能。客户端之间如果P2P通道创建成功,则它们之间的消息将直接使用P2P通道传送。

    ESFramework2.0

    ESFramework2.2最新版本

    ESFramework2.0源码和Demo

    ESFramework2.0源码、 ESFramework Demos、 ESFramework4.7通信框架

    ESFramework实例

    ESFramework实例

    ESFramework2.0源码

    ESFramework2.0源码、 ESFramework Demos、 ESFramework4.7通信框架 即时通信框架

    ESFramework网络链接库

    ESFramework 虽然功能强大丰富,但是使用非常简单,因为其...而且,ESFramework还提供了Rapid引擎给使用者进行快速开发,从未接触过ESFramework的人,也可以在1-2个小时之内便上手使用Rapid引擎开发分布式通信系统。

    ESFramework网络通信框架

    这是一套完全可复用的、灵活...ESFramework不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework框架之上,引入的一个扩展层--ESFramework扩展层,专门用于解决的与具体应用相关的领域问题。

    ESFramework.Demo

    ESFramework.Demo

    ESFramework2.0 source

    .Net著名的Socket通讯框架ESFrameWork 2.0版本(最后的开源版本)

    ESFramework之入门Demo.rar

    本demo是一个简单的IM程序,展示了Rapid引擎最基础的功能:信息类型定义、协议定义、信息发送与处理、信息同步调用、好友上下线通知、断线重连等

    ESFramework之动态组Demo

    基于ESFramework框架的通信,动态创建组和加入组。

    PHP实例开发源码-ESFramework之文件传送Demo.zip

    PHP实例开发源码—ESFramework之文件传送Demo.zip PHP实例开发源码—ESFramework之文件传送Demo.zip PHP实例开发源码—ESFramework之文件传送Demo.zip

Global site tag (gtag.js) - Google Analytics