erlang学习:使一个gen_server挂掉之后通知另一个gen_server也挂掉

今日学习通过调用gen_server1中的handle_call使gen_server1挂掉从而让gen_server2程序也挂掉

gen_server1模块

-module(gen_server1).
-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,start/0,send_msg/0]).

start_link() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init([]) ->
  {ok, []}.

handle_call(stop, _From, Tab) ->
  io:format("gen_server1 receive stop~n"),
  gen_server:cast(gen_server2,msg),  %%给gen_server2发送相应消息
  {stop, normal, stopped, Tab}.

handle_cast(_Msg, State) ->
  {noreply, State}.

handle_info(_info, State) ->
  {noreply, State}.

terminate(_Reason, _State) ->
  ok.

send_msg() ->
  gen_server:call(?MODULE, stop).
start() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

gen_server2模块

-module(gen_server2).

-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,start/0]).
start_link() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).

init([]) ->
  erlang:send_after(10000, self(), timeout),
  {ok, []}.

handle_call(_Msg, _From, State) ->
  {noreply, State}.

handle_cast(msg, State) ->
%%对相应的gen_server1中的消息进行接收并相应挂掉
  io:format("gen_server2 receive msg~n"),
  exit(normal),
  {noreply, State}.

handle_info(_Info, State) ->
  {noreply, State}.

terminate(_Reason, _State) ->
  ok.

start() ->
  gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值