[C#]服务器实现函数热更新
热更新在不停机的情况下,对问题进行紧急修复,可以有效避免用户流失,是一种快捷、低成本的更新方法,是应用程序的用户体验和竞争力。这里的实现方式主要是通过动态链接库(DLL)的重载,具体实现则是通过修改XML配置指向新的DLL文件,网页以传指令参数执行更新函数。
二、实现前提
项目需要模块化设计,将每个模块都打包成独立的DLL文件,从而实现对特定模块的热更新。那本人dot-net服务器项目举例,会将业务逻辑抽离出来,单独开一个HHServer.HotFix项目。项目下分别有Logic文件夹(处理业务逻辑)、Managers文件夹(接口工具等管理类)、ProtoHandler文件夹(网络协议Handler)等其他Handler分类文件夹。涉及需要热更新的业务逻辑都应该在此项目里处理。
三、脚本介绍
用于热更类的头标记,详细可参考C# 特性(Attribute):
热更配置通过项目编译后的Configs文件夹下的HotFixConfig.xml作配置文件。
HotFixHelper.cs
其中Activator.CreateInstance为方法的核心,我们通过这个方法将Handler实例化,并调用接口约定的方法进行使用。需要在其他项目模块初始化时调用HotFixMgr.Load()方法。
只能热更HotFix项目中添加了标记的函数,修改代码后对项目进行编译,生成新的HHServer.HotFix.dll文件。
重命名HHServer.HotFix.dll文件,例如HHServer.HotFix01.dll,又或者生成自行在后缀添加时间戳。
修改Configs文件夹下的HotFixConfig.xml文件,将Value="HHServer.HotFix.dll"改为新的dll文件。
热重载调用HotFixMgr.Load()方法。这里调用的方式是通过网页参数传入:
又或者在控制台输入操作: