[erlang-questions] Cowboy long-lived HTTP handler
tgrk
tajgur@REDACTED
Sun Nov 25 12:14:09 CET 2012
Because I do not have any problems using cowboy_http_handler, I assume that
my implementation of cowboy_loop_handler is not correct.
Here is what I am trying to do in init/3 and info/3:
----------------------------------------------------------------------------------------
...
init({_Transport, http}, Req, Opts) ->
io:format("handler:init ~p, ~p~n", [Req, Opts]),
% erlang:send_after(1000, self(), error_timeout),
{ok, Req3} = cowboy_req:reply(200, Req),
{loop, Req3, undefined, 5000, hibernate}.
info(error_timeout, Req, State) ->
io:format("handler:info: error_timeout ~p, ~p~n", [Req, State]),
{ok, Req2} = cowboy_req:reply(500, Req),
{ok, Req2, State};
info(Any, Req, State) ->
io:format("handler:info: any=~p, ~p, ~p~n", [Any, Req, State]),
{ok, Req2} = cowboy_req:reply(200, Req),
{loop, Req2, State, hibernate}.
...
Error message with stacktrace:
----------------------------------------------------------------------------------------
=ERROR REPORT==== 25-Nov-2012::12:02:07 ===
** Handler test_handler terminating in info/3
for the reason error:function_clause
** Handler state was undefined
** Request was [{socket,#Port<0.58013>},
{transport,ranch_tcp},
{connection,keepalive},
{pid,<0.402.0>},
{method,<<"POST">>},
{version,{1,1}},
{peer,undefined},
{host,<<"127.0.0.1">>},
{host_info,undefined},
{port,8080},
{path,<<"/rpc/checkout/">>},
{path_info,undefined},
{qs,<<>>},
{qs_vals,undefined},
{fragment,<<>>},
{bindings,[]},
{headers,[{<<"content-type">>,<<"application/json">>},
{<<"content-length">>,<<"71">>},
{<<"te">>,<<>>},
{<<"host">>,<<"127.0.0.1:8080">>},
{<<"connection">>,<<"keep-alive">>}]},
{p_headers,[{<<"connection">>,[<<"keep-alive">>]}]},
{cookies,undefined},
{meta,[]},
{body_state,waiting},
{multipart,undefined},
{buffer,<<"{\"jsonrpc\":\"2.0\",\"method\":\"foo\",\"params\":{\"param1\":\"val1\"},\"id\":0}">>},
{resp_state,done},
{resp_headers,[]},
{resp_body,<<>>},
{onresponse,undefined}]
** Stacktrace: [{cowboy_req,reply,
[200,
[{<<"Content-Type">>,<<"application/json">>}],
<<"{message: \"hello world\"}">>,
{http_req,#Port<0.57251>,ranch_tcp,keepalive,<0.401.0>,
<<"POST">>,
{1,1},
undefined,<<"127.0.0.1">>,undefined,8080,
<<"/rpc/checkout/">>,undefined,<<>>,undefined,<<>>,
[],
[{<<"content-type">>,<<"application/json">>},
{<<"content-length">>,<<"71">>},
{<<"te">>,<<>>},
{<<"host">>,<<"127.0.0.1:8080">>},
{<<"connection">>,<<"keep-alive">>}],
[{<<"connection">>,[<<"keep-alive">>]}],
undefined,[],waiting,undefined,
<<"{\"jsonrpc\":\"2.0\",\"method\":\"foo\",\"params\":{\"param1\":\"val1\"},\"id\":0}">>,
done,[],<<>>,undefined}],
[{file,"src/cowboy_req.erl"},{line,873}]},
{test_handler,info,3,
[{file,"src/test_handler.erl"},{line,49}]},
{cowboy_protocol,handler_call,5,
[{file,"src/cowboy_protocol.erl"},{line,569}]}]
test/test_handler_test.erl:49:<0.396.0>: Resp = {ok,{{"HTTP/1.1",200,"OK"},
[{"connection","keep-alive"},
{"date","Sun, 25 Nov 2012 11:02:07 GMT"},
{"server","Cowboy"},
{"content-length","0"}],
[]}}
=ERROR REPORT==== 25-Nov-2012::12:02:07 ===
Received unexpected tcp data on #Port<0.58012>
Data: <<"HTTP/1.1 500 Internal Server Error\r\nconnection:
close\r\nserver: Cowboy\r\ndate: Sun, 25 Nov 2012 11:02:07
GMT\r\ncontent-length: 0\r\n\r\n">>
MFA: undefined
Request: undefined
Session: {session,{{"127.0.0.1",8080},<0.399.0>},
false,http,#Port<0.58012>,ip_comm,1,keep_alive,true}
Status: keep_alive
StatusLine: undefined
Profile: httpc_manager
Regards,
Martin
On Sat, Nov 24, 2012 at 7:50 PM, Loïc Hoguin <essen@REDACTED> wrote:
> Please post the crash message.
>
>
> On 11/24/2012 05:53 PM, tgrk wrote:
>
>> Hello,
>>
>> has anyone played with Cowboy loop_handler behaviour? I am trying to
>> handle JSON-RPC using long-lived HTTP connection. Problem is that I
>> unable to do any reply from init/3 without crash. There is a test for
>> cowboy_loop_handler but it does only timeout check, no response.
>>
>> Regards,
>> Martin
>>
>>
>> ______________________________**_________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/**listinfo/erlang-questions<http://erlang.org/mailman/listinfo/erlang-questions>
>>
>>
>
> --
> Loďc Hoguin
> Erlang Cowboy
> Nine Nines
> http://ninenines.eu
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20121125/61c0b05e/attachment.htm>
More information about the erlang-questions
mailing list