erlang OTP 通用服务器行为模式理解

OTP的行为模式对于初学者理解起来的确是有一定难度的,现根据个人理解总结如下:

1.基本工作方法

由用户定义相关功能函数,但这个功能函数并不是直接实现相关功能,而是直接调用gen_server模块中的指定功能所需要的对应函数。而用户调用gen_server模块中的对应函数会间接调用由用户定义的具体实现(要求这个具体实现必须按要求返回数据)。从而完成相关功能。读起来是不是很绕人啊。

举个例子:在通用服务行为模式中有个同步消息发送和等待应答的功能的实现方法,代码实现框架如下:

message_req() ->
    gen_server:call(?SERVER,message).

handle_call(message,_From,State) ->
    .......,
    {reply,Data,Nstate[,Time]}

用户定义的函数message_req中,并没有实现请求数据的处理,而是通过调用gen_server中的call函数,发送一个简单的消息message。在gen_server:call/2中会以某种间接的方式调用handle_call/2来实现相关的处理,并收到其处理后的回应,最后会把handle_call/2中回应的Data放入一个形如{ok,Data}元组中作为message_req/0调用gen_server:call/2的返回结果。

注:其中这种调用模式是固定的,而handle_call/2返回值的模式也是固定的,gen_server:call/2返回值的模式也是固定的。

要运用gen_server行为模式就必须知道这个工作模式,即知道API接口函数gen_server:call/2和回调函数handle_call/2的对应关系。

调用与返回关系图如下:

2.基本API与回调接口

start_link()    gen_server:start_link

功能调用起点gen_server调用接口回调接口
服务启动start_link()gen_server:start_link/4init/1
同步消息自定义名称(目标服务器,消息类型)gen_server:call(目标服务器,消息类型)handle_call(消息类型,_From,State)
返回模式:{reply,Data,Nstat[,Time]}
异步消息自定义名称(目标服务器,消息类型)gen_server:cast(目标服务器,消息类型)handle_cast(消息类型,State)
无返回
带外消息handle_info(消息类型,_From,Data)
返回模式:{reply,Data,Nstat[,Time]}
退出服务  terminate(_Reason, _State)
代码更新  code_change(_OldVsn, State, _Extra)
看不明白的或具体参数可参考相关资料。

本文参考:

1.Erlang OTP并发编程实战

2.http://blog.csdn.net/zhangzhizhen1988/article/details/7932449#0-qzone-1-71757-d020d2d2a4e8d1a374a433f596ad1440

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值