亿图图示及Erlang----应用程序服务器
发布日期:2021-06-29 17:24:14 浏览次数:3 分类:技术文章

本文共 2280 字,大约阅读时间需要 7 分钟。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

质数服务器—请注意前一节的警报处理函数。

-module(prime_server).
-behaviour(gen_server).
-export([new_prime/1,start_link/0]).
-export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2,code_change/3]).
start_link()->
gen_server:start_link({local,?MODULE},?MODULE,[],[]).
new_prime(N)->
gen_server:call(?MODULE,{prime,N},20000).
init([])->
process_flag(trap_exit,true),
io:format("~p starting ~n",[?MODULE]),
{ok,0}.
handle_call({prime,K},_From,N)->
{reply,make_new_prime(K),N+1}.
handle_cast(_Msg,N)->{noreply,N}.
handle_info(_Info,N)->{noreply,N}.
terminate(_Reason,_N)->
io:format("~p stopping ~n",[?MODULE]),
ok.
code_change(_OldVsn,N,Extra)->{ok,N}.
make_new_prime(K)->
if
K>100->
alarm_handler:set_alarm(tooHot),
N=lib_primes:make_prime(K),
alarm_handler:clear_alarm(tooHot),
N;
true->
lib_primes:make_prime(K)
end.
在这里插入图片描述
面积服务器,它也使用gen_server行为编写,用这种方式编写服务器极快,我在编写这个示例时重用了质数服务器中的代码,然后把它转变成面积服务器,为了让服务器崩溃后被监控器重启,此外,我们还会在日志里获得关于这一切的报告。
-module(area_server).
-behaviour(gen_server).
-export([area/1,start_link/0]).
-export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2,code_change/3]).
start_link()->
gen_server:start_link({local,?MODULE},?MODULE,[],[]).
area(Thing)->
gen_server:call(?MODULE,{area,Thing}).
init([])->
process_flag(trap_exit,true),
io:format("~p starting~n",[?MODULE]),
{ok,0}.
handle_call({area,Thing},_From,N)->{reply,compute_area(Thing),N+1}.
handle_cast(_Msg,N)->{noreply,N}.
handle_info(_Info,N)->{noreply,N}.
terminate(_Reason,_N)->
io:format("~p stopping ~n",[?MODULE]),
ok.
code_change(_OldVsn,N,_Extra)->{ok,N}.
compute_area({square,X})->XX;
compute_area({rectangle,X,Y})->X
Y.
在这里插入图片描述

-module(sellaprime_supervisor).

-behaviour(supervisor).
-export([start/0,start_in_shell_for_testing/0,start_link/1,init/1]).
start()->
spawn(fun()->
supervisor:start_link({local,?MODULE},?MODULE,_Arg=[])
end).
start_in_shell_for_testing()->
{ok,Pid}=supervisor:start_link({local,?MODULE},?MODULE,_Arg=[]),
unlink(Pid).
start_link(Args)->
supervisor:start_link({local,?MODULE},?MODULE,Args).
init([])->
gen_event:swap_handler(alarm_handler,
{alarm_handler,swap},
{my_alarm_handler,xyz}),
{ok,{
{one_for_one,3,10},
[{tag1,
{area_server,start_link,[]},
permanent,
10000,
worker,
[area_seaver]},
{tag2,
{prime_server,start_link,[]},
permanent,
10000,
worker,
[prime_server]}
]}}.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

转载地址:https://blog.csdn.net/m0_38127487/article/details/113765959 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:美国男子睡梦中误吞下自己的苹果 AirPod:卡在食道里
下一篇:红楼梦第一回ruby可视化

发表评论

最新留言

不错!
[***.144.177.141]2024年04月20日 19时21分52秒