• 例子

    例子

    概述中,已经有一个用普通Erlang方式写的简单服务器。这个服务器可以用 gen_server 进行重写,结果产生这个回调模块:

    1. -module(ch3).
    2. -behaviour(gen_server).
    3.  
    4. -export([start_link/0]).
    5. -export([alloc/0, free/1]).
    6. -export([init/1, handle_call/3, handle_cast/2]).
    7.  
    8. start_link() ->
    9. gen_server:start_link({local, ch3}, ch3, [], []).
    10.  
    11. alloc() ->
    12. gen_server:call(ch3, alloc).
    13.  
    14. free(Ch) ->
    15. gen_server:cast(ch3, {free, Ch}).
    16.  
    17. init(_Args) ->
    18. {ok, channels()}.
    19.  
    20. handle_call(alloc, _From, Chs) ->
    21. {Ch, Chs2} = alloc(Chs),
    22. {reply, Ch, Chs2}.
    23.  
    24. handle_cast({free, Ch}, Chs) ->
    25. Chs2 = free(Ch, Chs),
    26. {noreply, Chs2}.

    在下一节中会解释这段代码。