【问题标题】:Communicating between ruby and javaruby 和 java 之间的通信
【发布时间】:2012-03-22 19:17:28
【问题描述】:

我目前正在为 3d 绘图应用程序编写一个 ruby​​ 插件(用 c ++ 编写,ruby 是它的脚本语言)。 我想做的是在它和另一个用java编写的应用程序之间进行通信,两个程序都在同一台计算机上运行。 集成到 3d 绘图应用程序中的 ruby​​ 版本相当精简且非常基本,据我所知,套接字库相当有限或不存在。

任何关于如何在两个应用程序之间交换信息的想法都将不胜感激。

将交换的信息量将相当少。

【问题讨论】:

  • 套接字、文件、数据库...

标签: java ruby


【解决方案1】:

您的问题可能会以多种方式得到解答。有很多可能的解决方案...

我想到的最简单但非常有效的方法之一是使用 standard input and standard output redirection 在程序之间进行通信(用任何语言编写)

您的 Java 程序需要执行一个 Ruby 程序,重定向输入/输出流。我不知道在 Java 中用于此任务的函数,但在 Ruby 中,方法是 IO.popen(command,mode)

以这种方式调用的 Ruby 程序只是从 STDIN 读取并写入 STDOUT(可以使用普通方法 getsputs

你还没有说你正在编程什么系统,所以我不确定你的平台是否能够处理这种重定向,或者 names pipes (这将是第二个简单的解决方案)

【讨论】:

  • Windows 和 Mac OS。老实说,我在编程方面几乎是自学成才,所以我对 shell、管道等的了解基本上不存在。我只想输出信息到文本文件或内存(可能不是正确的术语),而不是通过命令行让 ruby​​ 或 java 知道已创建新信息并以这种方式交换信息。
  • 我不确定你的意思,但我的建议不是关于命令行参数。一个程序只是启动另一个程序,然后它们就一起工作,可能持续一周或更长时间。从技术上讲,我的解决方案是类似于通过文件交换信息,但您无需考虑该文件的名称。在文件系统中创建一个文件可能是一个好主意,但是你还应该决定如何处理“一直在增长”的文件——它最终可能会填满你的所有磁盘空间。我喜欢你是自学成才的;-)
【解决方案2】:

如果对性能要求不高,可以使用电脑磁盘上的文件来改变两个应用程序之间的信息。 例如,如果您想将 EVENT1 从 Ruby 应用程序传输到 Java 应用程序: Ruby 应用程序在磁盘 dir 上写入一个名为 event1.flag 的标志文件,而 Java 应用程序启动一个 Thead 继续在 dir 中搜索 .flag 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多