2009-06-28 61 views
2

我正在设计一个应用程序,其中许多客户端连接到中央服务器。这台服务器保持这些连接,每隔半小时发送一次keepalive。服务器具有嵌入式HTTP服务器,该服务器提供到客户端连接的接口(例如,http://server/isClientConnected?id=id)。我想知道什么是最好的方式去做这件事。我目前的实现是使用Java,而我只有一个带有ID的Map作为关键字,但每个连接都启动一个线程,我不知道这是否是真正实现此目的的最佳方式。任何指针将不胜感激。
谢谢,
艾萨克·沃勒如何设计具有多个持久连接的服务器

回答

2

如果客户端将连接了很长一段时间,分配每个客户端线程可能会出现问题。服务器上的每个线程都需要一定量的资源(例如堆栈的内存)。

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

3

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

要避免这种情况,您可以更改程序的设计,也可以向外扩展(水平)。你必须用硬件成本来减轻开发成本。

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

0

阅读更多关于反应堆模式。在Java中有一个实现(它使用通道代替客户端的线程)。 它很容易实现,非常有效。

相关问题