Java socketserver:如何处理许多传入连接?

Sla*_*ish 5 java sockets connection multithreading

我正在编写一个简单的多线程socketserver,我想知道如何最好地处理传入的连接:

  1. 为每个新连接创建一个新线程.并发线程数将受到限制,并且通过指定积压来限制等待连接

  2. 将所有传入连接添加到队列中,并拥有一个处理队列的工作线程池

我倾向于选择2,因为我真的不想拒绝任何连接,即使在高负载下也是如此,但我想知道是否有任何考虑我应该注意接受有效的无限连接?

Bri*_*new 6

通过无限连接,您可以创建大量线程.这意味着需要进行大量处理,而且默认情况下,每个线程只会为堆使用固定数量的内存(我认为每个线程的数字为512kB ,但这可能与平台有关).

通过汇集固定数量的线程并接受有限数量的客户端,您将确保在合理的时间段内为您的某些客户提供服务,并且您的服务器不会因超载而崩溃.

您可能想查看有关使用NIO构建服务器的文章,或者查看Apache Mina等框架.