erlang杂记四---otp

OTP设计原理强调监督树和行为模式,如gen_server、gen_fsm和gen_event,用于实现进程和模块的结构化。gen_server提供了一种框架,使业务代码与功能解耦,简化了功能的实现和维护。gen_fsm则通过状态管理进一步抽象业务逻辑。supervisor则定义了不同类型的重启策略,如one_for_one、one_for_all和rest_for_one,以应对进程故障。

一.why otp

otp设计原理是用来使进程、模块和目录中的erlang代码结构化的一系列原理。其最基本的思想就是监督树,然后是行为模式,应用和版本发布。

二.gen_server

gen_server是行为模式,上一篇将了服务器的演化,其实就是gen_server的基础,也就是一个大的运行框架。借由这个框架,我们把业务和功能更好的划分开,使功能代码与业务彻底解耦,业务更新不会设计功能的修改,功能的修改也不会导致业务重写。

gen_server的使用很简单,因为gen_server已经具备了基本的功能代码,只要自己把几个必备的业务接口填充上,就可以启动gen_server了。

start_link() ->
	gen_server:start_link({local, ch3}, ch3, [], []) => {ok, Pid}

start_link会生成并连接到一个新gen_server进程。第一个参数指明了gen_server需要用什么名字注册到什么地方。第二个参数是回调模块名字,这个名字一般与注册名用同一个,第三个参数是传给init方法的参数列表,第四个参数是gen_server的参数列表。

init(_Args) ->
{ok, channels()}.

初始化方法,start_link会等待init完成。

handle_call(alloc, _From, Chs) ->
{Ch, Chs2} = alloc(Chs),
{reply, Ch, Chs2}.

handle_call同步请求回调。

handle_cast({free, Ch}, Chs) ->
Chs2 = free(Ch, Chs),
{noreply, Chs2}.

handle_cast异步请求回调。

terminate(shutdown, State) ->
..code for cleaning up here..
ok.

退出清理

handle_info({'EXIT', Pid, Reason}, State) ->
..code to handle exits here..
{noreply, State1}.

带外消息处理

三.gen_fsm:个人觉得把状态理清,然后把{next_state,,,}这个填好就可以了

四.gen_event

五.supervisor

one_for_one:进程有问题时,重启该进程

one_for_all:一个进程有问题,全部进程重启

rest_for_one:Then the terminated child process and the rest of the child processes are restarted.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值