亿图图示及Erlang----应用程序服务器
发布日期:2021-06-29 17:24:14
浏览次数:2
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年05月02日 01时19分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
cvGetSubRect与cvMul用法
2019-04-29
opencv图像处理梯度边缘和角点
2019-04-29
Caffe源码中blob文件分析
2019-04-29
OpenCV 图像采样 插值 几何变换
2019-04-29
图像处理-仿射变换 AffineTransform
2019-04-29
图像二值化----otsu(最大类间方差法、大津算法)
2019-04-29
图像二值化----otsu(最大类间方差法、大津算法)(二)
2019-04-29
OpenCV编程案例:使用轮廓函数检测连通区域
2019-04-29
opencv使用cvFindContours提取联通域
2019-04-29
C++中MessageBox的常见用法
2019-04-29
ordfilt2函数功能说明
2019-04-29
在图像变换中用最小二乘法求解仿射变换参数
2019-04-29
软件包应用分享|基于RT-Thread的百度语音识别(一)
2019-04-29
12月8日 RCEA - RT-Thread能力认证考试考前通知
2019-04-29
论坛热贴 | RT-Thread音频驱动开发(一)
2019-04-29
基于 Keil MDK 移植 RT-Thread Nano
2019-04-29
【报名截至今晚】12月14日深圳嵌入式与音频开发专题会议预告
2019-04-29
移植 RT-Thread Nano 到 RISC-V
2019-04-29
软件包应用分享|基于RT-Thread的百度语音识别(二)
2019-04-29
在 RT-Thread Nano 上添加控制台与 FinSH
2019-04-29