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

Ensure we can stream the response body from any process

This commit is contained in:
Loïc Hoguin 2019-10-02 20:30:32 +02:00
parent 20660d7566
commit eaa052616f
No known key found for this signature in database
GPG key ID: 8A9DF795F6FED764
4 changed files with 38 additions and 9 deletions

View file

@ -247,6 +247,21 @@ do(<<"stream_body">>, Req0, Opts) ->
cowboy_req:stream_body(<<"Hello! ">>, nofin, Req),
cowboy_req:stream_body({sendfile, 0, AppSize, AppFile}, fin, Req),
{ok, Req, Opts};
<<"spawn">> ->
Req = cowboy_req:stream_reply(200, Req0),
Parent = self(),
Pid = spawn(fun() ->
cowboy_req:stream_body(<<"Hello ">>, nofin, Req),
cowboy_req:stream_body(<<"world">>, nofin, Req),
cowboy_req:stream_body(<<"!">>, fin, Req),
Parent ! {self(), ok}
end),
receive
{Pid, ok} -> ok
after 5000 ->
error(timeout)
end,
{ok, Req, Opts};
_ ->
%% Call stream_body without initiating streaming.
cowboy_req:stream_body(<<0:800000>>, fin, Req0),

View file

@ -942,6 +942,11 @@ stream_body_sendfile_fin(Config) ->
{200, _, ExpectedBody} = do_get("/resp/stream_body/sendfile_fin", Config),
ok.
stream_body_spawn(Config) ->
doc("Confirm we can use cowboy_req:stream_body/3 from another process."),
{200, _, <<"Hello world!">>} = do_get("/resp/stream_body/spawn", Config),
ok.
stream_body_content_length_multiple(Config) ->
doc("Streamed body via multiple calls."),
{200, _, <<"Hello world!">>} = do_get("/resp/stream_body_content_length/multiple", Config),