gpt4 book ai didi

clojure - 从终端向 Clojure 应用程序发送消息

转载 作者:行者123 更新时间:2023-12-02 06:49:34 24 4
gpt4 key购买 nike

如何向正在运行的 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 独有的。

关于clojure - 从终端向 Clojure 应用程序发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48209370/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com