应用erlang的behaviour 框架(gen_server,gen_fsm,gen_event,supervisor)在处理很多情况的时候省下大量不必要的代码,使用的时候在框架基础添加自定义逻辑就可以搭建项目了,可以说是精髓。
gen_server:提供的是client和server之间,请求和回调的处理。
Client --请求-->Server Server --回应-->Client
具体描述:erlang behaviour小结之gen_server
gen_fsm:提供的是event状态转换和action触发处理。
{State1*Event } ----> {Action,State2}
StateName(Event,StateData) ->
%%action here,
{next_state,StateName',StateData'}.
gen_event:提供的是event manager对event的处理。自定义event manager收到event,进行自定义处理。
event_manager(Event) ->
%%deal with the Event.
{ok}.
这里要说说gen_event和gen_fsm的一点区别:
gen_fsm带有外部状态(自定义状态)的转换,一个状态由于某事件发生,导致状态发生变化,触发action的同时进入下一个状态,可以是个循环。
类似水和冰的转换:水的状态为液态,此时遭遇了“冷却”事件,水变成冰,液态转换成固态;这时,固态的冰遭遇了“受热”事件,回头转换成液态水。
gen_event对事件进行处理,可以理解为单向的。event给过来,event manager处理掉,就这样。
supervisor:提供的是对子进程的启动、停止、监控操作。可以说是一个异常处理框架,但又类似切面,可以干涉到项目的每个进程(启动或停止任一子进程)。如果子进程需要重启,supervisor会根据重启策略和最大重启频率这些参数确定如何重启子进程。
有了这几个behaviour,没太大必要再去封装发布类似功能的组件。
基于erlang behavoiur,构建高可行性的项目是方便简单的。