1、什么是热更新?
热更新也叫不停机更新,是在游戏服务器运行期间对游戏进行更新。实现不停机修正bug、修改游戏数据等操作。也可以这样讲:一辆车以时速150km跑着,突然爆胎了,然后司机告诉你,我不停车,你去把轮胎换了,小心点。恩
2、热更新原理
第一种:
lua中的require会阻止多次加载相同的模块。所以当需要更新系统的时候,要卸载掉响应的模块。(把package.loaded里对应模块名下设置为nil,以保证下次require重新加载)并把全局表中的对应的模块表置 nil 。同时把数据记录在专用的全局表下,并用 local 去引用它。初始化这些数据的时候,首先应该检查他们是否被初始化过了。这样来保证数据不被更新过程重置。
代码示例:
- function reloadUp(module_name)
- package.loaded[modulename] = nil
- require(modulename)
- end
第二种:
- function reloadUp(module_name)
- local old_module = _G[module_name]
- package.loaded[module_name] = nil
- require (module_name)
- local new_module = _G[module_name]
- for k, v in pairs(new_module) do
- old_module[k] = v
- end
- package.loaded[module_name] = old_module
- end