erlang学习:用OTP构建系统4,监控树学习

监控树学习

之前写的server程序,如果产生了错误,server会立刻停止。本次学习使用了监控树,能够让server崩溃时打印错误信息并重启服务器,能够使服务器正常使用

-module(sellaprime_supervisor).
-behaviour(supervisor).
-export([start/0, test/0, start_link/1, init/1]).

start() ->
  spawn(fun() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, _Arg = [])
        end).

test() ->
  {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,        %%Tag 这是一个原子类型的标签,将来可以用它指代工作进程。
      {area_server, start_link, []},  %%{Mod, Func, ArgList} 它定义了监控器用于启动工作器的函数,将被用作apply(Mod, Fun, ArgList)的参数。
      permanent,   %%permanent(永久)进程总是会被重启。transient(过渡)进程只有在以非正常退出值终止时才会被重启。temporary(临时)进程不会被重启
      10000,    %%工作器终止过程允许耗费的最长时间。如果超过这个时间,工作进程就会被杀掉。
      worker,    %%这是被监控进程的类型。可以用监控进程代替工作进程来构建一个由监控器组成的树
      [area_server]},  %%如果子进程是监控器或者gen_server行为的回调模块,就在这里指定回调模块名。
      %%第二个模块
      {tag2,
        {prime_server, start_link, []},
        permanent,
        10000,
        worker,
        [prime_server]}
    ]}}.

正常启动监控树运行截图

请添加图片描述

启动监控树后,就可以运行area_server与prime_server中的代码,如果产生错误则会进行提示并重启服务器

请添加图片描述

服务器自动重启之后能够继续运行代码
请添加图片描述
与没有监控树进行对比
没有监控树,如果server崩溃,进程就挂掉了
请添加图片描述
进程挂掉,无法运行

请添加图片描述

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值