亿图图示及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})->XY.-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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月20日 19时21分52秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
面试心得与总结—BAT、网易、蘑菇街
2021-07-03
Java对象初始化顺序
2021-07-03
Java开发的几个注意点
2021-07-03
我的Java后端书架 (2016年暖冬4.0版)
2021-07-03
每个程序员都必读的10篇文章
2021-07-03
也谈IO模型
2021-07-03
谈谈互联网后端基础设施
2021-07-03
Mybatis的ResultMap的使用
2021-07-03
Java 异常处理的误区和经验总结
2021-07-03
Chrome控制台使用详解
2021-07-03
Chrome 控制台console的用法(学了之后对于调试js可是大大有用的哦)
2021-07-03
15 个必须知道的 Chrome 开发工具技巧
2021-07-03
推荐的四款产品原型设计工具
2021-07-03
Spring基础知识汇总 Java开发必看
2021-07-03
设计模式(一)工厂模式Factory(创建型)
2021-07-03