2012-02-02 28 views
8

qualcuno ha sperimentato su come eseguire il modulo node.js o uno script da java o groovy?Esegui node-js da Java o Groovy

Potrebbe groove command.execute() farlo? In tal caso, si comporterebbe allo stesso modo su diversi sistemi operativi.

Vale la pena notare che idealmente, mi piacerebbe che node.js non dipendesse dall'installazione nel sistema e dal comando del nodo, ma ma impacchettato via ./configure e make, in modo che potesse essere usato come una libreria. .

Grazie

Edit: Fondamentalmente voglio questo in modo che ho potuto utilizzare il modulo Node.js, un framework lato client (caffè-script, giada, ecc stilo e questo è bundeled in Brunch), come Plugin Grails. In modo che il plug-in sia autonomo senza dipendenze del sistema.

+2

Non capisco perché le persone vogliono eseguire nodejs da java, .net? Prima leggi cosa fa il nodojs e risolve. – Prashanth

+1

Non so a quali altre persone si stia riferendo, ma in questo caso, Jor vuole coerente node.js su più piattaforme. Ho indovinato questo dalla lettura della sua domanda. – Nicholas

+0

Supponiamo che tu abbia una grande app Grails e una grande libreria nodejs di cui hai bisogno, entrambi con anni di lavoro che implementano varie API. Quindi è necessario eseguire nodejs da java. –

risposta

9

È possibile trovare ciò che si sta cercando in vert.x.

Dal sito:

Che cosa è vert.x?

La struttura di applicazione asincrona poliglotta di nuova generazione. (Precedentemente noto come node.x)

  • Corse sulla JVM.
  • Abbraccia i bit buoni di framework basati su eventi come node.js, quindi aggiunge alcuni bit ancora più succosi.
  • Tutto è non bloccante.
  • Polyglot. vert.x sarà utilizzabile da più lingue: Ruby, Groovy, Java, JavaScript, Python, Clojure, Scala. Attualmente supportiamo Java e Ruby e abbiamo il supporto parziale di Groovy. Scrivi il tuo codice nella lingua che scegli. Sfrutta la potenza di vert.x da quella lingua.
  • Va con gli sviluppi recenti con InvokeDynamic in Java 7 e le scommesse sulla JVM sono il runtime futuro premier per le lingue dinamiche.
  • Consente di creare server o client di rete in modo incredibilmente semplice.
  • Vera scalabilità. A differenza di altri ben noti framework basati su eventi, è possibile avere più di un ciclo di eventi per processo. Non più girando su 32 istanze solo per utilizzare i core sul tuo server.
  • Modello di concorrenza incredibilmente semplice. Scrivi il tuo codice come thread singolo ma guardalo scalare su più core. Non c'è bisogno di preoccuparsi delle condizioni di gara o delle serrature.
  • Comprende più protocolli di rete, inclusi: TCP, SSL, HTTP, HTTPS, Websockets.
  • Servono in modo efficiente file statici dal filesystem ignorando del tutto lo spazio utente.
  • Semplice instradamento Web basato su risorse in stile Sinatra/Express.
  • Bus eventi distribuiti. istanze multiple vert.x lavorano insieme senza soluzione di continuità per fornire un bus evento distribuito
  • SockJS supportano
3

Sì, si può solo Command.Execute()

un modo più elegante potrebbe essere quello di costruire un piccolo nodo .js server che accetta solo richieste da localhost.Ma questo fantastico funziona:

def file = new File("script.js") 
    def fileStream = file.newOutputStream() 
    fileStream << "console.log('hello from node.js');" 
    fileStream.close() 

    def command = "/usr/local/bin/node " + file.absolutePath 
    def proc = command.execute() 
    proc.waitFor() 

    println "return code: ${ proc.exitValue()}" 
    println "stderr: ${proc.err.text}" 
    println "stdout: ${proc.in.text}"