應用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,構建高可行性的項目是方便簡單的。