如何从NodeJs调用Java程序

我有一个Java程序,我通常从命令行启动。 从命令行启动后,java程序会一直运行,直到按下Ctrl + C来退出或从另一个脚本中终止命令。 Java程序将输出错误消息(如果有的话)输出到控制台。

现在我想开发基于快递的NodeJsnetworking应用程序。 当用户点击一个链接(运行),点击处理程序将调用Ajax请求,这将导致后端NodeJs脚本运行此Java程序,如果它尚未运行。 另一个链接(停止)将使Ajax请求停止这个Java程序。

这可以如何实现? 回答示例代码将是最有用的。

还有一个要求:如果这个NodeJs Web应用程序被终止,那么由它启动的Java程序将继续运行,即它不依赖于NodeJs Web应用程序。

你可以开始一个subprocess,当你不需要的时候发送一个kill信号。

var spawn = require('child_process').spawn; var child = spawn('java', ['params1', 'param2']); 

要杀死应用程序,或者模拟一个CTRL + C ,发送一个信号:

 // control + c is an interrupt signal child.kill('SIGINT'); // or send from the main process process.kill(child.pid, 'SIGINT'); 

如果你要运行应用程序分离,你应该在某处写PID。 要运行分离的应用程序,请像这样运行它:

 var fs = require('fs'); var out = fs.openSync('./out.log', 'a'); var err = fs.openSync('./out.log', 'a'); var child = spawn('java', [], { detached: true, stdio: [ 'ignore', out, err ] }); child.unref(); 

这产生了一个subprocess,其I / Ostream不与父进程关联。