Получить доступных клиентов через UDP-трансляцию - PullRequest
0 голосов
/ 11 апреля 2020

В настоящее время я разрабатываю систему на основе узлов, в которой сервер отправляет широковещательную передачу UDP в частной сети (с настраиваемым протоколом), которая будет приниматься несколькими различными клиентами, поддерживающими указанный протокол. После запроса сервер выбирает между некоторыми клиентами более устойчивое TCP-соединение.

Запрос последовательности клиента

  1. Сервер передает запрос на -ip сообщение каждому устройству / узлу в сети.
  2. Все доступные клиенты, поддерживающие протокол, ответят своим уникальным IP-адресом на сервер.
  3. Сервер выбирает среди клиенты через сообщение запрос на соединение .
  4. Клиент, выбранный сервером, подключается к серверу через TCP для надежного соединения.

Мой вопрос

У меня довольно хорошие знания как по TCP, так и по UDP, но я никогда раньше не проектировал такую ​​систему. Как вы думаете, эта система построена правильно или есть более "стандартный" способ сделать что-то похожее на это? Что ты думаешь?

Спасибо!

--- Редактировать ---

Добавлена ​​схема программы.

enter image description here

1 Ответ

2 голосов
/ 12 апреля 2020

Существует стандартный протокол для рекламы услуг в сети, который вы можете рассмотреть: Простой протокол обнаружения услуг , основанный на 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 следует использовать только для обнаружения сервера, а не для двунаправленной связи, требующей надежной доставки.

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

...