Sto scrivendo una libreria Java, in realtà, una libreria Clojure, ma per questa domanda, ciò che conta è che funzioni sulla JVM. Questa libreria ha bisogno di eseguire alcuni JavaScript. I tried with Nashorn ma incontro alcune limitazioni che potrebbero essere troppo difficili da superare. In alternativa, voglio provare NodeJS.Come devo eseguire NodeJS da un'applicazione Java?
Voglio che la mia libreria sia autonoma, non dipenda dal sistema che esegue NodeJS in modo indipendente e quindi richiede un particolare meccanismo di distribuzione per collocare le risorse Java e NodeJS nelle posizioni giuste per essere prelevate dai due diversi server di rete . Questo approccio, tuttavia, porta alcuni problemi.
Parlerò con NodeJS su HTTP ma non voglio che NodeJS apra una porta specifica. Voglio trovare uno inutilizzato casuale quindi non ci sono collisioni. Voglio anche controllare dove vanno i log di NodeJS, in modo da conservarli con il resto della mia applicazione. Infine, la mia app dovrebbe essere in grado di rilevare quando NodeJS si arresta in modo anomalo e rieseguirlo o segnalare un errore con le informazioni.
Qual è il modo migliore per avvicinarsi a questo? Esistono librerie Java per aiutare a gestire il processo figlio in questo modo? Qualunque cosa in particolare dovrei fare dal lato NodeJS (sono molto nuovo a NodeJS, non l'ho mai usato prima).
Suppongo che dipenda dal modo in cui la libreria è destinata a essere consumata, ma disporre di una libreria per avviare un processo server pesante per eseguire il proprio lavoro sembra un odore di codice. –
Hai sentito parlare di avatar? Ho anche avuto alcuni problemi in cui non ho potuto utilizzare alcuni moduli nodejs, ma l'avatar ha colmato il vuoto: https://strongloop.com/strongblog/how-to-run-node-js-on-the-jvm-with-avatar- js-and-loopback/ – Tiago
Solo per limitare un po 'la risposta ... quali sono le limitazioni che hai incontrato esattamente? Lo scripting lato server con nashorn aggiunge 6 ms alla media. tempo di risposta nel tuo post alla fine, quindi suppongo che la performance non sia una di quelle – cviejo