Java 如何设计具有多个持久连接的服务器

Java 如何设计具有多个持久连接的服务器,java,sockets,client,persistent-connection,Java,Sockets,Client,Persistent Connection,我正在设计一个应用程序,其中许多客户端连接到一个中央服务器。此服务器保持这些连接,每半小时发送一次保持有效信息。服务器有一个嵌入式HTTP服务器,它为客户端连接(例如)提供接口。我想知道最好的办法是什么。我当前的实现是用Java实现的,我只有一个以ID为键的映射,但是每个连接都会启动一个线程,我不知道这是否是最好的方法。如有任何提示,将不胜感激。 谢谢, Isaac Waller如果客户端要长时间连接,那么为每个客户端分配一个线程可能会有问题。服务器上的每个线程都需要一定数量的资源(例如,堆栈的

我正在设计一个应用程序,其中许多客户端连接到一个中央服务器。此服务器保持这些连接,每半小时发送一次保持有效信息。服务器有一个嵌入式HTTP服务器,它为客户端连接(例如)提供接口。我想知道最好的办法是什么。我当前的实现是用Java实现的,我只有一个以ID为键的映射,但是每个连接都会启动一个线程,我不知道这是否是最好的方法。如有任何提示,将不胜感激。
谢谢,

Isaac Waller

如果客户端要长时间连接,那么为每个客户端分配一个线程可能会有问题。服务器上的每个线程都需要一定数量的资源(例如,堆栈的内存)


通过使用异步servlet,您可以使用较少的线程来处理客户端请求。

使用java.nio包,如本页所述:。请仔细阅读本页:


就我个人而言,我不会为NIO内部而烦恼,也不会使用像or这样的框架。NIO很复杂,很容易以非常模糊的方式出错。如果您想让它“正常工作”,那么就使用一个框架。

通过每个连接一个线程,您通常可以在一台机器上扩展到大约10000个连接。对于Windows 32计算机,您可能会达到1000个连接左右的限制

为了避免这种情况,您可以更改程序的设计,也可以向外扩展(水平)。你必须权衡开发成本和硬件成本


每个用户的单线程和单连续连接通常是最简单的编程模型。我会坚持使用这种型号,直到达到当前硬件的极限。此时,我决定要么修改代码,要么添加更多硬件。

阅读更多关于反应堆模式的信息。在Java中有一个实现(它使用通道,而不是客户端的线程)。 它易于实现且非常高效