Подтвердить что ты не робот

Каков наилучший подход для IPC между Java и С++?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Вы считали Facebook Thrift framework?

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

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

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

Подробнее читайте технический документ.

Ответ 3

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

Ответ 4

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

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

Ответ 5

Я смотрю Remote Call Framework для моих сугубо С++-приложений. Спектры выглядят красиво и многообещающе. Я попробую.