我希望在一个单独的JVM应用程序(一个进程,可能有多个线程)和一个链接到C++ dll的本地C++应用程序之间实现一个强大的IPC解决方案。这个dll可能在同一台物理机器上,也可能不在。如何最好地实现?
如果您有任何建议,将不胜感激!谢谢!
Google protocol buffer可以帮助您以一种语言和平台中立的方式序列化数据。它还将生成Java和C++代码来处理读写序列化数据。然后,您可以使用任何通信机制来发送数据。例如,您可以通过TCP套接字或共享内存IPC发送它。
您考虑过Facebook的Thrift框架吗?
Thrift是一个用于可扩展跨语言服务开发的软件框架。它结合了软件堆栈和代码生成引擎,构建出能够在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk和OCaml之间高效无缝工作的服务。
Thrift允许您在一个简单的定义文件中定义数据类型和服务接口。将该文件作为输入,编译器将生成用于轻松构建RPC客户端和服务器的代码,这些客户端和服务器可以在不同编程语言之间无缝通信。
它可以通过TCP套接字工作,并且序列化/反序列化已经内置。
阅读whitepaper获取详细信息。
mmm - DLLs不是进程,所以我假设您的意思是在Java应用程序和某个链接到DLL的本地应用程序之间进行IPC。肯定的是,套接字是这里的最佳选择。这将使您的一切变得更容易。
另一个选择是使用JNI与DCOM实现通信,但我认为您不会获得太多好处(除了必须处理COM和JNI的头疼问题:-))。