-1

Ситуация следующая. Я хочу, чтобы приложение работало на сервере. Все рабочие столы в компании должны подключаться к нему. Но я не хочу, чтобы IP-адрес сервера был жестко закодирован в настольных приложениях. Скорее я хочу, чтобы сервер мог объявить себя с помощью некоторых механизмов вещания. Настольные приложения будут прослушивать такое сообщение и, следовательно, узнают IP-адрес сервера и могут подключиться к нему.

Как мне это сделать ? Нужно ли использовать мультикаст? Как далеко идут многоадресные сообщения? Как настольные приложения могут прослушивать многоадресные данные?

1 ответ1

1

Наиболее распространенный способ для этого - использовать обычный обычный DNS. Ваша компания, вероятно, имеет собственное доменное имя; возможно внутренний; просто добавьте поддомен под ним - myapp.internal.example.com или myapp.corp или что-то в этом роде - и укажите адрес вашего сервера.

myapp.<domain>.         A       10.0.0.5
myapp.<domain>.         AAAA    2001:db8::123:4

(В конце концов, это сервер, его IP-адрес вряд ли будет меняться еженедельно. И когда он все-таки изменится, все, что вам нужно обновить, это поддомен в DNS.)

Вы можете сделать его более продвинутым и использовать записи SRV вместо прямых записей адресов A/AAAA. Например, протокол чата XMPP использует записи SRV для определения местоположения серверов для домена, которые могут быть множественными с разными приоритетами:

chat1.<domain>.         A       10.0.0.4
chat2.<domain>.         A       10.0.0.7

                                ; priority, weight, port, hostname
_xmpp._tcp.<domain>.    SRV      0 0 5222 chat1.<domain>.
_xmpp._tcp.<domain>.    SRV     10 0 5222 chat1.<domain>.

Это сложнее для приложений, поскольку теперь им нужна некоторая логика для сортировки возвращаемых записей по приоритету SRV, а затем по весу, но это может дать некоторые преимущества, такие как возможность добавления более медленных "резервных" серверов.


Если по какой-либо причине это неприемлемо, вы можете попробовать один из существующих протоколов обнаружения служб на основе многоадресной рассылки. (Некоторые из них объединяют разрешение имен и обнаружение служб в одно; другие разделяют его.)

  • Apple и различные дистрибутивы Linux используют Bonjour/Avahi aka mDNS ("Multicast DNS") в сочетании с DNS-SD для общего обнаружения служб и разрешения локальных имен;

  • Microsoft предпочитает SSDP на основе UPnP, за исключением случаев, когда вместо этого она предпочитает WS-Discovery. Он использовал NetBIOS в прошлом. Все они описаны в разделе « Поставщики функций».

  • (Некоторые программы решают просто транслировать дейтаграммы UDP, говоря:«Я здесь!"в своем собственном формате. Это не работает хорошо.)

Как правило, существуют как предоставляемые ОС API-интерфейсы, так и сторонние библиотеки для поиска определенных служб с использованием соответствующего протокола обнаружения.

Если вы собираетесь реализовать что-то самостоятельно, каждая ОС также предоставляет функции для присоединения к группе многоадресной рассылки и для получения сообщений, которые любой отправляет в эту группу. Многоадресная IP-рассылка должна работать по умолчанию в широковещательном домене, но часто ее необходимо настроить для прохождения маршрутизаторов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .