[C#]服務(wù)器實(shí)現(xiàn)函數(shù)熱更新
熱更新在不停機(jī)的情況下,對(duì)問(wèn)題進(jìn)行緊急修復(fù),可以有效避免用戶(hù)流失,是一種快捷、低成本的更新方法,是應(yīng)用程序的用戶(hù)體驗(yàn)和競(jìng)爭(zhēng)力。這里的實(shí)現(xiàn)方式主要是通過(guò)動(dòng)態(tài)鏈接庫(kù)(DLL)的重載,具體實(shí)現(xiàn)則是通過(guò)修改XML配置指向新的DLL文件,網(wǎng)頁(yè)以傳指令參數(shù)執(zhí)行更新函數(shù)。
二、實(shí)現(xiàn)前提
項(xiàng)目需要模塊化設(shè)計(jì),將每個(gè)模塊都打包成獨(dú)立的DLL文件,從而實(shí)現(xiàn)對(duì)特定模塊的熱更新。那本人dot-net服務(wù)器項(xiàng)目舉例,會(huì)將業(yè)務(wù)邏輯抽離出來(lái),單獨(dú)開(kāi)一個(gè)HHServer.HotFix項(xiàng)目。項(xiàng)目下分別有Logic文件夾(處理業(yè)務(wù)邏輯)、Managers文件夾(接口工具等管理類(lèi))、ProtoHandler文件夾(網(wǎng)絡(luò)協(xié)議Handler)等其他Handler分類(lèi)文件夾。涉及需要熱更新的業(yè)務(wù)邏輯都應(yīng)該在此項(xiàng)目里處理。
三、腳本介紹
用于熱更類(lèi)的頭標(biāo)記,詳細(xì)可參考C# 特性(Attribute):
熱更配置通過(guò)項(xiàng)目編譯后的Configs文件夾下的HotFixConfig.xml作配置文件。
HotFixHelper.cs
其中Activator.CreateInstance為方法的核心,我們通過(guò)這個(gè)方法將Handler實(shí)例化,并調(diào)用接口約定的方法進(jìn)行使用。需要在其他項(xiàng)目模塊初始化時(shí)調(diào)用HotFixMgr.Load()方法。
只能熱更HotFix項(xiàng)目中添加了標(biāo)記的函數(shù),修改代碼后對(duì)項(xiàng)目進(jìn)行編譯,生成新的HHServer.HotFix.dll文件。
重命名HHServer.HotFix.dll文件,例如HHServer.HotFix01.dll,又或者生成自行在后綴添加時(shí)間戳。
修改Configs文件夾下的HotFixConfig.xml文件,將Value="HHServer.HotFix.dll"改為新的dll文件。
熱重載調(diào)用HotFixMgr.Load()方法。這里調(diào)用的方式是通過(guò)網(wǎng)頁(yè)參數(shù)傳入:
??
又或者在控制臺(tái)輸入操作: