小编Ște*_*tan的帖子

Erlang同时连接1M客户端

我有一个问题:我想创建一个可以保持1M同时打开TCP连接的Erlang服务器.我调整了我的操作系统(Oracle Linux 7)来提高文件描述符.在服务器上我做gen_tcp:listen

// point_1
Socket = gen_tcp:accept
spawn(handle(Socket))//另一个线程
返回point_1

如果我按顺序连接没问题,在100秒内连接100K客户端; 但我没有更多的信仰.

如果我想以一种连续的方式连接它们,例如,只有大约80个连接来自100.

这就是我运行一切的方式:

erlc *.erl
erl +Q 134217727 +P 1000000 -env ERL_MAX_PORTS 40960000 -env ERTS_MAX_PORTS 40960000
Run Code Online (Sandbox Code Playgroud)

//启动一个将侦听端口9999的服务器

ex:start(1, 9999) 
Run Code Online (Sandbox Code Playgroud)

// 100个客户端尝试在端口9999上连接

ex:connect_clients(100, 9999)
Run Code Online (Sandbox Code Playgroud)

我来告诉你一些代码:

start(Num,LPort) ->
  case gen_tcp:listen(LPort,[{active, false},{packet,2}]) of
    {ok, ListenSock} ->
      start_servers(Num,ListenSock),
      {ok, Port} = inet:port(ListenSock),
      Port;
    {error,Reason} ->
      {error,Reason}
  end.

start_servers(0,_) ->
  ok;
start_servers(Num,LS) ->
  spawn(?MODULE,server,[LS,0]),
  start_servers(Num-1,LS).

server(LS, Nr) ->
  io:format("before accept ~w~n",[Nr]),
  case gen_tcp:accept(LS) of
    {ok,S} ->
      io:format("after accept ~w~n",[Nr]),
      spawn(ex,loop,[S]),
      server(LS, Nr+1); …
Run Code Online (Sandbox Code Playgroud)

sockets erlang connect gen-tcp

6
推荐指数
1
解决办法
724
查看次数

标签 统计

connect ×1

erlang ×1

gen-tcp ×1

sockets ×1