Я разрабатываю клиент-серверное приложение Java, в котором будет множество серверов, с которыми клиенты должны будут соединиться.Проблема в том, что, вероятно, подавляющее большинство из них не будут служить одновременно.Клиент должен найти хотя бы один доступный в списке, поэтому он будет выполнять его итерацию, ища доступный сервер (когда он находит первый, он останавливается, достаточно одного).
Проблема в том, что списоквероятно, будут длинные, десятки тысяч, их может быть даже несколько сотен ... и может случиться так, что только 1% из них будут подключены (т. е. выполняется сервер).Вот почему мне нужен умный и быстрый способ узнать, подключен ли сервер, без ожидания тайм-аутов или около того.Я принимаю всевозможные предложения.
Я думал о том, чтобы статистически упорядочить список серверов, чтобы серверы, которые доступны чаще, были первыми попытками хостов.Но этого недостаточно.
Возможно многоадресная UDP-датаграмма?Соединения между клиентами / серверами являются TCP, но, возможно, чтобы найти сервер, лучше сначала сделать UDP-рассылку и дождаться ответа, например ... что вы думаете?
:)
РЕДАКТИРОВАТЬ:
И сервер, и клиент используют пулы потоков.
Пул серверов обрабатывает 200 потоков одновременно, а когда пул заполнен, ставит в очередь остальные, пока длина очереди не составит 200 выполняемых.Затем он блокирует и прекращает принимать соединения, пока в очереди снова не останется свободного места.
У клиента есть пул кэшированных потоков, он может одновременно выполнять все запросы к нужному серверу (очевидно, со здравым смыслом...).