接着上一篇继续研究

上一篇结尾的时候,我们谈到了连接,监听两个监督树,今天我们就来看看这两个监督树和他们的工作者都是干什么的,怎么实现的。文件编号接上篇。

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}}.
View Code

相关文章:

  • 2021-04-16
  • 2022-12-23
  • 2021-09-29
  • 2021-08-20
  • 2021-12-21
  • 2021-11-24
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-27
  • 2021-07-29
  • 2022-12-23
相关资源
相似解决方案