有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想从Java环境中调用Ruby方法。我尝试过以下四种解决方案:

  1. 使用JRuby。这将是非常好的,因为它在Java虚拟机中运行一切。然而,我遇到了一些关键的(不可接受的)性能问题:
    • JRuby目前不适用于我的C扩展
    • 来自Ruby的Fork调用在Java虚拟机中运行时行为不稳定
    • JRuby中的代码运行速度比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,但这与我需要的正好相反

有没有一种方法可以从Java调用MRI Ruby,而不存在上述任何问题


共 (1) 个答案

  1. # 1 楼答案

    您可以通过以下方式提高#3的效率:

    • 不要启动进程,而是使用长时间运行的守护进程
    • 不是通过文件而是通过管道进行通信
    • 使用比XML更高效的东西,比如协议缓冲区

    但总的来说,我看你没有错过任何选择。对不起