使用OTP的gen_server步驟
(1) 決定你的callback module名稱
例如我們叫他my_bank
(2) 決定你的callback module的給client介面
例如這個銀行的module可能有以下幾個functions:
這些interface會利用OTP gen_server裡面的function來implement:
可以看到start() function使用到了gen_server:start_link(),這是gen_server開啟一個server的方法,這邊開啟了一個local server,如果傳入global atom的話,就變成某個cluster都可以access的global server。
?MODULE是一個macro,會把目前的module name替換出來。
而gen_server:call()就是我們之前implement的rpc這種remote procedure call。
(3) implement callbacks
這邊就一定要符合OTP gen_server需要的 callback介面,否則應該會有runtime exception,包括以下六個 :
init/1
handle_call/3
handle_cast/2
handle_info/2
terminate/2
code_change/3
記得要 export出去這六個 callback functions,否則gen_server module會無法呼叫它們。
某些editor(例如emacs)可能會提供skeleton template,例如這樣:
這邊有一個新的東西 -behavior(),意思是要跟compiler講幫我們檢查是否implement了所有gen_server要得callbacks,相當於java "implements" keyword。
這些callback中,最重要的是handle_call,而第一個參數實際上又有三種patterns:
以下是這個my_bank,erl的所有gen_server callback:
沒有留言:
張貼留言