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

时间:2010-10-12 01:45:47

标签: java c++ sockets communication rpc

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

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

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

  1. 共享内存
  2. Pipe,stdin / stdout等
  3. 通过普通套接字(可能是UDP)(this question
  4. 的自定义数据结构
  5. 普通套接字上的消息可以是Google协议缓冲区,Thrift,JSON等(this answer等)
  6. 带有C ++ RMI服务器的Java RMI(this question
  7. JNI(this question中的一些答案)
  8. 我很确定我错过了很多选择。谢谢大家的帮助!


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

2 个答案:

答案 0 :(得分:4)

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

选项1,2,6未到达其他主机。

对于非Java方面,选项5可能太麻烦了。

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

答案 1 :(得分:1)

我选择选项4.我跳过5. 2会很笨重。

我们正在谈论将数字作为纯文本传递,是吗?