gpt4 book ai didi

java - 本地 C++ 和 Java 程序之间通信的良好替代方案是什么?

转载 作者:可可西里 更新时间:2023-11-01 16:40:07 24 4
gpt4 key购买 nike

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

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

我可以列举几个选项(主要是通过搜索这个很棒的网站),但我从来没有在现实世界的重型情况下使用或见过一个选项,所以我真的希望“去过那里,做过”的人可以教育关于这些选项的优缺点。

  1. 共享内存
  2. 管道、标准输入/标准输出等
  3. 普通套接字(可能是 UDP)上的自定义数据结构(this question)
  4. 普通套接字上的消息,可以是 Google Protocol Buffer 、Thrift、JSON 等(this answer 等)
  5. 带有 C++ RMI 服务器的 Java RMI ( this question )
  6. JNI(this question 中的一些答案)

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


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

最佳答案

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

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

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

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

关于java - 本地 C++ 和 Java 程序之间通信的良好替代方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3911147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com