【问题标题】:Execute Java program server-side from a Node.js / Heroku app?从 Node.js / Heroku 应用程序执行 Java 程序服务器端?
【发布时间】:2013-01-12 01:12:50
【问题描述】:

我可以从 Heroku 上的 Node.js 应用程序调用 Java 程序吗?

我有一个 Node.js/Heroku 应用程序。但现在需要添加服务器端功能以在输入数据文件上运行算法并将数据输出为 JSON 格式。我已经有一个可以读取文件并运行算法的 Java 库,我很难(充其量)用纯 Node.js 重写它。

因此,可以编写一个命令行程序,该程序接受一个输入文件并将结果通过管道传输到标准输出,例如

java mytask.class -cp ./mylibrary.jar --in /tmp/file.in > output.json

是否可以从 Node.js 调用 Java 命令行程序?我知道可以将 Java 应用程序部署到 Heroku,但这里想从 Node.js 应用程序执行一点 Java。

【问题讨论】:

  • 在现有 Java 代码上添加 Web 服务并从 node.js 调用它可能不会那么脆弱
  • 啊哈,好点子,即使它是原生 Node.js,也可以将其分离出来。

标签: java node.js heroku


【解决方案1】:

您不特别想要thischild_process.exec() 吗?

Node 通过 child_process 模块。

可以通过孩子的 stdin、stdout 和 以完全非阻塞的方式进行 stderr。

请注意,您上面的示例命令不正确,因为您正在尝试通过管道传输到文件 (output.json)。管道仅在进程之间工作。子进程模块将允许您直接读取进程的标准输出,您不需要该文件(与输入流类似)

【讨论】:

  • 感谢您的快速回复!是的,调用 child_process.exec() 是理想的,并且直接返回更好。我不确定是否安装了java VM,是否可以运行我提供的类/库?
  • @user645715 我没有检查,但我认为安装 node.js 应用程序时没有安装 Java 运行时。你要么必须让你的 java 应用程序成为一个独立的可执行文件,用你的应用程序推送 Java 运行时,要么修改 buildpack 以包含一个 Java 运行时。
  • 长时间延迟跟进,Java 似乎默认安装在 Heroku Cedar 堆栈中,并且通过 shell 调用效果很好。
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2016-04-10
  • 1970-01-01
相关资源
最近更新 更多