lua面接問題:ホット更新の概要、原理と例

1032 ワード

1、ホットアップデートとは?
ホットアップデートはダウンタイム更新とも呼ばれ、ゲームサーバの稼働中にゲームを更新します.ダウンタイムなしでバグを修正したり、ゲームデータを修正したりする操作を実現します.1台の車が時速150 kmで走っていて、突然パンクしたので、運転手は私が駐車しないと言って、タイヤを交換して、気をつけてください.うん
2、熱更新原理
1つ目:
luaのrequireは、同じモジュールを複数回ロードすることを阻止します.システムを更新する必要がある場合は、応答のモジュールをアンインストールします.(package.loadedの対応するモジュール名をnilに設定し、次回のrequireの再ロードを保証します)グローバルテーブルの対応するモジュールテーブルをnilに設定します.同時にデータを専用のグローバルテーブルの下に記録し、localで参照します.これらのデータを初期化するときは、まず初期化されたかどうかを確認する必要があります.これにより、データが更新プロセスによってリセットされないことを保証します. 
コードの例:
function reloadUp(module_name)
    package.loaded[modulename] = nil
    require(modulename)
end
このやり方は簡単で乱暴で、ホット更新はできますが、
問題は多く,古い参照モジュールは更新されず,この程度の熱更新は明らかに現在のゲーム開発のニーズを満たすことができない.
2つ目:
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