下面是解释如何使用gen_tcp
的一个例子的一部分。然而,几乎所有的教程都只向你展示了一个echo服务器,而没有一个教程对真实世界的HTTP请求进行解析。
handle_connect(Socket, BinaryList, Count) ->
io:format("handle_connect ~p~n", [self()]),
case gen_tcp:recv(Socket, 0) of
{ok, Binary} ->
io:format("request is :~s~n", Binary),
case gen_tcp:send(Socket, Binary) of
ok ->
handle_connect(Socket, BinaryList, Count);
{error, Reason} ->
io:format("send failed~n"),
gen_tcp:close(Socket)
end;
我很好奇如何解析gen_tcp:recv/\[2,3\]
接收到的Erlang格式的数据。我浏览了一下lib/inets-5.7.1/src/http_server
的代码,但是模块太多了,我仍然不知道解析HTTP请求的基础是什么。
有谁能告诉我如何解析HTTP请求,以及Web框架采用什么方法吗?谢谢~
1条答案
按热度按时间ltskdhd11#
Erlang有几个轻量级Web服务器库,包括:
还有Yaws,它与Apache更具可比性。我建议查看Cowboy的代码,因为它非常模块化。
可以在此处找到解答您问题的快捷方式:
http://www.erlang.org/doc/man/erlang.html#decode_packet-3 和https://github.com/extend/cowboy/blob/master/src/cowboy_http_protocol.erl#L99