【问题标题】:Is there a good way to use a Node.js package from a Java program? [closed]有没有一种从 Java 程序中使用 Node.js 包的好方法? [关闭]
【发布时间】:2017-12-31 08:20:20
【问题描述】:

我正在扩展一个用 Java 编写的服务器,我在 npm 上找到了一个非常好的 Node.js 包,它提供了一个我想从 Java 服务器调用的 API。

如何在它们之间建立“桥梁”?

【问题讨论】:

    标签: javascript java node.js npm


    【解决方案1】:

    我能想到的两个选项。

    1. 用服务器包装您的模块并监听请求。然后将结果返回给 java 进程。
    2. 执行子进程。 stdout/stderr 将返回给 java 进程。

    就个人而言,我更喜欢选项 #2。如上所述,这需要安装 v8 javascript 引擎。

    例子:

    //process.js
    console.log('process running');
    console.log(process.argv);
    console.error(new Error('process error'));
    process.exit(0);
    

    从你的java代码运行程序

    ProcessBuilder pb = new ProcessBuilder("node", "process", "one", "three", "five")
    Process p = pb.start();
    //Get output from p
    

    标准输出应该是:

    process running
    [ 'node.exe',
      'process',
      'one',
      'tew',
      'three']
    

    标准错误应该返回:

    Error: process error
        at Object.<anonymous> (./process.js:5:15)
        at Module._compile (module.js:570:32)
        at Object.Module._extensions..js (module.js:579:10)
        at Module.load (module.js:487:32)
        at tryModuleLoad (module.js:446:12)
        at Function.Module._load (module.js:438:3)
        at Module.runMain (module.js:604:10)
        at run (bootstrap_node.js:389:7)
        at startup (bootstrap_node.js:149:9)
        at bootstrap_node.js:504:3
    

    【讨论】:

    • 非常感谢您的回答。如果您不介意,您能否详细说明选项#2?我对 Node.js 以及您在那里描述的方法并不十分熟悉。
    • 更新了我的答案。
    【解决方案2】:

    您必须将 node.js 包包装在 node.js 程序中,并从该程序中提供一个 API,该 API 可以调用模块中的函数,可能通过 Web 服务器访问它(但任何进程间通信机制都可以工作)。然后,您必须先运行 node.js 程序,然后您的 Java 应用才能通过 node.js 服务器访问 node.js 功能。

    运行 node.js Javascript 需要一个 node.js 解释器,而您只能通过运行一个单独的 node.js 进程来获得其中一个。因此,您不能在同一过程中直接构建从 Java 到 Javascript 的桥梁。您必须创建一个 Javascript 进程,然后与该单独的进程进行通信。

    【讨论】:

      猜你喜欢
      • 2014-10-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多