在这里,“本地”指的是在同一子网中运行,大多数情况下是在同一主机/虚拟机上运行,因此一些标准的跨网络跨平台RPC机制,如SOAP、XML-RPC、CORBA等似乎是不必要的。
有效负载主要是从C++到Java的数值数据(主要是表格形式)和少量元数据(例如可用数据服务、数据描述/类型等),以及从Java到C++的控制台/脚本化UI事件。因此,C++程序充当服务器,Java程序充当客户端。
我可以列举出几个选项(大多数是从搜索这个精彩的网站得来的),但我从未在真实的重型环境中使用过或看到过其中任何一个,所以我真的希望那些“曾经在那里,做过那个”的人能够教育我各种选项的利弊。
- 共享内存
- 管道、stdin/stdout等
- 通过普通套接字(可能是UDP)发送自定义数据结构(这个问题)
- 通过普通套接字发送消息,可以是Google协议缓冲、Thrift、JSON等(这个答案,以及其他答案)
- Java RMI与C++ RMI服务器(这个问题)
- JNI(在这个问题中有一些答案)
我非常确定有很多选项我没有列举出来。感谢大家的帮助!
编辑:我忘了提到性能不是主要关注点,因为数据吞吐量不会很大(服务器受到数据库绑定),但知道哪种选项比其他选项更快或更慢是很重要的。例如,我认为没有什么比共享内存更好(如果做得正确)。