2012-02-02 67 views
8

任何人都試過如何從java或groovy運行node.js模塊或腳本?從Java或Groovy運行node-js

可以groovy command.execute()嗎?如果是這樣,那麼它會在不同的操作系統中表現相同。

值得注意的是,理想情況下,我希望node.js不會依賴於系統和節點命令的安裝,而是通過./configure和make打包,以便它可以用作庫。 。

感謝

編輯:基本上,我想,這樣我可以用Node.js的模塊,客戶端框架(咖啡腳本,玉石,手寫筆等,這是在早午餐bundeled),作爲Grails插件。這樣該插件是獨立的,沒有系統依賴。

+2

我不明白爲什麼人們想要從java,.net運行nodejs?首先閱讀nodejs所做的並解決的問題。 – Prashanth 2012-02-02 20:57:47

+1

我不知道你指的是哪個人,但在這種情況下,Jor希望在多個平臺上保持一致的node.js。我從閱讀他的問題來解釋這一點。 – Nicholas 2012-02-03 17:40:38

+0

假設您有一個大型的Grails應用程序和一個您需要的大型nodejs庫 - 都需要多年的工作來實現各種API。然後你需要從java運行nodejs。 – 2012-11-27 17:50:27

回答

9

你可能在vert.x找到自己想要的東西。

從網站:

什麼是vert.x?

下一代polyglot異步應用框架。 (以前稱爲node.x)

  • 在JVM上運行。
  • 包含像node.js這樣的事件驅動框架的優點,然後添加一些甚至更多的juicier位。
  • 一切都是非阻塞的。
  • 多語種。 vert.x可用於多種語言:Ruby,Groovy,Java,JavaScript,Python,Clojure,Scala。目前我們支持Java和Ruby,並且支持部分Groovy。用您選擇的語言編寫代碼。利用該語言的vert.x的強大功能。
  • 隨着Java 7中InvokeDynamic的最新發展,JVM上的投注將成爲動態語言的未來總理運行時。
  • 使您能夠輕鬆創建網絡服務器或客戶端。
  • 真正的可擴展性。與其他衆所周知的事件驅動框架不同,每個進程可以有多個事件循環。爲了利用服務器上的核心,不再需要轉發32個實例。
  • 令人難以置信的簡單併發模型。將代碼編寫爲單線程,但要注意跨越多個內核。無需擔心競賽狀況或鎖定。
  • 瞭解開箱即用的多種網絡協議,包括:TCP,SSL,HTTP,HTTPS,Websockets。
  • 從文件系統中有效地提供靜態文件繞過用戶空間。
  • 簡單的基於Sinatra/Express風格的資源網絡路由。
  • 分佈式事件總線。多vert.x情況下無縫協同工作,提供分佈式事件總線
  • SockJS支持
3

是的,你可以command.execute()

更優雅的方式可能是建立一個小的節點.js服務器只接受來自本地主機的請求。但這個時髦的作品:

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