Надежные широковещательные библиотеки udp? - PullRequest
2 голосов
/ 14 февраля 2011

Существуют ли библиотеки, которые помещают уровень надежности поверх UDP-трансляции ?

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

Я уже собирался написать такую ​​вещь сам (потому что это было бы чрезвычайно интересно!), но решил сначала спросить..

PS Я смотрю на что-то более легкое, чем библиотека - инфраструктура не меняется.

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Как насчет UDP многоадресной рассылки?Взгляните на PGM протокол , для которого существует несколько коммерческих и открытых реализаций.

Отказ от ответственности: я являюсь автором OpenPGM , реализации с открытым исходным кодомуказанного протокола.

1 голос
/ 15 февраля 2011

Просмотрите сайт IETF для RFC на Reliable Multicast.Есть целая рабочая группа по этому вопросу.Несколько протоколов были разработаны для разных целей.Также взгляните на Oracle / Sun для проекта Java Reliable Multicast Service (JRMS).Это был исследовательский проект Sun, который никогда не поддерживали, но он содержал привязки Java для протоколов TRAM и LRMS.

1 голос
/ 14 февраля 2011

Несмотря на то, что были проведены некоторые исследования надежной многоадресной передачи UDP, я еще не использовал ничего подобного. Вы должны принять во внимание, что это может быть не так тривиально, как кажется на первый взгляд.

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

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

...