gpt4 book ai didi

clojure - Clojure 和 Clojurescript 之间共享原子?

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

假设我有一个名为 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 原子的值写入实际文件 (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 的值在客户端和服务器之间双向共享。这有可能吗,还是我只是在做梦?

最佳答案

当然,只需向其余 API 发出请求,在 EDN format 中发送数据即可,瞧!如果您想避免轮询,请考虑在 Nginx 实例后面运行 Jetty 或 Tomcat 以利用 Nginx HTTP Push Module 。我有一个有点蜘蛛网的例子 here (这是 ClojureScript 之前的版本,所以我用纯 JS 编写了客户端)。还有gifsockets .

关于clojure - Clojure 和 Clojurescript 之间共享原子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12946276/

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