Каков наилучший подход для IPC между Java и C ++? - PullRequest
12 голосов
/ 03 октября 2008

Я хотел бы реализовать надежное решение IPC между одним приложением JVM (один процесс, потенциально несколько потоков) и собственным приложением C ++, которое связано с DLL C ++. DLL может или не может быть на той же физической машине. Каков наилучший подход для этого?

Любые предложения будут с благодарностью! Спасибо!

Ответы [ 5 ]

9 голосов
/ 03 октября 2008

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

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

4 голосов
/ 24 января 2009

Буфер протокола Google может помочь вам сериализовать данные независимо от языка и платформы. Он также будет генерировать код на Java и C ++ для обработки чтения и записи сериализованных данных. Затем вы можете использовать любой механизм связи, который вы хотите отправить данные. Например, вы можете отправить его через сокет TCP или через IPC с общей памятью.

4 голосов
/ 03 октября 2008

Рассматривали ли вы Фреймворк Facebook ?

Thrift - это программная структура для разработки масштабируемых кросс-языковых сервисов. Он объединяет программный стек с механизмом генерации кода для создания сервисов, которые эффективно и без проблем работают между C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, Smalltalk и OCaml.

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

Он может работать через сокеты TCP, а сериализация / десериализация уже встроена.

Подробнее см. * .

0 голосов
/ 27 июля 2009

Я смотрю на Remote Call Framework , для моих чисто C ++ приложений Спецификации выглядят красиво и многообещающе. Я собираюсь попробовать это.

0 голосов
/ 04 октября 2008

ммм - DLL не являются процессами, поэтому я предполагаю, что вы имеете в виду IPC между вашим Java-приложением и каким-либо другим собственным приложением, связанным с DLL. Сокеты, наверняка, путь сюда. Вам все будет проще.

Другой вариант - использовать JNI для общения с реализацией DCOM, но я не думаю, что вы получите много (кроме необходимости иметь дело с головными болями COM и JNI :-)).

...