我正在设计一个应用程序,其中许多客户端连接到中央服务器。该服务器保持这些连接,每半小时发送一次保持活动状态。服务器有一个嵌入式 HTTP 服务器,它为客户端连接提供接口(例如 http://服务器/isClientConnected?id=id)。我想知道解决这个问题的最佳方法是什么。我当前的实现是用Java实现的,我只有一个以ID为键的Map,但是为每个连接启动一个线程,我不知道这是否真的是最好的方法。任何指示将不胜感激。
谢谢,
艾萨克·沃勒

有帮助吗?

解决方案

使用 java.nio 包,如本页所述: 使用 Java NIO 构建高度可扩展的服务器. 。另请仔细阅读此页: 高度可扩展的基于 NIO 的服务器架构.

就我个人而言,我不会打扰 NIO 内部结构并使用类似的框架 阿帕奇米娜 或者 xSocket. 。NIO 很复杂,而且很容易以非常晦涩的方式出错。如果你想让它“正常工作”,那就使用框架。

其他提示

通过每个连接一个线程通常可以扩展到约10,000个连接一台机器上。对于Windows 32的机器,你可能会打到1000个左右连接的限制。

要避免这种情况,可以改变你的程序的设计,也可以向外扩展(水平)。你必须重量硬件的成本开发成本。

每个用户的单个线程,具有单个连续的连接通常是最简单的编程模型。直到你达到你当前硬件的限制我想这个模式坚持下去。在这一点,我将决定要么改变该代码,或添加更多的硬件。

如果客户端将被连接的时间长的时间,分配每个客户端线程可以是有问题的。服务器上的每个线程都需要一定量的资源的(存储器堆栈,例如)。

您可以使用码头延续的处理与通过使用较少的线程客户机请求异步的servlet。

了解更多关于反应堆模式。还有是在Java中实现(它使用的渠道,而不是线程客户端)。 这是很容易实现和非常有效的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top