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_listener_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_listener_sup.erl')
-rw-r--r-- | src/ranch_listener_sup.erl | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/ranch_listener_sup.erl b/src/ranch_listener_sup.erl index 3853425..a4cc995 100644 --- a/src/ranch_listener_sup.erl +++ b/src/ranch_listener_sup.erl @@ -21,21 +21,22 @@ -spec start_link(ranch:ref(), module(), any(), module(), any()) -> {ok, pid()}. start_link(Ref, Transport, TransOpts, Protocol, ProtoOpts) -> + NumAcceptors = maps:get(num_acceptors, TransOpts, 10), MaxConns = maps:get(max_connections, TransOpts, 1024), ranch_server:set_new_listener_opts(Ref, MaxConns, TransOpts, ProtoOpts, [Ref, Transport, TransOpts, Protocol, ProtoOpts]), supervisor:start_link(?MODULE, { - Ref, Transport, Protocol + Ref, NumAcceptors, Transport, Protocol }). -init({Ref, Transport, Protocol}) -> +init({Ref, NumAcceptors, Transport, Protocol}) -> ok = ranch_server:set_listener_sup(Ref, self()), ChildSpecs = [ - {ranch_conns_sup, {ranch_conns_sup, start_link, - [Ref, Transport, Protocol]}, - permanent, infinity, supervisor, [ranch_conns_sup]}, + {ranch_conns_sup_sup, {ranch_conns_sup_sup, start_link, + [Ref, NumAcceptors, Transport, Protocol]}, + permanent, infinity, supervisor, [ranch_conns_sup_sup]}, {ranch_acceptors_sup, {ranch_acceptors_sup, start_link, - [Ref, Transport]}, + [Ref, NumAcceptors, Transport]}, permanent, infinity, supervisor, [ranch_acceptors_sup]} ], {ok, {{rest_for_one, 1, 5}, ChildSpecs}}. |