繁体   English   中英

如何快速知道服务器是否在线?

[英]How could I quickly know if a server is online?

我正在开发一个 Java 客户端/服务器应用程序,其中将有大量的服务器供客户端连接。 问题是他们中的绝大多数人可能不会同时服务。 客户端需要在列表中至少找到一个可用的,所以它会迭代它,寻找一个可用的服务器(当它找到第一个它停止时,一个就足够了)。

问题是这个列表可能很长,几十个zousands,甚至可能有几百个……而且可能只有1% 的人被连接(即执行服务器)。 这就是为什么我需要一种聪明且快速的方法来知道服务器是否已连接,而无需等待超时左右。 我接受各种建议。

我曾考虑对服务器列表进行统计排序,以便更频繁地可用的服务器是第一个尝试的主机。 但这还不够。

也许多播UDP数据报? 客户端/服务器之间的连接是 TCP,但也许要找到一个服务器,最好先进行 UDP 多播并等待答案,例如......你怎么看?

:)

编辑:

服务器和客户端都使用线程池。

服务器池同时处理 200 个线程,当池已满时,将其余线程排队,直到队列长度为 200 个可运行线程。 然后它阻塞,并停止接受连接,直到队列中再次有空闲空间。

客户端有一个缓存的线程池,它可以并发地向你想要的服务器发出所有请求(常识,显然......)。

这只是一个初步的想法,会增加一些开销,但是您可以让服务器定期 ping 一些客户端将通过的集中式服务器。 然后,如果服务器在一段时间内没有 ping 通,它就会被删除。

您可能希望使用对等网络。

看看 JXTA/JXSE: http ://jxse.kenai.com/index.html

如果是您自己的代码在这些服务器中的每一个上运行,您能否将活动发送到中央服务器(由您控制​​并保证始终处于运行状态)? 中央服务器然后可以维护所有活动服务器的更新列表。 客户端只需要来自中央服务器的这个列表的副本,然后开始它需要的任何通信。

听起来像是 Threads 的工作。 您无法加快连接速度,需要时间来联系服务器。

恕我直言,最好的方法是让几百个线程在服务器列表中前进。 第一个找到一台服务器的人获胜。 然后向其他线程发出信号以使其消失。

顺便说一句,你真的想“疯狂地”订购服务器列表吗? :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM