erlang 如何使用'gen_tcp'解析HTTP请求?

roqulrg3  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(157)

下面是解释如何使用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框架采用什么方法吗?谢谢~

ltskdhd1

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

相关问题