UDP для межпроцессного взаимодействия - PullRequest
4 голосов
/ 28 января 2011

Я должен реализовать механизм IPC (отправка коротких сообщений) между процессом java / c ++ / python, работающим в той же системе.Одним из способов реализации является использование сокета с использованием протокола TCP.Это требует поддержания связи и других связанных с этим действий.Вместо этого я думаю об использовании протокола UDP, который не требует подключения, и я могу отправлять сообщения.Мой вопрос заключается в том, имеет ли UDP на той же машине (для IPC) все тот же недостаток, если он применим при обмене данными между компьютерами (например, при ненадежной доставке пакетов, неупорядоченных пакетов.

Ответы [ 4 ]

3 голосов
/ 28 января 2011

Да, все еще нереально.Для локальной связи попробуйте использовать именованные каналы или разделяемую память

Редактировать:

Не знаю требований ваших приложений, рассматривали ли вы что-то вроде MPI (хотя Java не очень хорошо поддерживается ...) или, бережливость?(http://thrift.apache.org/)

1 голос
/ 28 января 2011

Локальный UDP более ненадежен, чем в сети, например, 50% + отбрасывание пакетов ненадежно. Это ужасный выбор, разработчики ядра связывают качество с отсутствием спроса.

Я бы порекомендовал исследовать промежуточное ПО на основе сообщений, желательно с интерфейсом, совместимым с BSD-сокетом, для облегчения изучения. Предложение будет ZeroMQ , которое включает в себя привязки C ++, Java и Python.

1 голос
/ 28 января 2011

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

С другой стороны, локальные сокеты дейтаграмм Unix должны быть надежными, но они не поддерживают многоадресную передачу.

0 голосов
/ 28 января 2011

Локальный UDP по-прежнему ненадежен и иногда блокируется брандмауэрами. Мы столкнулись с этим в нашем продукте MsgConnect , который использует локальный UDP для межпотоковой связи. Кстати, MsgConnect может быть вариантом для вашей задачи, так что вам не нужно иметь дело с сокетами. К сожалению, нет привязки Python, но существуют «родные» реализации C ++ и Java.

...