2012-02-02 27 views
8

Alguien experimentó sobre cómo ejecutar el módulo node.js o un script de Java o Groovy?Ejecutar node-js desde Java o Groovy

¿Podría groovy command.execute() hacerlo? Si es así, ¿se comportaría de la misma manera en diferentes sistemas operativos?

Merece la pena señalar que, idealmente, me gustaría que node.js no dependa de la instalación en el sistema y el comando de nodo, sino que se empaquete mediante ./configure y make, para que pueda usarse como una biblioteca. .

Gracias

Editar: Básicamente quiero este modo que pudiera utilizar el módulo Node.js, un marco lado del cliente (coffeescript, jade, lápiz, etc. Y esto es en bundeled Almuerzo), como una Plugin de Grails De modo que el complemento es autónomo sin dependencia del sistema.

+2

No entiendo por qué la gente quiere ejecutar nodejs desde java, .net? Primero lea lo que nodejs hace y resuelve. – Prashanth

+1

No sé a qué otras personas se está refiriendo, pero en este caso, Jor quiere node.js consistente en múltiples plataformas. Adiviné esto por leer su pregunta. – Nicholas

+0

Digamos que tiene una gran aplicación Grails y una gran biblioteca de nodejs que necesita, ambas con años de trabajo implementando varias API. Entonces necesitas ejecutar nodejs desde java. –

Respuesta

9

Puede encontrar lo que está buscando en vert.x.

Desde el sitio:

¿Cuál es vert.x?

El marco de aplicación asíncrona políglota de próxima generación. (Anteriormente conocido como node.x)

  • Se ejecuta en la JVM.
  • Acepta los buenos fragmentos de marcos accionados por eventos como node.js y luego agrega algunos bits aún más jugosos.
  • Todo es sin bloqueo.
  • Polyglot. vert.x se podrá usar desde múltiples idiomas: Ruby, Groovy, Java, JavaScript, Python, Clojure, Scala. Actualmente admitimos Java y Ruby y tenemos soporte parcial de Groovy. Escribe tu código en el idioma que elijas. Aproveche el poder de vert.x desde ese idioma.
  • Va con los desarrollos recientes con InvokeDynamic en Java 7 y las apuestas sobre la JVM son el futuro runtime de idiomas dinámicos.
  • Le permite crear servidores de red o clientes de forma increíblemente fácil.
  • Escalabilidad verdadera. A diferencia de otros frameworks controlados por eventos conocidos, puede tener más de un bucle de evento por proceso. No más vueltas 32 instancias solo para utilizar los núcleos en su servidor.
  • Modelo de simultaneidad increíblemente simple. Escriba su código como un solo hilo, pero obsérvelo escalar a través de múltiples núcleos. No hay necesidad de preocuparse por las condiciones de carrera o bloqueos.
  • Entiende varios protocolos de red listos para usar, incluidos: TCP, SSL, HTTP, HTTPS, Websockets.
  • Sirva de manera eficiente los archivos estáticos del sistema de archivos pasando por alto el espacio de usuario.
  • Enrutamiento web sencillo basado en recursos de estilo Sinatra/Express.
  • Bus de eventos distribuidos. vert.x casos múltiples trabajar juntos sin problemas para proporcionar un bus de eventos distribuidos
  • SockJS apoyan
3

Sí, se puede simplemente command.execute()

una forma más elegante podría ser la construcción de un pequeño nódulo .js servidor que solo acepta solicitudes de localhost.Pero este groovy funciona:

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}"