制作一个名为 prime_tester_server 的gen_server,让它测试给定的数字是否是质数。把它添加到sellaprime_supervisor.erl的监控树里
修改监控树和app配置
尝试使用判断质数出错
7> prime_tester_server:prime(101).
** exception exit: {noproc,{gen_server,call,
[prime_tester_server,{is_prime,101},20000]}}
in function gen_server:call/3 (gen_server.erl, line 1126)
原因分析:sellaprime_supervisor修改没有重新编译
重新编译后启动应用程序
制作由10个质数测试服务器组成的进程池。制作一个队列服务器来把请求加入队列,直到其中一个质数测试服务器处于空闲状态为止。当质数测试服务器空闲时,向它发送一个请求来测试某个数字是否是质数
-module(prime_tester_supervisor).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init(_) ->
Re = {prime_tester_server, {prime_tester_server, start_link, []}, temporary, infinity, worker, [prime_tester_server]},
Pools = [Re || _ <- lists:seq(1, 10)],
{ok, {{one_for_one, 3, 10}, Pools}}.
在应用监控器下添加此监控器
init([]) ->
%% 安装错误处理器
gen_event:swap_handler(alarm_handler,
{alarm_handler, swap},
{my_alarm_handler, xyz}),
{ok, {{one_for_one, 3, 10},
[
{prime_tester_supervisor, {prime_tester_supervisor, start_link, []},permanent, infinity, supervisor, [prime_tester_supervisor]},
{tag1, {area_server, start_link, []}, permanent, 10000, worker, [area_server]},
{tag2, {prime_server, start_link, []}, permanent, 10000, worker, [prime_server]},
{tag3, {prime_tester_server, start_link, []}, permanent, 10000, worker, [prime_tester_server]}
]
}}.