Я пишу библиотеку Java, на самом деле, библиотеку Clojure, но для этого вопроса важно, что она работает на JVM. Эта библиотека должна выполнить некоторый JavaScript. I tried with Nashorn, но я сталкиваюсь с некоторыми ограничениями, которые могут быть слишком сложными для преодоления. В качестве альтернативы, я хочу попробовать NodeJS.Как запустить NodeJS из приложения Java?
Я хочу, чтобы моя библиотека была автономной, чтобы не зависать от системы, выполняющей NodeJS самостоятельно, и, следовательно, требуя, чтобы определенный механизм развертывания помещал артефакты Java и NodeJS в нужные места, которые должны были быть захвачены двумя разными сетевыми серверами , Однако этот подход вызывает некоторые проблемы.
Я буду говорить с NodeJS по HTTP, но я не хочу, чтобы NodeJS открывал определенный порт. Я хочу найти случайный неиспользованный, чтобы не было столкновений. Я также хочу контролировать, где идут журналы из NodeJS, чтобы сохранить их с остальной частью моего приложения. Наконец, мое приложение должно иметь возможность обнаруживать, когда NodeJS разбился и повторно запустить его или сообщить об ошибке с информацией.
Каков наилучший способ приблизиться к этому? Существуют ли какие-либо библиотеки Java, чтобы помочь управлять дочерним процессом таким образом? Что-нибудь, в частности, я должен делать со стороны NodeJS (я очень новичок в NodeJS, я никогда не использовал его раньше).
Я полагаю, это зависит от того, как ваша библиотека предназначена для потребления, но с запуском библиотеки для тяжелого серверного процесса для выполнения своей работы кажется запахом кода. –
Вы слышали об аватаре? У меня также были некоторые проблемы, когда я не мог использовать некоторые модули nodejs, но аватар заполнил пробел: https://strongloop.com/strongblog/how-to-run-node-js-on-the-jvm-with-avatar- js-and-loopback/ – Tiago
Как раз немного сузить ответ ... каковы ограничения, с которыми вы столкнулись в точности? Сценарий на стороне сервера с nashorn добавляет 6ms к avg. время ответа в вашем сообщении в конце, поэтому я думаю, что производительность не одна из них – cviejo