我想从 Java 环境调用 Ruby 方法。我已经尝试了这四种解决方案:
- 使用 JRuby。这将是极好的,因为它在 Java 虚拟机中运行一切。但是我遇到了一些严重的( Not Acceptable )性能问题:
- JRuby 目前不能与我的 C 扩展一起工作。
- 来自 Ruby 的 Fork 调用,在 Java 虚拟机中运行时表现不稳定。
- 代码在 JRuby 中的运行速度比在 MRI Ruby 中慢。
- 使用 ROR。通过 Ruby on Rails 提供网络服务来绕过 Java。这行得通,但打破了公司仅使用 Java 网络服务的 IT 政策,它还迫使 IT 部门(Java 和网络服务开发人员)或研发部门(Ruby 和 C 开发人员)在该领域之外工作。
- 使用 Java 系统调用。我们可以使用 Java 系统调用调用独立的 Ruby 程序,并通过 XML 文件解析输入和输出数据。这可行,但启动新进程和处理 XML 文件的开销是一个性能问题。
- 使用 RJB。 Ruby Java Bridge 允许我从 Ruby 调用 Java,但这与我需要的相反。
是否有一种方法可以从 Java 调用 MRI Ruby,而不会出现上述任何问题?
您可以通过以下方式使#3 更有效率
- 不启动进程,而是使用长时间运行的守护进程
- 不是通过文件而是通过管道进行通信
- 使用比 XML 更高效的东西,比如 Protocol Buffers
但总的来说,我没有看到您遗漏的任何选项。对不起。
我是一名优秀的程序员,十分优秀!