例子

概述中,已经有一个用普通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}.

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