2008-10-03 7 views
12

단일 JVM 응용 프로그램 (하나의 프로세스, 잠재적으로 다중 스레드)과 C++ DLL에 연결된 네이티브 C++ 응용 프로그램간에 강력한 IPC 솔루션을 구현하고 싶습니다. dll은 동일한 물리적 시스템에 있거나 없을 수 있습니다. 그렇게하기위한 최선의 방법은 무엇입니까?Java와 C++ 사이의 IPC에 가장 적합한 방법은 무엇입니까?

모든 의견을 크게 높이세요! 감사!

답변

9

표준 TCP/IP 소켓을 사용합니다. 응용 프로그램이 포트에서 수신 대기하고 라이브러리가보고하고 응답해야 할 내용을보고하기 위해 연결합니다.

추상화는 강력하고 잘 지원되며 상호 운용성 문제가 없습니다.

4

Facebook's Thrift framework을 고려해 보셨나요?

Thrift는 확장 가능한 크로스 - 언어 서비스 개발을위한 소프트웨어 프레임 워크입니다. C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 및 OCaml간에 효율적이고 원활하게 작동하는 서비스를 빌드하는 코드 생성 엔진과 소프트웨어 스택을 결합합니다.

Thrift를 사용하면 간단한 정의 파일에서 데이터 유형 및 서비스 인터페이스를 정의 할 수 있습니다. 이 파일을 입력으로 사용하여 컴파일러는 프로그래밍 언어간에 원활하게 통신하는 RPC 클라이언트 및 서버를 쉽게 작성하는 데 사용되는 코드를 생성합니다.

TCP 소켓을 통해 작동하며 직렬화/직렬화가 이미 기본 제공됩니다.

자세한 내용은 whitepaper을 참조하십시오.

+2

드리프트는 좋겠지 만, 윈도우즈에서 작동하지 않는다고하는 문서의 첫 번째 문장을 봅니다. 올바르게 해석하고 있습니까? http://wiki.apache.org/thrift/ThriftInstallationWin32 –

+0

@Justin : 예, Visual Studio를 사용하여 컴파일하지 않습니다. – dalle

+1

오래된 스레드이지만 중고품은 Visual Studio (2010) 프로젝트와 함께 제공됩니다. –

0

mmm - DLL은 프로세스가 아니므로 Java 응용 프로그램과 DLL에 연결된 다른 기본 응용 프로그램 사이의 IPC를 의미한다고 가정합니다. 소켓은 확실하게 여기로가는 길입니다. 그것은 당신을 위해 모든 것을 쉽게 할 것입니다.

또 다른 옵션은 DCOM 구현과 대화하는 데 JNI를 사용하는 것이지만 COM 및 JNI의 두통을 다루는 것 외에도 많은 이점을 얻을 것이라고 생각하지 않습니다 .-)).

4

Google protocol buffer은 언어와 플랫폼에 중립적 인 방식으로 데이터를 직렬화하는 데 도움이 될 수 있습니다. 또한 직렬화 된 데이터 읽기 및 쓰기를 처리하는 Java 및 C++ 코드를 생성합니다. 그런 다음 데이터를 전송하려는 모든 통신 메커니즘을 사용할 수 있습니다. 예를 들어, TCP 소켓이나 공유 메모리 IPC를 통해 보낼 수 있습니다.

0

내 순수 C++ 앱의 경우 Remote Call Framework입니다. 스펙은 예쁘고 유망스럽게 보입니다. 나는 그것을 시도 할 것이다.

관련 문제