接着上一篇继续研究
上一篇结尾的时候,我们谈到了连接,监听两个监督树,今天我们就来看看这两个监督树和他们的工作者都是干什么的,怎么实现的。文件编号接上篇。
6. ranch_acceptors_sup.erl
1 -module(ranch_acceptors_sup). 2 -behaviour(supervisor). 3 4 -export([start_link/4]). 5 -export([init/1]). 6 7 -spec start_link(ranch:ref(), non_neg_integer(), module(), any()) 8 -> {ok, pid()}. 9 start_link(Ref, NbAcceptors, Transport, TransOpts) -> 10 supervisor:start_link(?MODULE, [Ref, NbAcceptors, Transport, TransOpts]). 11 12 init([Ref, NbAcceptors, Transport, TransOpts]) -> 13 ConnsSup = ranch_server:get_connections_sup(Ref), 14 LSocket = case proplists:get_value(socket, TransOpts) of 15 undefined -> 16 {ok, Socket} = Transport:listen(TransOpts), 17 Socket; 18 Socket -> 19 Socket 20 end, 21 {ok, {_, Port}} = Transport:sockname(LSocket), 22 ranch_server:set_port(Ref, Port), 23 Procs = [ 24 {{acceptor, self(), N}, {ranch_acceptor, start_link, [ 25 LSocket, Transport, ConnsSup 26 ]}, permanent, brutal_kill, worker, []} 27 || N <- lists:seq(1, NbAcceptors)], 28 {ok, {{one_for_one, 10, 10}, Procs}}.