Джаластическая связь между узлами
У меня есть Perl-программа, которая динамически генерирует изображения на основе заданной ширины. Мне нужно создать веб-сервис, который принимает размеры изображения от клиента и передает его в программу Perl, чтобы создать изображение, а затем отправить его обратно клиенту.
Теперь в облаке Jelastic я создал 3 узла:
- Узел 1: для кота (содержит код Java).
- Узел 2: для MySql (содержит базу данных).
- Узел 3: для Centos VPS (содержит код perl).
Мои вопросы:
Я правильно делаю?? если нет, то каков наилучший способ сделать мою программу?
Как я могу вызвать Perl-код (в узле 3) из службы Java (в узле 1) и вернуть сгенерированное изображение обратно клиенту.
1 ответ
Звучит разумный дизайн. Вы бы написали что-то вроде этого.
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 exeutable, или вы можете вызвать оболочку, чтобы заставить ее искать путь, используя
runt.exec( '/bin/bash', '-c', 'perl', '/path/to/myperl.pl', Integer.toString(width) );
Что касается того, как вернуть изображение обратно клиенту, вы не много говорите о том, как работает ваша Perl-программа, но либо говорите ему, куда записать файл, либо он сам решает и сообщает, куда его потом поместить
Если это первое, то вы, вероятно, передаете путь в командной строке, поэтому вам просто нужно расширить вызов до runt.exec
выше, чтобы передать другой параметр
Если это последнее, то, вероятно, программа печатает в STDOUT, куда она поместила новый файл, и вам нужно прочитать этот поток из вашего Java-кода для сбора информации. Это было бы похоже на это вместо proc.waitFor()
вызов
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
}