0
我试图实现一个客户端服务器程序。 服务器建立一个侦听套接字用下面的代码:向Erlang的gen_tcp服务器发送大量消息
调用gen_tcp:听(端口,[二进制,{活性,真}])
的问题是,当客户端发送大量消息的(列表元组)到服务器,服务器接收几条消息。似乎TCP将长信息分成几个信息。
我们应该如何处理一次才能得到整个长信息?
我试图实现一个客户端服务器程序。 服务器建立一个侦听套接字用下面的代码:向Erlang的gen_tcp服务器发送大量消息
调用gen_tcp:听(端口,[二进制,{活性,真}])
的问题是,当客户端发送大量消息的(列表元组)到服务器,服务器接收几条消息。似乎TCP将长信息分成几个信息。
我们应该如何处理一次才能得到整个长信息?
我不认为tcp软件包被分割,我使用下面的程序测试它。
client.erl
-module(client).
-compile(export_all).
send(Message) ->
{ok, Socket} = gen_tcp:connect("localhost", 1234, [binary, {packet, 4}]),
ok = gen_tcp:send(Socket, list_to_binary(Message)),
gen_tcp:close(Socket).
main() ->
Message = ["atom" ++ integer_to_list(X) || X <- lists:seq(1, 1000)],
send(Message).
server.erl
-module(server).
-compile(export_all).
start()->
{ok, ListenSocket} = gen_tcp:listen(1234, [binary, {packet, 4},
{active, true}, {reuseaddr, true}]),
spawn(fun() -> per_connect(ListenSocket) end).
per_connect(ListenSocket) ->
{ok, Socket} = gen_tcp:accept(ListenSocket),
spawn(fun() -> per_connect(ListenSocket) end),
loop(Socket).
loop(Socket) ->
receive
{tcp, Socket, Data} ->
io:format("~p~n", [binary_to_list(Data)]),
loop(Socket);
{tcp_closed, Socket} ->
io:format("closed~n"),
gen_tcp:close(Socket)
end.
您可以先运行server:start().
,然后运行client:main()
,你可以看到结果。
TCP没有消息的概念。您需要像ØMQ,HTTP或'{packet,4}'这样的更高级别的协议。 – rightfold