我是erlang语言的新手,并且有一个脚本可以接受来自客户端的数据并在日志中存储响应。我想在其中做一些修改,以便它可以将响应发送回客户端。我试过放牧场:发送(插座,数据);在http_pool中写入ladger.info但错误即将发生。请帮忙
-define(POOL, ?MODULE).
init() ->
ok = hackney_pool:start_pool(?POOL, [
{timeout, 150000},
{max_connections, avant_app:env(api_pool_size)}
]),
ok.
request(Binary) ->
URL = avant_app:env(api_url),
Headers = [],
Payload = { form, [{ <<"data">>, Binary }] },
Options = [
{connect_options, [ binary ]},
{pool, ?POOL}
],
{ok, 200, _RespHeaders, ClientRef} = hackney:request(post, URL, Headers, Payload, Options),
{ ok, Body } = hackney:body(ClientRef),
lager:info("Body ~p", [ Body ]),
ok.
http_pool
-behaviour(ranch_protocol).
-export([
start_link/4,init/4
]).
-record(state, {
socket :: reference(),
transport :: module(),
rest = <<>> :: binary()
}).
start_link(Ref, Socket, Transport, Opts) ->
Pid = spawn_link(?MODULE, init, [Ref, Socket, Transport, Opts]),
{ok, Pid}.
init(Ref, Socket, Transport, _Opts = []) ->
ok = ranch:accept_ack(Ref),
loop(#state{
socket = Socket,
transport = Transport
}).
loop(State = #state{ transport = Transport, socket = Socket }) ->
case parse(State) of
{ ok, Str, NewState } ->
queue_server:add(Str),
loop(NewState);
{ nothing, NewState } ->
case Transport:recv(Socket, 0, 60000) of
{ok, Data} ->
lager:info("i got ~p", [ Data ]),
loop(NewState#state{ rest = <<(NewState#state.rest)/binary, Data/binary>> });
{ error, timeout } ->
loop(NewState);
_Any ->
%%lager:info("Socket ~p", [ Any ]),
ok = Transport:close(Socket)
end;
{exit, _Reason } ->
ok = Transport:close(Socket)
end.
parse(State) ->
parse(State#state.rest, State).
parse(<<>>, State) -> { nothing, State#state{ rest = <<>> }};
parse(<<"S", _/binary>> = Packet, State) ->
case binary:split(Packet, <<"END">>) of
[ Str, Rest ] ->
{ ok, <<Str/binary, "END">>, State#state{
rest = Rest
}};
[ Rest ] ->
{ nothing, State#state{
rest = Rest
}}
end;
parse(Data, State) ->
case binary:split(Data, <<"END">>) of
[ _, Rest ] ->
parse(<<"END", Rest/binary>>, State);
[ _Rest ] ->
parse(<<>>, State)
end.
?