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

标签 java performance sockets connection

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

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

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

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

:)

编辑:

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

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

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

最佳答案

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

关于java - 如何快速知道服务器是否在线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902578/

相关文章:

java - 为什么 ImageView 没有在我的应用程序中出现图像?

比较数学运算所花费的时间

MySQL 执行查询太慢

php - PHP socket_write()仅发送部分数据

Python socket.recv 未从页面获取所有数据

Java 打包和导入 - 我的错误在哪里?

java - 在传递给方法之前将空值命名为引用的约定?

java - 使用 NTLMv2 的集成 Windows 身份验证

linux - Linux服务器的功耗比桌面版低吗?

Java服务器程序在第二次运行客户端时不接受客户端的输入