如何从Java调用/使用MRI Ruby?

时间:2012-03-09 10:30:53

标签: java c ruby jruby

我想从Java环境调用Ruby方法。我尝试了这四种解决方案:

  1. 使用JRuby 。这将是非常好的,因为它运行Java虚拟机中的所有内容。但是,我遇到了一些严重(不可接受)的性能问题:
    • JRuby目前无法使用我的C扩展程序。
    • 来自Ruby的Fork调用,在Java虚拟机中运行时表现不稳定。
    • JRuby中的代码运行速度比MRI Ruby中慢。
  2. 使用ROR 。通过Ruby on Rails提供web服务,将Java全部绕过。这可以解决公司仅使用Java Web服务的IT政策,它还迫使IT部门(Java和Web服务开发人员)或R& D部门(Ruby和C开发人员)在域外工作。
  3. 使用Java系统调用。我们可以使用Java系统调用调用独立的Ruby程序,并通过XML文件解析输入和输出数据。这可行,但启动新进程和处理XML文件的开销是性能问题。
  4. 使用RJB 。 Ruby Java Bridge允许我从Ruby调用Java,但这与我需要的相反。
  5. 是否有一种从Java调用MRI Ruby的方法,没有任何上述问题?

1 个答案:

答案 0 :(得分:1)

你可以通过

提高效率#3
  • 不启动进程,而是使用长时间运行的守护进程
  • 不通过文件进行通信,而是通过管道进行通信
  • 使用比XML更高效的东西,比如Protocol Buffers

但总的来说,我没有看到你错过任何选项。遗憾。