Существует стандартный протокол для рекламы услуг в сети, который вы можете рассмотреть: Простой протокол обнаружения услуг , основанный на periodi c UDP multicast:
Простой протокол обнаружения услуг (SSDP) - это сетевой протокол, основанный на наборе протоколов Inte rnet для объявления и обнаружения сетевых служб и информации о присутствии. Это достигается без помощи механизмов конфигурации на основе сервера, таких как протокол конфигурации хоста (DHCP) Dynami c или система доменных имен (DNS), и без специальной настройки сетевого хоста * stati c. SSDP является основой протокола обнаружения Universal Plug and Play (UPnP) и предназначен для использования в жилых или небольших офисных средах.
В этом протоколе клиенты присоединяются к этой многоадресной группе UDP, чтобы обнаруживать локальные сетевые службы и инициировать подключения к ним, если они sh. И это в значительной степени предполагаемый вариант использования протокола, который несколько отличается от вашего варианта использования.
Одним из преимуществ многоадресной рассылки IP / UDP является то, что многоадресные пакеты можно отбрасывать в сетевом адаптере, если ни один процесс на хосте не присоединился к этой многоадресной группе. Другой способ заключается в том, что многоадресную IP / UDP-рассылку можно маршрутизировать по сетям.
Из опубликованной схемы:
- Сервер является посредником (шаблон проектирования), местоположение которого должно быть известным каждому другому процессу распределенной системы.
- Клиентам необходимо подключиться / зарегистрироваться на сервере.
- Ваш главный клиент является управляющим приложением.
Сервер имеет смысл рекламировать себя через многоадресную рассылку UDP.
Онлайн-клиенты будут подключаться к серверу, используя TCP при запуске или потерю TCP-соединения. Если клиент прерывает работу по какой-либо причине, которая разрывает соединение TCP, и сервер сразу же узнает об этом, если только клиент не был выключен или его операционная система перестала работать. Возможно, вы захотите включить частые проверки активности TCP для сервера для обнаружения мертвых клиентов как можно скорее, если данные не передаются с сервера на клиенты. То же относится и к клиентам.
Все коммуникации между сервером и клиентами происходят по TCP. В противном случае вам потребуется реализовать надежный обмен сообщениями по протоколу UDP или использовать PGM , что может потребовать много работы. Многоадресный UDP следует использовать только для обнаружения сервера, а не для двунаправленной связи, требующей надежной доставки.
Главный клиент также подключается к серверу, возможно, через другой порт, для управления. Главный клиент может обнаружить все доступные серверы (если их несколько) и позволить пользователю выбрать, к какому из них подключиться.