在Clojure和Clojurescript之间共享一个原子(atom)?

4
假设我有一个叫做 main 的 Clojurescript 命名空间,其中有一个原子(atom)叫做 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应用程序中获取(使用swap!或reset!)并设置Clojurescript原子的值。我想知道是否有一种方法可以在我的Clojurescript项目中将原子的值与正在运行的Clojure应用程序之间建立连接。也许Clojurescript客户端连接到指定端口并将结果发送到等待该端口的某个Clojure服务器。简单地说,我想知道是否可能使运行的服务器应用程序共享state客户端原子的值。
你可能会问为什么?嗯,我想,每当在运行的Clojurescript应用程序中修改state时,将state原子的值写入实际文件(state.clj)会很好。这样,我可以始终查看state当前的值。我可以使用类似于emacs (global-auto-revert-mode t)的东西来确保state.clj缓冲区始终相对较新。这有点像调试器。
除此之外,我真正的愿望是使运行的Clojure应用程序周期性地轮询state.clj本身。当服务器检测到我修改了state.clj时,它将接受修改为Clojurescript state原子的新值。然后,它将执行类似于Clojurescript repl所做的操作,如下面的伪代码所示:
(send-to-client-for-evaluation
  (compile-into-js 
    (reset! 
      main.state 
      the-read-string-value-of-the-content-of-state.clj)))

基本上,我希望服务器拥有类似于客户端和服务器之间共享的原子性的东西。我希望state的值在客户端和服务器之间实现双向共享。这是否有可能实现,还是只是我自己的幻想?

1个回答

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接