MulticastSocket и DatagramSocket в широковещательной рассылке нескольким клиентам - PullRequest
4 голосов
/ 19 декабря 2011

Что было бы быстрее / более эффективной реализацией, когда один сервер вещает нескольким клиентам: MulticastSocket или DatagramSocket?

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

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

Ответы [ 4 ]

5 голосов
/ 19 декабря 2011

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

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

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

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

2 голосов
/ 19 декабря 2011

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

2 голосов
/ 19 декабря 2011

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

Содержимое данных не важно.

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

0 голосов
/ 22 сентября 2016

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

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

...