Трансляция как UDP с надежностью TCP - PullRequest
20 голосов
/ 28 августа 2008

Я работаю над решением .net, которое работает полностью внутри одной сети. Когда пользователи вносят изменения в систему, я хочу запустить объявление, чтобы все остальные услышали его и действовали соответственно. Есть ли способ, которым мы можем транслировать подобные сообщения (как позволит вам UDP) при сохранении гарантированной доставки (как TCP)?

Это в небольшой сети (30 клиентов), если это будет иметь значение.

Ответы [ 16 ]

0 голосов
/ 10 декабря 2008

Я думаю, что наиболее раздражающей особенностью TCP в этих сценариях является возможность / способ сортировки входящих пакетов по их первоначальному порядку - концепция потока. Вы не можете прочитать байт до тех пор, пока он не прибудет.

Если вы можете жить без него, у вас есть шанс иметь свой протокол, быстрый и надежный, но не для заказа пакетов! Просто невозможно управлять ими обоими, потому что вы не можете упорядочить свои байты, пока не получите другую копию потерянного пакета, это главный компромисс.

0 голосов
/ 10 декабря 2008

Зачем создавать что-то с нуля, если вы можете использовать библиотеку? Специально для такого маленького проекта?

Попробуйте использовать Emcaster , который сам использует надежную многоадресную передачу сообщений - PGM, написан на .NET и с полным исходным кодом. Вы получите хороший паб / подсистему с доступной фильтрацией тем. Или вы можете узнать из кода, как это сделать, и основывать на нем свое собственное расширение.

0 голосов
/ 28 августа 2008

Yoy следует взглянуть на спецификацию Norm (NACK-Oriented Reliable Multicast). Вы можете найти информацию о норме здесь .

Протокол NORM предназначен для обеспечить сквозной надежный транспорт объемных объектов данных или потоков по универсальная многоадресная IP-маршрутизация и экспедиторские услуги. НОРМА использует избирательное, отрицательное подтверждение (NACK) механизм для транспорта надежность и предлагает дополнительные протокольные механизмы для проведения надежные многоадресные сеансы с ограниченная "априорная" координация между отправители и получатели

Это несколько очень хорошо известно в военном мире.

Норма спецификации.

Норма Источник

0 голосов
/ 28 августа 2008

Я думаю, что есть три варианта, в широком смысле:

  1. Вместо широковещательной рассылки UDP вы можете создать объект (поток, процесс, сервер, сервис или что-то еще, что существует в вашем решении), который хранит список подписчиков и отправляет им индивидуальные UDP-сообщения. *
  2. Используйте многоадресную передачу UDP, но вам придется написать какой-то механизм, который позаботился бы о надежной доставке для вас (например, повторных попыток, тайм-аутов и т. Д.). Это также означает, что вы должны получить ответ от своих клиентов.
  3. Если вы не боитесь экспериментальных транспортных протоколов, вы можете посмотреть здесь для предложений.,
0 голосов
/ 28 августа 2008

То, что вы можете сделать, это то, что после широковещательной передачи клиенты инициируют соединения tcp. В противном случае вам просто нужно вести список всех клиентов и самостоятельно инициировать подключения к каждому клиенту.

0 голосов
/ 28 августа 2008

сделать многоадресную рассылку RDP.

...