首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节间弹性交流

节间弹性交流
EN

Stack Overflow用户
提问于 2016-05-22 08:15:57
回答 1查看 111关注 0票数 0

我有一个perl程序,它根据给定的宽度动态生成图像。我需要创建从客户端获取图像维的web服务,并将其传递给perl程序以创建映像,然后将其发送回客户端。

现在,在J弹性云上,我创建了3个节点:

  • 节点1: for tomcat (包含java代码)。
  • 节点2:对于MySql (包含数据库)。
  • 节点3:对于Centos (包含perl代码)。

我的问题:

  1. 我在做正确的事??如果不是的话,做我的节目最好的方法是什么?
  2. 如何从java服务(节点1)调用perl代码(在节点3中),并将生成的映像返回给客户端。
EN

回答 1

Stack Overflow用户

发布于 2016-05-22 09:05:45

听起来是个合理的设计。你会写这样的东西。

代码语言:javascript
复制
import java.lang.Runtime;

int width = 99;

try {
    Runtime runt = Runtime.getRuntime()
    Process proc = runt.exec('/usr/bin/perl', '/path/to/myperl.pl', Integer.toString(width));
    proc.waitFor();
}
catch (Exception ioe) {
    ioe.printStackTrace();
}

当然,您必须将/usr/bin/perl调整到您自己的perl可解释性的实际位置,或者您可以调用shell来获取它来搜索路径。

代码语言:javascript
复制
runt.exec( '/bin/bash', '-c', 'perl', '/path/to/myperl.pl', Integer.toString(width) );

至于如何将映像返回给客户端,您不太了解Perl程序是如何工作的,但是要么告诉它在哪里编写文件,要么由它自己决定,然后告诉您将其放在何处

如果是前者,那么您可能会在命令行上传递路径,因此您只需将上面的调用扩展到runt.exec,以传递另一个参数

如果是后者,那么程序大概会打印到STDOUT,在那里它放置了新的文件,您需要从Java代码中读取该流来收集信息。与proc.waitFor()调用相比,应该是这样的

代码语言:javascript
复制
import java.io.*;

BufferedReader inp = new BufferedReader(
    new InputStreamReader(proc.getInputStream())
);

while ( ( line = inp.readLine() ) != null ) {
    // Process output of Perl code to get file location
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37372027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档