如何向正在运行的 clojure 应用程序发送消息?例如,如果我有一个特定的变量或标志,我想在 uberjar 运行时从终端设置 - 这可能吗?
一种方法是读取应用程序中可以更改的文件,但这听起来很笨拙。
提前致谢!
实现此目的的一种方法是让您的应用程序托管 nREPL(网络 REPL)。然后,您可以连接到正在运行的应用程序的 nREPL 并进行操作。
例如,您的应用程序可能如下所示:
(ns sandbox.main
(:require [clojure.tools.nrepl.server :as serv]))
(def value (atom "Hey!"))
(defn -main []
(serv/start-server :port 7888)
(while true
(Thread/sleep 1000)
(prn @value)))
当它运行时,你可以lein repl :connect localhost:7888
来自其他地方并改变它value
atom:
user=> (in-ns 'sandbox.main)
#object[clojure.lang.Namespace 0x12b094cf "sandbox.main"]
sandbox.main=> (reset! value "Bye!")
"Bye!"
此时,您的应用程序的控制台输出应如下所示:
$ lein run
"Hey!"
"Hey!"
<...truncated...>
"Bye!"
"Bye!"
JVM 上的进程间通信有很多选项,但这种方法是 Clojure 独有的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)