不幸的是,您没有提供有关服务器性质的详细信息。我想您正在编写一个典型的 TCP 服务器。在这个答案中,我不会谈论任何特定于 Java 的细节。
简短的建议是:在客户端连接之间插入延迟。没有它,您正在积极模拟对您的服务器的 DoS 攻击。
对于较长的,请阅读下文。
通常,一个 TCP 服务器通过调用(在可爱的 C 接口中)函数,并将结果(在我们的例子中)传递给函数,只创建 1 个监听。在这些准备之后,服务器将调用一个将使服务器进入休眠状态(如果套接字被标记为阻塞)并且如果地球另一端的客户端将开始调用一个函数,而不是(在服务器端)操作系统内核的支持将创建连接的套接字。int sockfd = socket(...)
sockfd
bind()
listen()
accept()
connect()
accept()
The actual number of possible pending connectins can be known by looking at the listen()
function. listen()
has a backlog parameter which defines the maximum number of connection the OS kernel should queue to the socket (this is basically a sum of all connections in SYN_RCVD
and ESTABLISHED
states). Historically the recommended value for backlog in 1980s was something like 5 which is obviously miserable in our days. In FreeBSD 7.2, for example, a hard limit for backlog may be guessed by typing:
% sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 128
and in Fedora 10:
% cat /proc/sys/net/core/somaxconn
128
P.S.
Sorry for my terrible English.