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
相關文章
- Tinker熱修復整合總結
- Android 熱修復總結Android
- 散知識點總結(持更)
- JS中繼承方式總結JS中繼繼承
- JavaScript擷取字串方式總結JavaScript字串
- 豎直居中方式總結
- 主流動畫實現方式總結動畫
- 關於熱部署-理解與總結熱部署
- 工程熱力學複習總結
- MySQL查詢結果匯出方式總結MySql
- React | ref三種使用方式總結React
- MySQL 常用DDL執行方式總結MySql
- Android熱修復簡單總結Android
- 熱更新 + 命令列 打包 (階段總結)命令列
- ubuntu 14.04搭建wifi分享熱點總結UbuntuWiFi
- INNODB 熱備工具試驗與總結 薦
- 程式通訊方式總結與盤點
- android 跨程式點選方式總結Android
- 滲透測試——提權方式總結
- Javascript 常見的迴圈方式總結JavaScript
- Android螢幕截圖方式總結Android
- 80x86定址方式概括總結
- oracle兩種認證方式總結(ZT)Oracle
- 你期待已久的熱修復—Tinker熱修復整合總結
- vue許可權路由實現方式總結Vue路由
- 日誌管理系統,多種方式總結
- 垂直水平居中的方式總結 +(使用場景)
- HTML5 5大儲存方式總結HTML
- Django執行方式及處理流程總結Django
- Java集合和陣列的排序方式總結Java陣列排序
- UWP中新加的資料繫結方式x:Bind分析總結
- skynet原始碼分析(1)--模組載入原始碼
- 淺析skynet底層框架下篇框架
- iOS熱更新實現方式iOS
- 總結非同步程式設計的六種方式非同步程式設計
- JS 總結之原型繼承的幾種方式JS原型繼承
- vue許可權路由實現方式總結二Vue路由
- Windows&Linux檔案傳輸方式總結WindowsLinux