【发布时间】:2017-12-31 08:20:20
【问题描述】:
我正在扩展一个用 Java 编写的服务器,我在 npm 上找到了一个非常好的 Node.js 包,它提供了一个我想从 Java 服务器调用的 API。
如何在它们之间建立“桥梁”?
【问题讨论】:
标签: javascript java node.js npm
我正在扩展一个用 Java 编写的服务器,我在 npm 上找到了一个非常好的 Node.js 包,它提供了一个我想从 Java 服务器调用的 API。
如何在它们之间建立“桥梁”?
【问题讨论】:
标签: javascript java node.js npm
我能想到的两个选项。
就个人而言,我更喜欢选项 #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
【讨论】:
您必须将 node.js 包包装在 node.js 程序中,并从该程序中提供一个 API,该 API 可以调用模块中的函数,可能通过 Web 服务器访问它(但任何进程间通信机制都可以工作)。然后,您必须先运行 node.js 程序,然后您的 Java 应用才能通过 node.js 服务器访问 node.js 功能。
运行 node.js Javascript 需要一个 node.js 解释器,而您只能通过运行一个单独的 node.js 进程来获得其中一个。因此,您不能在同一过程中直接构建从 Java 到 Javascript 的桥梁。您必须创建一个 Javascript 进程,然后与该单独的进程进行通信。
【讨论】: