同步调用——Call

同步请求 alloc() 是使用 gen_server:call/2 实现的:

  1. alloc() ->
  2. gen_server:call(ch3, alloc).

ch3 是gen_server的名字,必须和启动时的名字一样。 alloc 是实际的请求。

请求以消息的形式发送给这个gen_server。当收到了请求之后,gen_server调用 handle_call(Request,From,State) ,它应返回一个元组 {reply,Reply,State1}Reply是需要回馈给客户端的答复,同时 State1 是gen_server的状态的新值。

  1. handle_call(alloc, _From, Chs) ->
  2. {Ch, Chs2} = alloc(Chs),
  3. {reply, Ch, Chs2}.

在这里,应答是分配了的频道 Ch 然后gen_server将等待新的请求,并且现在保持了一个最新的可用频道的列表。