用Erlang写了一个聊天室的服务器Demo,感觉代码很是简洁。我用JAVA模拟了100个客户端,但是当我模拟5000个客户端时,就会得到链接异常:java.net.ConnectException: Connection refused: connect。
[b]服务器端代码:[/b]
[code="erlang"]
-module(chat_server).
-export([start_server/0, accept/1]).
start_server()->
{ok, SocketListen} = gen_tcp:listen(9999, [binary, {active, false}]),
ets:new(chatETS, [named_table, public]),
ets:insert(chatETS, {socketList, []}),
accept(SocketListen).
accept(SocketListen)->
{ok, Socket} = gen_tcp:accept(SocketListen),
[{socketList,SocketListETS}] = ets:lookup(chatETS, socketList),
ets:insert(chatETS, {socketList, [Socket|SocketListETS]}),
spawn(?MODULE, accept, [SocketListen]),
process_req(Socket).
process_req(Socket)->
case gen_tcp:recv(Socket, 0) of
{
[b]服务器端代码:[/b]
[code="erlang"]
-module(chat_server).
-export([start_server/0, accept/1]).
start_server()->
{ok, SocketListen} = gen_tcp:listen(9999, [binary, {active, false}]),
ets:new(chatETS, [named_table, public]),
ets:insert(chatETS, {socketList, []}),
accept(SocketListen).
accept(SocketListen)->
{ok, Socket} = gen_tcp:accept(SocketListen),
[{socketList,SocketListETS}] = ets:lookup(chatETS, socketList),
ets:insert(chatETS, {socketList, [Socket|SocketListETS]}),
spawn(?MODULE, accept, [SocketListen]),
process_req(Socket).
process_req(Socket)->
case gen_tcp:recv(Socket, 0) of
{