Стратегии клиент / сервер без установления соединения (UDP) -. NET - PullRequest
0 голосов
/ 07 января 2020

ПРИМЕЧАНИЕ. Это односторонняя передача UDP (т. Е. Нет пути возврата) - Я НЕ МОГУ отправить данные обратно клиенту.

На данный момент я написал несколько комбинаций клиент / сервер. с сочетанием хороших и плохих результатов для доставки пакетов на стороне сервера с использованием класса. NET UDPClient. Вот их краткий обзор:

  1. Одиночный, блокирующий поток / один порт (.Receive ()): работает хорошо, за исключением случаев, когда я замедляю передачу данных, я неизбежно теряю небольшое количество пакетов, которые делает полученный файл непригодным для использования.
  2. Single, asyn c thread / single port (.BeginReceive ()): То же, что и выше - я пропускаю пакеты, если не подавляю отправителя (клиента).
  3. Многопоточный, многопортовый: я создаю 100 потоков (случайное число) и устанавливаю диапазон портов c (например, 10001-10100). Пришлось сменить клиента, чтобы динамически проходить через отправку через разные порты. Кажется, это хорошо работает при первоначальном тестировании, но представляет новые проблемы (например, проблемы с блокировкой файлов при попытке входа в разные потоки).

На данный момент, поскольку я использую UDP и не могу получить пропущенные пакеты повторно передаются, я склоняюсь к варианту 3. Для варианта 3 кто-нибудь видит дополнительные проблемы, вызывающие озабоченность (помимо проблем с доступом к файлу, которые я уже испытываю)?

Кто-нибудь знает о каких-либо другая стратегия, чтобы использовать для сервера, чтобы минимизировать возможность потери пакетов не готовому слушателю UDP?

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