【问题标题】:What is the best approach for IPC between Java and C++?Java 和 C++ 之间 IPC 的最佳方法是什么?
【发布时间】:2010-09-15 00:32:07
【问题描述】:

我想在单个 JVM 应用程序(一个进程,可能是多个线程)和链接到 C++ dll 的本机 C++ 应用程序之间实现一个强大的 IPC 解决方案。 dll 可能在也可能不在同一台物理机器上。这样做的最佳方法是什么?

任何建议将不胜感激!谢谢!

【问题讨论】:

    标签: java c++ ipc


    【解决方案1】:

    我会使用标准 TCP/IP 套接字,应用程序在其中侦听某个端口,并且库连接到它以报告它必须报告的内容并期待答案。

    抽象是健壮的,得到很好的支持,不会有互操作问题。

    【讨论】:

      【解决方案2】:

      你考虑过Facebook's Thrift framework吗?

      Thrift 是一个用于可扩展的跨语言服务开发的软件框架。它将软件堆栈与代码生成引擎相结合,以构建在 C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、Smalltalk 和 OCaml 之间高效无缝工作的服务。

      Thrift 允许您在一个简单的定义文件中定义数据类型和服务接口。将该文件作为输入,编译器生成代码,用于轻松构建跨编程语言无缝通信的 RPC 客户端和服务器。

      它可以在 TCP 套接字上工作,并且已经内置了序列化/反序列化。

      阅读whitepaper了解详情。

      【讨论】:

      • Thrift 会很棒,但我在他们的文档中看到第一句话说它在 Windows 上不起作用......我解释正确吗? wiki.apache.org/thrift/ThriftInstallationWin32
      • @Justin:是的,它不能使用 Visual Studio 编译。
      • 旧线程,但 Thrift 现在附带 Visual Studio (2010) 项目
      【解决方案3】:

      Google protocol buffer 可以帮助您以与语言和平台无关的方式序列化数据。它还将生成 Java 和 C++ 代码来处理读取和写入序列化数据。然后,您可以使用任何您希望发送数据的通信机制。例如,您可以通过 TCP 套接字或共享内存 IPC 发送它。

      【讨论】:

        【解决方案4】:

        mmm - DLL 不是进程,所以我假设您的意思是您的 Java 应用程序和链接到 DLL 的其他一些本机应用程序之间的 IPC。可以肯定的是,套接字是这里的必经之路。它会让你的一切变得更轻松。

        另一种选择是使用 JNI 与 DCOM 实现对话,但我认为您不会获得太多收益(除了必须处理令人头疼的 COM 和 JNI :-))。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-01-29
          • 1970-01-01
          相关资源
          最近更新 更多