Ситуация следующая. Я хочу, чтобы приложение работало на сервере. Все рабочие столы в компании должны подключаться к нему. Но я не хочу, чтобы IP-адрес сервера был жестко закодирован в рабочих столах. Вместо этого я хочу, чтобы сервер мог объявлять о себе с помощью некоторых механизмов вещания. Рабочие столы будут прослушивать такое сообщение и, следовательно, узнают IP-адрес сервера, а затем смогут подключиться к нему.
Как это сделать? Нужно ли мне использовать multicast? Как далеко доходят multicast-сообщения? Как настольные приложения могут прослушивать multicast-данные?
решение1
Наиболее распространенным методом для этого является использование обычного обычногоДНС. У вашей компании, вероятно, есть собственное доменное имя; возможно, внутреннее; просто добавьте поддомен под ним — 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, также известный какmDNS(«Многоадресный DNS») в сочетании сDNS-SDкак для общего обнаружения служб, так и для локального разрешения имен;
Microsoft предпочитает протокол UPnPSSDP, за исключением случаев, когда он предпочитаетWS-ОткрытиеВместо этого. Раньше он использовал NetBIOS. Все документировано вПоставщики функций.
(Некоторые программы решают просто транслировать UDP-датаграммы со словами «Я здесь!» в своем собственном формате. Это работает не очень хорошо.)
Обычно существуют как API, предоставляемые ОС, так и сторонние библиотеки для поиска определенных служб с использованием соответствующего протокола обнаружения.
Если вы собираетесь реализовать что-то самостоятельно, каждая ОС также предоставляет функции дляприсоединиться к многоадресной группеи получать сообщения, отправленные кем-либо в эту группу.IP-мультикастдолжно работать по умолчанию в широковещательном домене, но часто требуетнастроен на прохождение маршрутизаторов.