mirror of
https://github.com/ninenines/cowboy.git
synced 2025-07-14 04:10:24 +00:00
Add hibernate option to cowboy_http and cowboy_http2
When enabled the connection process will automatically hibernate. Because hibernation triggers GC, this can be used as a way to keep memory usage lower, at the cost of performance.
This commit is contained in:
parent
d3f6bda38b
commit
0f257d06b6
6 changed files with 103 additions and 33 deletions
|
@ -51,6 +51,27 @@ do_handshake(Settings, Config) ->
|
|||
{ok, << 0:24, 4:8, 1:8, 0:32 >>} = gen_tcp:recv(Socket, 9, 1000),
|
||||
{ok, Socket}.
|
||||
|
||||
hibernate(Config) ->
|
||||
doc("Ensure that we can enable hibernation for HTTP/1.1 connections."),
|
||||
{ok, _} = cowboy:start_clear(?FUNCTION_NAME, [{port, 0}], #{
|
||||
env => #{dispatch => init_dispatch(Config)},
|
||||
hibernate => true
|
||||
}),
|
||||
Port = ranch:get_port(?FUNCTION_NAME),
|
||||
try
|
||||
ConnPid = gun_open([{type, tcp}, {protocol, http2}, {port, Port}|Config]),
|
||||
{ok, http2} = gun:await_up(ConnPid),
|
||||
StreamRef1 = gun:get(ConnPid, "/"),
|
||||
StreamRef2 = gun:get(ConnPid, "/"),
|
||||
StreamRef3 = gun:get(ConnPid, "/"),
|
||||
{response, nofin, 200, _} = gun:await(ConnPid, StreamRef1),
|
||||
{response, nofin, 200, _} = gun:await(ConnPid, StreamRef2),
|
||||
{response, nofin, 200, _} = gun:await(ConnPid, StreamRef3),
|
||||
gun:close(ConnPid)
|
||||
after
|
||||
cowboy:stop_listener(?FUNCTION_NAME)
|
||||
end.
|
||||
|
||||
idle_timeout(Config) ->
|
||||
doc("Terminate when the idle timeout is reached."),
|
||||
ProtoOpts = #{
|
||||
|
|
|
@ -199,6 +199,27 @@ do_chunked_body(ChunkSize0, Data, Acc) ->
|
|||
do_chunked_body(ChunkSize, Rest,
|
||||
[iolist_to_binary(cow_http_te:chunk(Chunk))|Acc]).
|
||||
|
||||
hibernate(Config) ->
|
||||
doc("Ensure that we can enable hibernation for HTTP/1.1 connections."),
|
||||
{ok, _} = cowboy:start_clear(?FUNCTION_NAME, [{port, 0}], #{
|
||||
env => #{dispatch => init_dispatch(Config)},
|
||||
hibernate => true
|
||||
}),
|
||||
Port = ranch:get_port(?FUNCTION_NAME),
|
||||
try
|
||||
ConnPid = gun_open([{type, tcp}, {protocol, http}, {port, Port}|Config]),
|
||||
{ok, http} = gun:await_up(ConnPid),
|
||||
StreamRef1 = gun:get(ConnPid, "/"),
|
||||
StreamRef2 = gun:get(ConnPid, "/"),
|
||||
StreamRef3 = gun:get(ConnPid, "/"),
|
||||
{response, nofin, 200, _} = gun:await(ConnPid, StreamRef1),
|
||||
{response, nofin, 200, _} = gun:await(ConnPid, StreamRef2),
|
||||
{response, nofin, 200, _} = gun:await(ConnPid, StreamRef3),
|
||||
gun:close(ConnPid)
|
||||
after
|
||||
cowboy:stop_listener(?FUNCTION_NAME)
|
||||
end.
|
||||
|
||||
http10_keepalive_false(Config) ->
|
||||
doc("Confirm the option http10_keepalive => false disables keep-alive "
|
||||
"completely for HTTP/1.0 connections."),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue