1. 程式人生 > >lua 熱更新

lua 熱更新

熱更新主要用於不停機修復bug等。故其重點是更新邏輯程式碼。
切記模組設計時,分為資料和邏輯。
1、所有指令碼檔案,除了入口的檔案外,其他都寫成module形式;
2、模組中不要有檔案內的local變數,目前未知此種變數存到哪裡了,local修飾的函式無所謂;
3、所有的資料部分直接存到_G.game_instance.xxx中,然後直接重新load初始化入口檔案,並解除安裝所有的指令碼檔案,就會觸發重新載入;


例子:
此例中,當執行main.lua後,會暫停,此時修改a.lua中的funca函式中的print("a33")為print("a"),改完後儲存,然後在main.lua的控制檯中按任意鍵,發現輸出值已經為剛才變更的值了,如此,成功。

核心函式為main.lua中的:reloadmodule函式

模組a

a.lua

module(...,package.seeall)

function funca()
print("a33")
end



模組b
b.lua

module(...,package.seeall)

local atb=require"a"

function funcb()
atb.funca()
end


主程式
main.lua

local tbb =require"b"
local atbb=require"a"

localfunction reloadmodule(modulename)
local oldmodule = _G[modulename]
for k, vin pairs(oldmodule)do
oldmodule[k]=nil
end

_G[modulename]=nil
package.loaded[modulename]=nil
require(modulename)
local newmodule = _G[modulename]
for k, vin pairs(newmodule)do
oldmodule[k]= v
end
oldmodule._M= oldmodule

_G[modulename]= oldmodule
package.loaded[modulename]= oldmodule

oldmodule=nil
newmodule=nil
end


collectgarbage("collect")
print(collectgarbage("count")*1024)
tbb.funcb()
print("a tb: ", atbb)

os.execute("pause")

reloadmodule("a")

tbb.funcb()
print("a tb: ", atbb)
collectgarbage("collect")
print(collectgarbage("count")*1024)



相關推薦

iOS 中 lua 更新 'system' is unavailable: not available on iOS

iOS熱更新-8種實現方式 一、JSPatch 熱更新時,從伺服器拉去js指令碼。理論上可以修改和新建所有的模組,但是不建議這樣做。 建議 用來做緊急的小需求和 修復嚴重的線上bug。 二、lua指令碼 比如: wax。熱更新時,從伺服器拉去lua指令碼。遊戲開發經常用到。

cocos2dx lua 更新

原理:         每次登陸游戲利用cocos的assetManager從伺服器拉去當前最新的兩個檔案。 一個是version.mainifest,一個project.mainifest. 這兩個檔案都是xml的描述檔案。一個包含了版本資訊,第二個包含

lua 更新

熱更新主要用於不停機修復bug等。故其重點是更新邏輯程式碼。切記模組設計時,分為資料和邏輯。 1、所有指令碼檔案,除了入口的檔案外,其他都寫成module形式; 2、模組中不要有檔案內的local變數,目前未知此種變數存到哪裡了,local修飾的函式無所謂; 3、所有的資料

使用LUA 更新模組

最近準備在手機專案客戶端中使用lua, 以前一直在伺服器使用luabind. 另外, tolua++也體驗過, LuaPlus也在早年用過. 以下是本人對這些繫結庫的個人感覺: luabind 利用boost機制把繫結做到極致, 比較適合主c++, 弱lua的指令碼框

cocos2d-x lua更新問題,過載reload

1、什麼是熱更新? 熱更新也叫不停機更新,是在遊戲伺服器執行期間對遊戲進行更新。實現不停機修正bug、修改遊戲資料等操作。也可以這樣講:一輛車以時速150km跑著,突然爆胎了,然後司機告訴你,我不停車,你去把輪胎換了,小心點。恩 2、熱更新原理 第一種: lua中

lua 更新原理(二)

在講lua熱更新原理第二部分之前,先介紹一下lua除錯相關的函式。除錯函式能夠幫助我們在開發中獲取函式堆疊相關上下文資訊,甚至改變函式的變數。getinfo ([thread,] f [, what]):返回關於一個函式資訊的表。 你可以直接提供該函式, 也可以用一個數字 f

Lua更新問題

Lua熱更新後無法載入json檔案 公司最近遊戲進行大幅更改,需要熱更新功能。測試熱更新時發現一個很嚴重的問題。ios熱更完成後無法開啟新增的頁面,開啟就崩潰。作為一個cocos菜鳥開始了摸索之路,期間遇到了各種挫折,求助大神才搞定。 首先崩潰的時候,跟io

更新-----為何使用lua進行

  事實上我們在安卓端是可以使用c#jit的,但是我們在ios上的程式碼是AOT(預先編譯,靜態編譯)的,不能用c# jit(實時編譯,即時編譯)。   ios不能用c#熱更是因為啟動了CPU的No eXecute bit,簡單說就是ios不允許更改程式碼,更新程式碼必須重新提安裝包進行稽核,AppStor

013-更新lua語言六

學習到現在我們對lua也是具有很深的瞭解,知道lua是熱更新的重要語言,所以我們要繼續學習lua。今天我們學習的是lua檔案 Lua檔案 I/O 其實這個都是我們是很熟悉的,它的內容也沒有多少。記得我們在考江蘇二級的時候,最後一題總是會考這個,其中最有名的是printf與fprintf了。只要知道一個是往

ToLua更新之LuaFramework框架之編寫Lua邏輯(3)

1、Lua的Update方法 第一篇“程式碼熱更新”演示了用lua列印HelloWorld的方法,第二篇“資源熱更新”演示了載入坦克模型的方法。這一篇要把兩者結合起來,用lua實現“用鍵盤控制坦克移動”的功能。用Lua和用c#編寫的Unity3D程式大同小異,只需正確使用A

騰訊開源手遊更新方案Xlua嚐鮮(三)——C#訪問Lua

C#訪問Lua 這裡指的是C#主動發起對Lua資料結構的訪問。 一、獲取一個全域性基本資料型別 訪問LuaEnv.Global就可以了,上面有個模版Get方法,可指定返回的型別。 luaenv.Global.Get<int>("a"); luaenv.Globa

Cocos2d-x 3.2版本以上LUA指令碼更新(動態更新)解決方案

 部落格地址:http://blog.csdn.net/qq446569365 能夠進行熱更新,是Lua指令碼的最大優勢,通過熱更新能夠解決諸多問題。例如App Store的稽核,不用每次都提交版本,等待稽核了,直接通過熱更新更新遊戲邏輯和素材即可。只有在進行大版本更

skynet 更新 lua 程式碼

IE下實現placeholder效果,支援文字框和密碼框 Apache模組 合併多個js/css 提高網頁載入速度 JavaScript跨域外掛 實現iframe的雙向跨域 改進erlang版本的protobuf,有一定效率提升 Lua非同步HTTPS請求庫,支援同時併發請

lua遊戲伺服器更新

Lua熱更新實現 用途 在生產環境上,總有可能出現不可預知的Bug,而通常修改好Bug僅僅又修改幾句,停機維護的成本又太高,對於遊戲來說,通常每個服就是單獨的程序,也做不到像分散式環境下,關掉一部分機器,先升級一部分,再升級另一部分的無縫升級。這時候如果有熱更就可以迅

lua檔案更新無效和資源更新無效的問題

好久沒來了,本來寫部落格是為了記錄自己遇到的問題或者轉發一些好的文章的 但前一陣子太忙 一時都忘了上來記錄問題 直到前一陣子遇到熱更問題才想起來要記錄一下 1.遊戲之前沒加密 後來加密了 隔了2 3

更新中的lua與c#

熱更新使用lua指令碼與C#指令碼進行互相呼叫,所以首先要了解這兩種不同語言之間是如何進行呼叫的。 暫時版:http://pan.baidu.com/s/1eSzcSWM 重中之重,-------&g

騰訊開源手遊更新方案Xlua嚐鮮(四)——Lua呼叫C#

new C#物件 你在C#這樣new一個物件: var newGameObj = new UnityEngine.GameObject(); 對應到Lua是這樣: local newGameObj =CS.UnityEngine.GameObject() 基本類似,除了:

從零開始更新:第一篇lua環境及開發工具配置

最近由於專案需求,不得不開始研究熱更新,在網上尋求許久,發現一門叫做Lua的小巧的指令碼語言,由於自生小巧且和c有極其良好的相容性,被廣泛應用於遊戲行業的熱更新技術中。 工欲善其事,必先利其器,要想開始學習有關lua的內容,必然需要一套完好的Lua開發環境 結合師兄們的幫助

[Unity更新]lua常用庫

參考: http://www.cnblogs.com/superchao8/archive/2011/06/20/2085023.html http://blog.csdn.net/goodai007/article/details/8076141 http://www.c

騰訊開源手遊更新方案,Unity3D下的Lua程式設計

xLua是Unity3D下Lua程式設計解決方案,自2016年初推廣以來,已經應用於十多款騰訊自研遊戲,因其良好效能、易用性、擴充套件性而廣受好評。現在 騰訊已經將xLua開源到GitHub。 2016年12月末,xLua剛剛實現新的突破:全平臺支援用Lua修復C#程式碼bug。 目前Unity下的Lua熱