skynet熱更方式總結
skynet因為require有快取,不能像如下方式熱更:
package.loaded[module] = nil
require(module)
雖然可以如下這樣清下快取:
local cache = require "skynet.codecache"
cache.clear()
但是這樣的成本比較大。只更新一個指令碼,卻把所有指令碼的快取清了。
skynet的DebugConsole服務提供一個更新service的方法:inject。
inject address script 將 script 名字對應的指令碼插入到指定服務中執行(通常可用於熱更新補丁)。
其原理就是修改skynet.dispatch的upvalue,如
--我們的服務裡
skynet.dispatch("lua", function(session, source, cmd,...)
local f = assert(CMD[cmd])
skynet.ret(skynet.pack(f(...)))
end)
我們就可以修改CMD。如下面的patch.lua指令碼:
local CMD = _P.lua.CMD
CMD.test = function()
print('new')
end
如果需要更通用的熱更方式可以參考雲風的
如何讓 lua 做盡量正確的熱更新
如果模組新增約束條件,沒有初始化程式,可以參考:jinq0123/hotfix
相關文章
- 熱更
- 散知識點總結(持更)
- JS中繼承方式總結JS中繼繼承
- JavaScript擷取字串方式總結JavaScript字串
- MySQL查詢結果匯出方式總結MySql
- Android熱修復簡單總結Android
- 工程熱力學複習總結
- android 跨程式點選方式總結Android
- React | ref三種使用方式總結React
- 更熱、更久、更頻繁的海洋熱浪正在上升
- Javascript 常見的迴圈方式總結JavaScript
- 程式通訊方式總結與盤點
- 滲透測試——提權方式總結
- 淺析skynet底層框架下篇框架
- vue許可權路由實現方式總結Vue路由
- Spring Boot 整合 Shiro ,兩種方式全總結!Spring Boot
- SpringBoot獲取HttpServletRequest的3種方式總結Spring BootHTTPServlet
- Windows&Linux檔案傳輸方式總結WindowsLinux
- 日誌管理系統,多種方式總結
- vue許可權路由實現方式總結二Vue路由
- 總結非同步程式設計的六種方式非同步程式設計
- JS 總結之原型繼承的幾種方式JS原型繼承
- skynet.newservice簡介:服務的啟動
- 2020 儲存技術熱點與趨勢總結
- 當程式碼變更遇上精準測試的總結
- Python種匯入模組的三種方式總結Python
- 一對一方式的年終總結
- httprunner(9)執行測試用例的方式總結HTTP
- Android熱更新實現方式Android
- 分發平臺如何支援熱更
- Spring Boot下Profile的四種切換方式思路總結Spring Boot
- 最全總結!聊聊 Python 傳送郵件的幾種方式Python
- 總結java中建立並寫檔案的5種方式Java
- 主表子表動態欄位儲存實現方式總結
- 陣列的三種宣告方式總結、多維陣列的遍歷、Arrays類的常用方法總結陣列
- Unity 熱更--AssetBundle學習筆記 0.7Unity筆記
- Unity 熱更--AssetBundle學習筆記 0.8Unity筆記
- Java獲取多執行緒執行結果方式的歸納與總結Java執行緒