假设我有一个名为 main 的 Clojurescript 命名空间,其中有一个名为 state 的原子。
(ns main)
(atom state nil)
我编译我的 Clojurescript 应用程序,在服务器上运行它,启动 Clojurescript repl,然后使用浏览器连接到我的服务器。一切正常。
在 Clojurescript repl 中,我可以确认通常的
> (+ 1 1)
2
> (js/alert "Hey there") //shows an alert dialog with "Hey there" in the browser
nil
> main.state
(atom nil)
Clojurescript repl 非常适合开发。因此,显然我可以从 Clojure 应用程序中获取并(使用交换!或重置!)设置 Clojurescript 原子的值。我想知道是否有办法在我的 Clojurescript 项目中的原子值和正在运行的 Clojure 应用程序之间建立联系。或许 Clojurescript 客户端连接到指定端口并将结果发送到某个在该端口上等待的 Clojure 服务器。简单地说,我想知道是否有可能让正在运行的服务器应用程序共享state
客户端原子的值。
为什么,你可能会问?好吧,我认为只要在运行的 Clojurescript 应用程序中进行修改,将原子的值写入state
实际文件 (state.clj)会很好。state
这样,我总能看到 的当前值state
。我可以使用诸如 emacs 之类的东西(global-auto-revert-mode t)
来确保 state.clj 缓冲区始终是最新的。这有点像拥有一个调试器。
除此之外,我真正的愿望是让运行中的 Clojure 应用程序也定期轮询 state.clj 本身。当服务器检测到我修改了 state.clj 时,它会接受修改作为 Clojurescriptstate
原子的新值。然后它会做类似于 Clojurescript repl 所做的事情,如以下伪代码所示:
(send-to-client-for-evaluation
(compile-into-js
(reset!
main.state
the-read-string-value-of-the-content-of-state.clj)))
基本上,我希望服务器能够拥有类似于客户端和服务器之间共享原子的东西。我希望在state
客户端和服务器之间双向共享的值。这有可能吗,还是我只是在做梦?