メモ5-gen_server

1257 ワード

先着コード
-module(module_name).
-behaviour(gen_server).

-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

-record(state, {}).

init([]) ->
    {ok, #state{}}.

handle_call(Request, From, State) -> %% Request , , 
    Reply = ok,
    {reply, Reply, State}.

handle_cast(Msg, State) ->
    {noreply, State}.

handle_info(Info, State) ->
    {noreply, State}.

terminate(Reason, State) ->
    ok.

code_change(OldVsn, State, Extra) ->
    {ok, State}.

実装gen_サーバモードは、[init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2,code_change/3]の6つのインタフェースを実現する必要がある.
init/1:start_link呼び出し後、この関数を自分でコールバックします.handle_call/3:gen_server:call(Name,Request)ドライバの最初のパラメータは?MODULEはPidであってもよく、2番目のパラメータはメタグループがhandle_であるcallの最初のパラメータhandle_cast/2:gen_server:castドライバとhandle_コールと同じだhandle_info/2:このシステムの内部のメッセージは駆動して、あるいはメッセージは来て、例えばsend!.具体的にどのような方法があるのか,深く研究しなければならない.terminate/2:プロセスが終了すると駆動する.code_change/3:コードの熱更新時に駆動する.
handle_call/3とhandle_cast/2には何か違いがありますか.2つは同じで、1つ目は戻り値があるようです.2つ目は私たちが必要とする戻り値がありません.
 
自分でこの方法で自分のモジュールをカプセル化することができるかどうか、他の場所で呼び出すのに便利で、考察して、先に覚えておきます.
-module(module_name).

%% -type ...
%% -callback .....  ,