Я работаю над архитектурой клиент-сервер UDP, где сервер (естественно) может обрабатывать несколько клиентов.Однако я столкнулся с некоторыми проблемами.В настоящее время у меня есть «сервер», который принимает данные из 1 сокета, из IPAddress.Any.Если это неизвестный IP, создается новый экземпляр клиента, и все соответствующие данные отправляются туда.
Теперь вот проблемы, с которыми я столкнулся.При попытке BeginReceiveFrom на «сервере» и «клиентах» все данные принимаются дважды, поэтому, естественно, это не очень полезно.При перезапуске BeginReceiveFrom сразу после получения данных (но перед анализом, проверкой и т. Д.) Данные поступают в случайном порядке, а иногда данные отсутствуют.(Я подключаюсь локально, поэтому сомневаюсь, что UDP будет терять такие частые пакеты).
При схожей архитектуре TCP вы можете без проблем запускать BeginReceiveFrom на каждом новом клиенте.Что здесь отличается?Как стек TCP обрабатывает распределение данных по всем подключенным клиентам?
Как мне достичь чего-то похожего (или, по крайней мере, большего количества потоков, чем один)?Необходимость запустить один поток для (скажем, 1000) соединений и необходимость разбора / обработки каждого отдельного пакета перед обработкой нового пакета - это значительное снижение производительности.
Это идея для анализа и «доставки»данные для каждого из клиентов, и есть ли эти данные для каждого клиента?очень поможет в этом случае (спросите меня, думаете ли вы, и я могу предоставить некоторые из них).
Мое текущее решение - BeginReceiveFrom> EndReceiveFrom> Анализ данных> Проверка данных> BeginReceiveFrom> и т. д.
UDP по выбору.