我正在学习erlang,以下是解释如何使用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;
我很好奇erlang如何解析gen_tcp:recv
收到的数据。我浏览了lib/inets-5.7.1/src/http_server
下的一些代码但模块太多了,我仍然无法弄清楚解析http请求的基本方向。任何人都可以告诉我如何解析http请求,以及这些Web框架采取的方法是什么。感谢〜
答案 0 :(得分:5)
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