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".
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".