diff options
author | juhlig <[email protected]> | 2019-04-30 16:13:07 +0200 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2019-05-06 10:08:58 +0200 |
commit | f07391b5eb8ef4f6c22d1666105db9856f5f1b66 (patch) | |
tree | d5e0ada912374cbbfed6d78072b7fd4160458e41 /src/ranch_acceptors_sup.erl | |
parent | 7cbc7fed32940a4aa7beedec9cac23376a19a8c0 (diff) | |
download | ranch-f07391b5eb8ef4f6c22d1666105db9856f5f1b66.tar.gz ranch-f07391b5eb8ef4f6c22d1666105db9856f5f1b66.tar.bz2 ranch-f07391b5eb8ef4f6c22d1666105db9856f5f1b66.zip |
Create one ranch_conns_sup per num_acceptor
This gets rid of a bottleneck that occurs when many connections
are handled by a single supervisor. The bigger issue occurred
when many connections were dropped at once and the supervisor
couldn't keep up.
Diffstat (limited to 'src/ranch_acceptors_sup.erl')
-rw-r--r-- | src/ranch_acceptors_sup.erl | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/ranch_acceptors_sup.erl b/src/ranch_acceptors_sup.erl index cdb633b..e320633 100644 --- a/src/ranch_acceptors_sup.erl +++ b/src/ranch_acceptors_sup.erl @@ -15,18 +15,16 @@ -module(ranch_acceptors_sup). -behaviour(supervisor). --export([start_link/2]). +-export([start_link/3]). -export([init/1]). --spec start_link(ranch:ref(), module()) +-spec start_link(ranch:ref(), pos_integer(), module()) -> {ok, pid()}. -start_link(Ref, Transport) -> - supervisor:start_link(?MODULE, [Ref, Transport]). +start_link(Ref, NumAcceptors, Transport) -> + supervisor:start_link(?MODULE, [Ref, NumAcceptors, Transport]). -init([Ref, Transport]) -> - ConnsSup = ranch_server:get_connections_sup(Ref), +init([Ref, NumAcceptors, Transport]) -> TransOpts = ranch_server:get_transport_options(Ref), - NumAcceptors = maps:get(num_acceptors, TransOpts, 10), Logger = maps:get(logger, TransOpts, error_logger), SocketOpts = maps:get(socket_opts, TransOpts, []), %% We temporarily put the logger in the process dictionary @@ -45,7 +43,7 @@ init([Ref, Transport]) -> ranch_server:set_addr(Ref, Addr), Procs = [ {{acceptor, self(), N}, {ranch_acceptor, start_link, [ - LSocket, Transport, Logger, ConnsSup + LSocket, Transport, Logger, ranch_server:get_connections_sup(Ref, N) ]}, permanent, brutal_kill, worker, []} || N <- lists:seq(1, NumAcceptors)], {ok, {{one_for_one, 1, 5}, Procs}}. |