【问题标题】:Pipelining or Otherwise Transferring Data Between Languages in Realtime流水线或以其他方式在语言之间实时传输数据
【发布时间】:2016-09-25 03:45:17
【问题描述】:

我正在做一个项目,我无权讨论核心,但我遇到了一个绊脚石。我需要将数据从 C++ 实时传输到其他语言,最好是 Java 或 Python(约 10 毫秒延迟)。

我们有一个传感器可以用 C++ 进行解析。我们正计划通过蓝牙进行数据读取/输出,很可能是 Java 或 C#(我不太了解 C#,但它似乎类似于 Java)。 C++ 不符合要求,因为我觉得它不够先进,无法满足我们的需要。传感器解析已经完成。数据传输将在同一台机器上进行。

以下是我思考过的方法:

  • 我们尝试使用 MatLab 和 Mex 的任何东西(我不使用 MatLab)来访问 C++ 程序中的函数,以数组形式检索数据。 Matlab 太慢了(我们在某处读到 TX/RX 将被限制在 1-20 Hz。)
  • 不断将数据写入文本或其他等效原始数据文件,并根据需要使用其他语言打开。

我试图查找此内容,但结果中没有显示任何用处。

【问题讨论】:

  • 可能是 JNI 或套接字。
  • 同一台机器,管道或 UDP 套接字。

标签: java python c++ pipelining


【解决方案1】:

您似乎正在寻找 IPC(进程间通信)。最容易实现的是套接字和管道。我添加了链接,这些链接将帮助您决定使用哪一个。我已经实现了命名管道和套接字以每 1 毫秒传输一次数据。我在 python、c 和 pascal 中做了这些实现。

Here is the descriptions of all the IPC types

What's the difference between pipes and sockets

【讨论】:

    【解决方案2】:

    我们有同样的问题,我们必须在一个 Java 应用程序之间共享传感器数据到其他多个应用程序,包括 Java、Python 和 R。

    首先我们尝试了 Socket 连接,但 socket 通信不能容错。一个应用程序中的重新启动或故障会影响其他应用程序。 然后我们尝试了它们之间的 RMI 调用,但由于可扩展性,我们再次不满意。

    我们希望系统可靠、可扩展、分布式和容错。所以,最后我们开始使用 RabbitMQ,我们创建了一个生产者和多个消费者。它工作了2年。您可以考虑使用 Apache Kafka。

    根据您现在和不久的将来的系统要求,您可以选择 Socket 管道、RMI 调用、RabbitMQ、Kafka、Redis。

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 2014-07-02
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      相关资源
      最近更新 更多