самый быстрый (низкая задержка) метод для Коммуникации Процесса Интера между Java и C/C++

У меня есть приложение Java, соединяющееся через сокет TCP с "сервером", разработанным в C/C++.

оба приложения и сервер работают на той же машине, поле Solaris (но мы рассматриваем миграцию на Linux в конечном счете). тип переданных данных является простыми сообщениями (вход в систему, вход в систему ACK, затем клиент просит что-то, ответы сервера). каждое сообщение приблизительно 300 байтов длиной.

В настоящее время мы используем Сокеты, и все в порядке, однако я ищу более быстрый способ обмениваться данными (более низкая задержка), с помощью методов IPC.

Я исследовал сеть и придумал ссылки на следующие технологии:

  • общая память
  • каналы
  • очереди
  • а также что отнесено как DMA (Прямой доступ к памяти)

но я не мог найти надлежащий анализ их соответствующих действий, ни один, как реализовать их и в JAVA и в C/C++ (так, чтобы они могли говорить друг с другом), кроме, возможно, каналов, которые я мог вообразить, как сделать.

кто-либо может прокомментировать о действиях и выполнимости каждого метода в этом контексте? какой-либо указатель / связывается с полезной информацией о реализации?


ОТРЕДАКТИРУЙТЕ / ОБНОВЛЕНИЕ

после комментария и ответов я добрался здесь, я нашел информацию о Сокетах Домена Unix, которые, кажется, создаются только по каналам и сохранили бы меня целый стек TCP. это - конкретная платформа, таким образом, я планирую тестирование его с JNI или или глухие заходки или junixsocket.

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


спасибо за помощь

98
задан Bastien 20 April 2010 в 01:49
поделиться

6 ответов

В моей прежней компании мы работали с этим проектом, http://remotea.sourceforge.net/ , очень легко понять и интегрировать.

1
ответ дан 24 November 2019 в 05:17
поделиться

Если вы когда-нибудь подумаете об использовании собственного доступа (поскольку и ваше приложение, и «сервер» находятся на одной машине), подумайте о JNA , там меньше шаблонного кода, с которым вам придется иметь дело.

6
ответ дан 24 November 2019 в 05:17
поделиться

Вот проект, содержащий тесты производительности для различные транспорты IPC:

http://github.com/rigtorp/ipc-bench

7
ответ дан 24 November 2019 в 05:17
поделиться

DMA - это метод, с помощью которого аппаратные устройства могут получать доступ к физической памяти без прерывания работы ЦП. Например. Типичный пример - контроллер жесткого диска, который может копировать байты прямо с диска в RAM. Таким образом, это не применимо к IPC.

Совместно используемая память и каналы напрямую поддерживаются современными ОС. Таким образом, они довольно быстрые. Очереди обычно являются абстракциями, например реализован поверх сокетов, каналов и / или разделяемой памяти. Это может показаться более медленным механизмом, но в качестве альтернативы вы создаете такую ​​абстракцию.

10
ответ дан 24 November 2019 в 05:17
поделиться

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

2
ответ дан 24 November 2019 в 05:17
поделиться

Рассматривали ли вы, чтобы сокеты оставались открытыми, чтобы соединения можно было использовать повторно?

0
ответ дан 24 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: