Java和C++之间IPC的最佳方法是什么
What is the best approach for IPC between Java and C++?
我想在单个JVM应用程序(一个进程,可能是多个线程)和链接到C++dll的本机C++应用程序之间实现一个强大的IPC解决方案。dll可能在同一物理计算机上,也可能不在同一个物理计算机上。这样做的最佳方法是什么?
如有任何建议,我们将不胜感激!谢谢
我会使用一个标准的TCP/IP套接字,应用程序在某个端口上侦听,库连接到它来报告它必须报告的内容并期望得到答案。
抽象是健壮的,支持良好,并且不会出现互操作问题。
你考虑过Facebook的Thrift框架吗?
Thrift是一个用于可扩展跨语言服务开发的软件框架。它将软件堆栈与代码生成引擎相结合,以构建在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk和OCaml之间高效无缝工作的服务。
Thrift允许您在一个简单的定义文件中定义数据类型和服务接口。以该文件为输入,编译器生成代码,用于轻松构建跨编程语言无缝通信的RPC客户端和服务器。
它可以在TCP套接字上工作,并且序列化/反序列化已经内置。
有关详细信息,请阅读白皮书。
Google协议缓冲区可以帮助您以与语言和平台无关的方式序列化数据。它还将生成Java和C++代码来处理序列化数据的读写。然后,您可以使用任何想要发送数据的通信机制。例如,您可以通过TCP套接字或共享内存IPC发送它。
mmm-DLL不是进程,所以我假设你指的是Java应用程序和链接到DLL的其他本机应用程序之间的IPC。当然,插座是通往这里的必经之路。它会让你的一切变得更容易。
另一种选择是使用JNI与DCOM实现进行对话,但我认为您不会获得太多好处(除了必须处理COM和JNI:-)的头痛问题之外)。
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?