Каков наилучший подход для IPC между Java и С++?
Я хотел бы реализовать надежное решение IPC между одним JVM-приложением (одним процессом, потенциально несколькими потоками) и собственным С++-приложением, которое связано с dll С++. Dll может быть или не находиться на одной физической машине. Каков наилучший подход для этого?
Любые предложения будут очень благодарны! Спасибо!
Ответы
Ответ 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 для моих сугубо С++-приложений. Спектры выглядят красиво и многообещающе. Я попробую.