Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java与C+之间的通信+;过程_Java_C++_Ipc - Fatal编程技术网

Java与C+之间的通信+;过程

Java与C+之间的通信+;过程,java,c++,ipc,Java,C++,Ipc,可能重复: 我需要在java和C++进程之间进行进程间通信,因为这两个进程都是不同的进程,所以我不能使用JNI。我正在考虑使用套接字通信,但是除了套接字通信之外还有其他解决方案吗?哪个更好更快?你有没有看过哪个对我更有吸引力?一般来说,你有以下几种可能性(可能会有更多,但这些是“受欢迎的”可能性): 标准输入和输出通道。(+)易于实现(+)快速(+)易于调试(-)您无法连接/分离到已经运行的进程 命名管道。(+)快速(-)系统相关 IPC系统,例如DBU。(-)系统相关 TCP套接字通信。(

可能重复:


我需要在java和C++进程之间进行进程间通信,因为这两个进程都是不同的进程,所以我不能使用JNI。我正在考虑使用套接字通信,但是除了套接字通信之外还有其他解决方案吗?哪个更好更快?

你有没有看过哪个对我更有吸引力?

一般来说,你有以下几种可能性(可能会有更多,但这些是“受欢迎的”可能性):

  • 标准输入和输出通道。(+)易于实现(+)快速(+)易于调试(-)您无法连接/分离到已经运行的进程

  • 命名管道。(+)快速(-)系统相关

  • IPC系统,例如DBU。(-)系统相关

  • TCP套接字通信。()速度较慢,但应足够快(+)可以轻松扩展到远程通信(+)易于调试(-)应用程序或同一应用程序实例之间可能存在的TCP端口冲突


就个人而言,我更喜欢TCP套接字通信,因为它可以在(几乎)不更改源代码的情况下进行远程连接。但是,必须注意不要在同一台机器上使用同一端口两次,这是不可能的。您可能已经知道,第二个实例将无法侦听端口。一种可能的解决方法是使用端口范围。

有许多IPC方法可用,选择哪种方法取决于您想要做什么

  • 文件:可能是最容易实现的一个,只是您需要注意同步、脏读等
  • 信号:我对此知之甚少,但它应该是一种快速的通信方法,我相信它的实现更复杂
  • 网络:我最喜欢的方法,每个新进程/节点在spwan上打开一个新端口,更好的替代方法是使用类似的机制,在一个进程内触发许多“节点集”。这是一种快速的方法,但不是实时的
  • 除此之外,还有信号量、共享内存和管道等。。
    但是这些都不容易理解和实现,尽管我相信应该有一些库来实现这一点,也在操作系统级别上

    那么标准输入和输出呢?其他可能性:命名管道、共享内存和类似DBus的IPC系统。但是我也喜欢你提到的关于插座的解决方案;它们的可移植性有时成为远程连接是最重要的优势。套接字可能是最简单的,这取决于您正在尝试做什么。从最简单的角度考虑,如果你已经测量了性能问题,就可以优化它。我不使用java,可以使用C++或java进程之间的管道或共享内存或消息队列。thanxs用于任何输入。我不必这样做,因为它在同一台机器上-同一台机器上的UDP非常有用reliable@user1808932您可以通过附加一个有效负载来获取订单数据包,该有效负载保持number@doc我对那件事了解得还不够。你想把它添加到我的答案中吗?如果两个进程在同一台机器上,他也可以使用共享内存。几乎可以肯定是最快的,但它可能需要一些Java方面的JNI,并且完全依赖于系统。@JamesKanze我不确定JVM是否可以轻松访问Java进程的共享内存。@doc JVM没有。这就是为什么你需要JNI来获取C或C++中的共享内存。你仍然需要将java数据复制到共享内存中,但进程内的拷贝仍然比任何其他方法快很多。@杰姆斯:你能详细说明一下吗?我喜欢在java和C++进程之间实现共享内存一。