gen_server的回调结构下

本文介绍了Erlang中GenServer的行为,特别是handle_info函数处理非请求消息的方式,以及服务器终止时的状态管理和code_change函数用于动态更新状态的应用场景。

发给服务器的自发性消息

        回调函数handle_info(Info, State)被用来处理发给服务器的自发性消息。自发性消息是 一切未经显式调用gen_server:call或gen_server:cast而到达服务器的消息。举个例子,如 果服务器连接到另一个进程并捕捉退出信号,就可能会突然收到一个预料之外的{'EXIT', Pid, What}消息。除此之外,系统里任何知道通用服务器PID的进程都可以向它发送消息。这样的消息在服务器里表现为info值。

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

后会有期,宝贝

        服务器会因为许多原因而终止。某个以handle_开头的函数也许会返回一个{stop, Reason, NewState},服务器也可能崩溃并生成{'EXIT', reason}。在所有这些情况下,无论它们是怎样发生的,都会调用terminate(Reason, NewState)。

terminate(Reason, State) -> 
    ok.
    

        这段代码不能返回一个新状态,因为我们已经终止了。但是了解服务器在终止时的状态非常有用。可以把状态保存到磁盘,把它放入消息发送给别的进程,或者根据应用程序的意愿丢弃它。如果想让服务器过后重启,就必须编写一个“我胡汉三又回来了”的函数,由terminate/2 触发。

代码更改 

        你可以在服务器运行时动态更改它的状态。这个回调函数会在系统执行软件升级时由版本处 理子系统调用。

code_change(_OldVsn, State, Extra) ->
    {ok, State}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值