本地C++和Java程序之间的通信有哪些好的替代方案?

std*_*_ex 9 c++ java sockets rpc communication

"本地"是指两者都在同一子网中运行,在大多数情况下是相同的主机/ VM,因此一些标准的跨网络跨平台RPC机制(如SOAP,XML-RPC,CORBA等)似乎是不必要的.

有效载荷主要是数字(主要是表格)数据,包含从C++到Java的少量元数据(例如可用的数据服务,数据描述/类型等),以及从Java到C++的控制台/脚本化UI事件.因此,C++程序就像客户端的服务器和Java程序一样.

我可以列举几个选项(主要来自搜索这个精彩的网站),但我从来没有在真实世界的重型场景中使用或看过一个,所以我真的希望有人"在那里,做到这一点"可以教育我关于选项的利弊.

  1. 共享内存
  2. 管道,stdin/stdout等
  3. 普通套接字上的自定义数据结构(可能是UDP)(这个问题)
  4. 普通套接字上的消息可能是Google协议缓冲区,Thrift,JSON等(此答案等)
  5. 带有C++ RMI服务器的Java RMI(这个问题)
  6. JNI(这个问题的一些答案)

我很确定我错过了很多选择.感谢大家的帮助!


编辑:我忘了提到性能不是一个主要问题,因为数据吞吐量预计不会很大(服务器严重受数据库限制),但重要的是要知道一个选项是否更快或更慢.例如,我认为没有什么比共享内存更好(如果做得对).

Thi*_*ilo 4

选项 3 和 4 用于现实世界的重载情况。

选项 1、2、6 不会到达另一台主机。

选项 5 对于非 Java 端来说可能太麻烦了。

我会选择选项 4,因为选项 3 的级别太低(除非选项 4 速度太慢)。从您列举的协议中选择您最喜欢的跨平台轻量级消息传递协议。这些都是经过“实战考验”的,并且拥有适用于大多数语言的库。