当我的客户端连接到服务器时,我遇到了这个“java.net.ConnectException:连接超时”异常。
它们都在同一个 LAN 中,在同一个集群中,它们之间没有防火墙。此外,它们对多达 1000 个客户也能正常工作,或多或少。当我启动 1200 个客户端时,其中许多(数百个)在连接到服务器时超时。每个客户端不断向服务器发送请求,这会在服务器上施加 cpu 负载,这在几个线程中约为 100%。
如何在不添加服务器或增加超时的情况下避免此问题?我也做过sudo sysctl -w net.core.somaxconn=2048
,没用。
我正在使用 NIO 连接到服务器:
SocketChannel serverChannel = SocketChannel.open();
serverChannel.connect(new InetSocketAddress(serverAddr, serverPort));
serverObjectOutStream = new ObjectOutputStream(Channels.newOutputStream(serverChannel));
serverObjectInStream = new ObjectInputStream (Channels.newInputStream (serverChannel));
至于服务器:
while (running) {
SocketChannel newClientChannel = serverSocketChannel.accept();
ObjectInput cliInput = new ObjectInputStream (Channels.newInputStream (newClientChannel));
ObjectOutput cliOutput = new ObjectOutputStream(Channels.newOutputStream(newClientChannel));
// receive client's id and put it in a hashtable of id -> in,out channels
// acknowledge the client
}