0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Implement backpressure on cowboy_req:stream_body

This should limit the amount of memory that Cowboy is using
when a handler is sending data much faster than the network.

The new max_stream_buffer_size is a soft limit and only has
an effect when the cowboy_stream_h handler is used.
This commit is contained in:
Loïc Hoguin 2019-09-13 14:20:04 +02:00
parent 4427108b69
commit 49af57d546
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
6 changed files with 91 additions and 25 deletions

View file

@ -98,7 +98,7 @@ do_get(Path, Headers, Config) ->
Ref = gun:get(ConnPid, Path, [{<<"accept-encoding">>, <<"gzip">>}|Headers]),
{response, IsFin, Status, RespHeaders} = gun:await(ConnPid, Ref),
{ok, RespBody} = case IsFin of
nofin -> gun:await_body(ConnPid, Ref);
nofin -> gun:await_body(ConnPid, Ref, 30000);
fin -> {ok, <<>>}
end,
gun:close(ConnPid),
@ -891,6 +891,11 @@ stream_body_multiple(Config) ->
{200, _, <<"Hello world!">>} = do_get("/resp/stream_body/multiple", Config),
ok.
stream_body_loop(Config) ->
doc("Streamed body via a fast loop."),
{200, _, <<0:32000000/unit:8>>} = do_get("/resp/stream_body/loop", Config),
ok.
stream_body_nofin(Config) ->
doc("Unfinished streamed body."),
{200, _, <<"Hello world!">>} = do_get("/resp/stream_body/nofin", Config),