【发布时间】:2011-04-24 02:14:18
【问题描述】:
我所说的“本地”是指两者都在同一个子网中运行,在大多数情况下是同一个主机/VM,因此一些标准的跨网络跨平台 RPC 机制(如 SOAP、XML-RPC、CORBA 等)似乎是不必要的。
有效负载主要是数字(主要是表格)数据,带有一些从 C++ 到 Java 的少量元数据(例如可用的数据服务、数据描述/类型等),以及从 Java 到 C++ 的控制台/脚本 UI 事件.因此,C++ 程序就像服务器一样,Java 程序就像客户端一样。
我可以列举几个选项(主要来自搜索这个精彩的网站),但我从未在现实世界的重载情况下使用或见过一个选项,所以我真的希望“去过那里,做过那个”的人可以教育我谈谈这些选项的优缺点。
- 共享内存
- 管道、标准输入/标准输出等
- 普通套接字(可能是 UDP)上的自定义数据结构 (this question)
- 普通套接字上的消息,可以是 Google 协议缓冲区、Thrift、JSON 等(this answer 等)
- 带有 C++ RMI 服务器的 Java RMI (this question)
- JNI(this question 中的一些答案)
我很确定我错过了很多选择。谢谢大家的帮助!
已编辑:我忘了提到性能不是主要问题,因为预计数据吞吐量不会很大(服务器严重依赖数据库),但重要的是要知道一个选项是否突出更快或更慢。例如,我想没有什么比共享内存更好的了(如果做得对的话)。
【问题讨论】:
标签: java c++ sockets communication rpc