2

以下は、 の使用方法を説明する 1 つの例の一部ですgen_tcp。ただし、ほとんどすべてのチュートリアルでエコー サーバーが表示されますが、実際の 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/\[2,3\]。のコードにざっと目を通しましlib/inets-5.7.1/src/http_serverたが、モジュールが多すぎて、HTTP 要求の解析の基本がどうなるかまだわかりません。

HTTP リクエストを解析する方法と、Web フレームワークがとるアプローチを誰か教えてもらえますか? ありがとう〜

4

1 に答える 1

4

以下を含む、Erlang 用の軽量 Web サーバー ライブラリがいくつかあります。

Apache に匹敵するYawsもあります。カウボーイは非常にモジュール化されているため、カウボーイのコードを確認することをお勧めします。

あなたの質問に答えるショートカットは、次の場所にあります。

http://www.erlang.org/doc/man/erlang.html#decode_packet-3および https://github.com/extend/cowboy/blob/master/src/cowboy_http_protocol.erl#L99

于 2012-05-05T18:22:10.537 に答える