Как я могу быстро узнать, подключен ли сервер? - PullRequest
4 голосов
/ 05 мая 2011

Я разрабатываю клиент-серверное приложение Java, в котором будет множество серверов, с которыми клиенты должны будут соединиться.Проблема в том, что, вероятно, подавляющее большинство из них не будут служить одновременно.Клиент должен найти хотя бы один доступный в списке, поэтому он будет выполнять его итерацию, ища доступный сервер (когда он находит первый, он останавливается, достаточно одного).

Проблема в том, что списоквероятно, будут длинные, десятки тысяч, их может быть даже несколько сотен ... и может случиться так, что только 1% из них будут подключены (т. е. выполняется сервер).Вот почему мне нужен умный и быстрый способ узнать, подключен ли сервер, без ожидания тайм-аутов или около того.Я принимаю всевозможные предложения.

Я думал о том, чтобы статистически упорядочить список серверов, чтобы серверы, которые доступны чаще, были первыми попытками хостов.Но этого недостаточно.

Возможно многоадресная UDP-датаграмма?Соединения между клиентами / серверами являются TCP, но, возможно, чтобы найти сервер, лучше сначала сделать UDP-рассылку и дождаться ответа, например ... что вы думаете?

:)

РЕДАКТИРОВАТЬ:

И сервер, и клиент используют пулы потоков.

Пул серверов обрабатывает 200 потоков одновременно, а когда пул заполнен, ставит в очередь остальные, пока длина очереди не составит 200 выполняемых.Затем он блокирует и прекращает принимать соединения, пока в очереди снова не останется свободного места.

У клиента есть пул кэшированных потоков, он может одновременно выполнять все запросы к нужному серверу (очевидно, со здравым смыслом...).

Ответы [ 4 ]

2 голосов
/ 05 мая 2011

Это всего лишь начальная мысль, и к ней можно добавить некоторые накладные расходы, но серверы могут периодически пинговать некоторый централизованный сервер, через который клиенты будут подключаться.Затем, если сервер не пингует в течение определенного времени, он удаляется.

1 голос
/ 05 мая 2011

Возможно, вы захотите использовать одноранговую сеть.

Посмотрите на JXTA / JXSE: http://jxse.kenai.com/index.html

0 голосов
/ 05 мая 2011

Похоже, работа для потоков. Вы не можете ускорить соединение, требуется время, чтобы связаться с сервером.

ИМХО, лучший способ - это получить несколько сотен потоков, чтобы пройти через список серверов. Победит первый, кто найдет один сервер. Затем подайте сигнал другим потокам, чтобы они прекратились.

Кстати, вы действительно хотели заказать список серверов "садистски"? :)

0 голосов
/ 05 мая 2011

Если на каждом из этих серверов работает ваш собственный код, можете ли вы отправить живой на центральный сервер (который контролируется вами и гарантированно будет работать постоянно)?Центральный сервер может затем поддерживать обновленный список всех серверов, которые являются активными.Клиенту просто нужно скопировать этот список с центрального сервера, а затем начать все необходимые коммуникации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...