Erlang的热更新

Erlang

热更步骤
1.创建热更模块接口
2.替换编译文件.beam
3.执行热更

主要实现方法是使用code代码服务函数
code:purge(Mod),
清除模块的代码,清除并标记为旧版本代码
code:load_file(Mod).
加载一个模块

由于模块加载之后存在虚拟机 可直接替换bin文件夹中的Mod.beam文件 执行跟新
当旧的Mod:A-old()执行结束 会切到Mod:A-new() 所以不用担心冲突

接口

运维后台通过TCP请求热更和参数

由于使用TCP/IP 后台传参(即热更模块名称已转为二进制,需进行转换为原子,且后台执行热更需要返回结果 如果热更文件过多 直接调用fun()可能后台需要等待很长时间 所以需要用到Spawn)

实现

//入口
Ref2 = lib_gm_command:process_binary(Socket, Binary),
      lib_send:send_one(Socket, Ref2);
//处理二进制获取参数(根绝自己和后台的规则处理 此处忽略)
spawn(lib_update,update_file,[Filename]),//Filename热更文件list
<<>>; //即Ref2
//热更操作
UpdateFileList = lists:map(fun(E)->
      binary_to_atom(E,latin1)
      end,re:split(FileList,"\\,")),//二进制转原子 分割
      load(UpdateFileList);//执行热更
      
//递归循环
load([]) -> ok;
load([FileName | T]) ->
    code:purge(FileName ),
    code:load_file(FileName ).
    info("loaded: ~w", [FileName]),
    load(T).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值