20140318 erlang学习记录

本文介绍Erlang中实现模块热更新的方法,包括使用gen_server模式及定时器监控模块变更,实现不停机更新代码。此外,还介绍了如何通过Erlang NIF调用C语言函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20140318  了解reload模块
         1:reading reload.erl  what is gen_server  分为跟的会gen_server  的回调函数 reload 模块的作用是把某个模块更新的时候重新
             生成 newmodule.beam 来替换旧的 oldmodule.beam,加载到erlang的 运行系统去。实现不用重启系统就可以实现修改某个模块的功能。
             应该是erlang说热更新吧,就是不让系统停下来,可以实现代码更新。
         2: reload模块实现gen_server 通用服务器这种模式 ,在启动服务器的时候,通过定时器实现监控 logic_server/src 某个模块给修改,
               通过时间的对比,来热更新代码。
         3:实现的过程:gen_server:start_link 创建进程 -》同时 init 启动了定时器erlang:send_after(?TIMER, self(), doit),和创建了记录
                       -》handle_info 来接收定时器的消息 来写函数实现热更新,然后再启动定时器,就不会不断监控代码的更新,手都懒得动了呵呵。
         4:如何找到修改的模块 --》file:read_file_info(Filename)来获取所来的模块,再用保卫式来  
          {ok, #file_info{mtime = Mtime}} when Mtime > From andalso Mtime =< To 判断最近修改的文件,提取最近一个模块有改动,这里就找到
            了某一个模块的修改  ---》最后通过 reload(Module)函数来实现 主要是这个几个函数 code:purge(Module),code:load_file(Module)
        
       了解 erlang nif 来实现与c语言的调用
           1:c语言:
              /* niftest.c */
#include "erl_nif.h"
static ERL_NIF_TERM hello(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
   return enif_make_string(env, "Hello world!", ERL_NIF_LATIN1);
}
static ErlNifFunc nif_funcs[] =
{
   {"hello", 0, hello}
                    //hello 为c语言的函数,“hello”为erlang的函数,0表示erlang的hello函数接收的参数为空
};
ERL_NIF_INIT(niftest,nif_funcs,NULL,NULL,NULL,NULL)
           
             erlang语言
                -module(niftest).
 -export([init/0, hello/0]).
init() ->
   erlang:load_nif("./niftest", 0).
hello() ->
   "NIF library not loaded".
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值