我的解决方案到底是如何使用ProcessBuilder:
(defn create-process-builder [js-engine]
(doto (ProcessBuilder. ["node" (:path js-engine)
"--port-file" (:port-file js-engine)
"--default-ajax-host" (:default-ajax-host js-engine)
"--default-ajax-port" (str (:default-ajax-port js-engine))])
.inheritIO))
然后打电话给它。 inheritIO使其输出转到当前进程的输出,这有效地合并了stdout和stderr。
在该节点之上,NodeJS通过指定0作为端口号打开一个随机端口,并将其写入文件:
(let [app (-> (express)
(.use (cookie-parser))
(.get "/" (fn [_req res] (.send res "Universal JavaScript engine for server side pre-rendering single page applications.")))
(.get "/render" render))
server (.createServer http app)]
(.listen server 0 (fn [] (.writeFile fs (:port-file options) (.-port (.address server)))))))))
然后由Java端打开(等待它出现):
<