gen_server的回调结构(上)

启用服务器

        gen_server:start_link(Name, Mod, InitArgs, Opts)这个调用是所有事物的起点。它 会创建一个名为Name的通用服务器,回调模块是Mod,Opts则控制通用服务器的行为。在这里可 以指定消息记录、函数调试和其他行为。通用服务器通过调用Mod:init(InitArgs)启动。

init([]) ->
    {ok, #state{}}

        如果返回{ok, State},就说明我们成功启动了服务器,它的初始状态是State。

调用服务器

        要调用服务器,客户端程序需要执行gen_server:call(Name, Request)。它最终调用的是回调模块里的handle_call/3。

handle_call(_Request, _From, State) ->
    Reply = ok,
    {reply, Reply, State}

        Request(gen_server:call/2的第二个参数)作为handle_call/3的第一个参数重新出现。 From是发送请求的客户端进程的PID,State则是客户端的当前状态。 我们通常会返回{reply, Reply, NewState}。在这种情况下,Reply会返回客户端,成为 gen_server:call的返回值。NewState则是服务器接下来的状态。 其他的返回值({noreply, ..}和{stop, ..})相对不太常用。no reply会让服务器继续 工作,但客户端会等待一个回复,所以服务器必须把回复的任务委派给其他进程。用适当的参数调用stop会停止服务器。

调用和播发

        我们已经见过了gen_server:call和handle_call之间的交互,它的作用是实现远程过程 调用。gen_server:cast(Name, Msg)则实现了一个播发(cast),也就是没有返回值的调用(实 际上就是一个消息,但习惯上称它为播发来与远程过程调用相区分)。 对应的回调方法是handle_cast,它的模板项如下:

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值