2012-02-02 11 views
8

ktoś eksperymentował, jak uruchomić moduł node.js lub skrypt z java lub groovy?Uruchom węzeł-js z Java lub Groovy

Czy można zrobić polecenie groovy command.execute()? Jeśli tak, to zachowuje się tak samo w różnych opcjach.

Warto zauważyć, że najlepiej byłoby, gdyby plik node.js nie był zależny od instalacji w systemie i komendach węzła, ale został spakowany za pomocą ./configure i make, aby mógł być używany jako biblioteka. .

Dzięki

Edit: Zasadniczo chcę tego tak, że mogę użyć modułu node.js, ram po stronie klienta (coffeescript, Jade, rysik itd I to jest bundeled w brunch), jako Grails plugin. Tak, aby wtyczka była niezależna i nie zależała od systemu.

+2

Nie rozumiem, dlaczego ludzie chcą uruchamiać nodejs z java, .net? Najpierw przeczytaj, co robi i rozwiązuje nodejs. – Prashanth

+1

Nie wiem, do których osób się odwołujesz, ale w tym przypadku Jor chce mieć spójny plik node.js na wielu platformach. Rozumiałem to, czytając jego pytanie. – Nicholas

+0

Powiedz, że masz dużą aplikację Grails i dużą bibliotekę nodejs, której potrzebujesz - zarówno z latami pracy implementującej różne interfejsy API. Następnie musisz uruchomić nodejs z Java. –

Odpowiedz

9

Być może znajdziesz to, czego szukasz w vert.x.

Z witryny:

Co jest vert.x?

Szkielet aplikacji asynchronicznej nowej generacji poliglota. (Dawniej znany jako node.x)

  • Działa na maszynie JVM.
  • Obejmuje dobre fragmenty struktur sterowanych zdarzeniami, na przykład node.js, a następnie dodaje kilka nawet bardziej soczystych bitów.
  • Wszystko jest bez blokady.
  • Polyglot. vert.x będzie można używać z wielu języków: Ruby, Groovy, Java, JavaScript, Python, Clojure, Scala. Obecnie obsługujemy Javę i Ruby i mamy częściową obsługę Groovy. Napisz swój kod w wybranym języku. Wykorzystaj moc vert.x z tego języka.
  • Udostępnia najnowsze rozwiązania z InvokeDynamic w Javie 7 i stawia na JVM będącą przyszłym najważniejszym środowiskiem uruchomieniowym dla języków dynamicznych.
  • Umożliwia niezwykle łatwe tworzenie serwerów sieciowych lub klientów.
  • Prawdziwa skalowalność. W przeciwieństwie do innych dobrze znanych frameworków opartych na zdarzeniach, możesz mieć więcej niż jedną pętlę zdarzeń na proces. Koniec z wirowaniem 32 instancji tylko po to, aby wykorzystać rdzenie na serwerze.
  • Niesamowicie prosty model współbieżności. Napisz swój kod jako pojedynczy wątek, ale obserwuj jego skalę w wielu rdzeniach. Nie musisz się martwić warunkami wyścigu lub blokadami.
  • Rozumie wiele protokołów sieciowych, w tym: TCP, SSL, HTTP, HTTPS, Websockets.
  • Skutecznie udostępniaj statyczne pliki z systemu plików, omijając całkowicie przestrzeń użytkownika.
  • Proste routing internetowy oparty na zasobach w stylu Sinatra/Express.
  • Rozproszona magistrala zdarzeń. Wiele wystąpień vert.x bezproblemowo współpracować w celu zapewnienia rozproszonego autobusem zdarzeń
  • SockJS wspierać
3

Tak, można po prostu command.execute()

bardziej elegancki sposób może być zbudowanie małego węzła Serwer .js, który akceptuje tylko żądania z localhost.Ale to groovy działa:

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