2011-12-19 7 views
3

Какая быстрая/эффективная реализация, когда один сервер транслирует несколько клиентов: MulticastSocket или DatagramSocket?MulticastSocket против DatagramSocket при широковещании для нескольких клиентов

Пожалуйста, обсудите также объяснение, спасибо!

Представленные сообщения включают строки и числа с плавающей запятой.

ответ

5

Решающим фактором обычно является то, являются ли клиенты одними и теми же, или в других сетях с включенной/объединенной сетью. В общем, многоадресная рассылка будет намного эффективнее любой формы одноадресной передачи, однако многоадресная передача не является надежной и не работает в гетерогенных сетях, таких как Интернет, где операторы склонны отключать многоадресный трафик.

Если данные должны быть надежными, вам действительно нужно использовать одноадресную рассылку TCP или альтернативно добавить в многоадресную рассылку FEC, чтобы придать видимость надежности потоку данных, и если трафик должен перемещаться через в Интернете, то вы ДОЛЖНЫ использовать одноадресный TCP или UDP.

Краткая информация: Если ваши данные маленькие, необходимо быть надежными, обходит Интернет или отправляется нечасто, используйте одноадресную рассылку. Если ваши данные большие, доставляются большому числу клиентов, могут терпеть некоторую потерю и тратить только те сети, которые вы контролируете, или которые включены в многоадресной рассылке, используют многоадресную рассылку. Многоадресная рассылка - это действительно один трюк-пони (ненадежные данные передаются по однородной сети), тогда как одноадресная рассылка может делать что угодно, но с более высокими накладными расходами.

Примечания: TCP сверх определенного количество потери данных перестают быть надежными, а также, (вызывающие расцепители) и добавленный трафик от одноадресного может нажать этот предел вниз, как это умножает количество потоков данных. FEC добавляет относительно постоянные накладные расходы даже для очень большого количества клиентов, но есть момент, когда ни FEC, ни одноразовая помощь больше не нужны, и вам просто нужно перенастроить сеть для достижения работоспособного решения.

2

Multi-cast - лучший вариант, если у вас есть клиенты в нескольких подсетей. Трансляция может быть немного более эффективной, если вы отправляете данные только по одной подсети. Однако мультилисты обычно используются, поскольку разница довольно незначительна.

Информация, содержащаяся здесь, не имеет значения.

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

2

Ваш вопрос непонятен. Если вы ведете трансляцию, не имеет значения, используете ли вы DatagramSocket или MulticastSocket. Если вы спрашиваете, эффективнее ли многоадресная передача, чем широковещательная передача, (a) ответ «да», и (b) вы должны использовать MulticastSocket для приема многоадресных рассылок; для отправка их, опять же, вы можете использовать либо DatagramSocket, либо MulticastSocket, и нет никакой разницы в эффективности.

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^