我一直在玩clojurescriptone - 整洁的项目 - 试图了解clojurescript的工作原理。我不清楚三个组件,浏览器,浏览器repl和http服务器是如何交互的。
我将emacs用于我的开发环境
为了更好地理解ClojureScript(CS),我决定尝试将clojurescriptone(CS1)移植到使用lein2并使用nrepl作为我的repl。端口确实有效,我能够让CS1环境继续运行并与浏览器进行交互。我更喜欢 - 现在 - 不要开始使用较差的lisp进程来处理CS repl,而是在clojure repl中运行CS repl。唯一的缺点是CS repl从stdin获取输入,emacs提示我使用stdin。为了解决这个问题,我试图替换CS1中的一些代码,以便它从Chas Emerick编写的piggieback库中启动repl。
在这样做的过程中,我已经达到了对这些组件如何相互作用的理解的极限。显然,从我可以收集的内容来看,浏览器repl是一个监听某个端口的“服务器”;虽然我一直认为是某种客户端在评估结果后向http服务器发送请求并将输出重定向到浏览器(如何??)。现在我不确定是不是这样。
这些组件如何互动?
很抱歉很长的解释!!!
西特
答案 0 :(得分:3)
浏览器REPL有一个服务器端和一个客户端。服务器端在主Clojure进程中运行; ClojureScript REPL它实际上是在bREPL 服务器中运行。
bREPL 客户端在浏览器中的ClojureScript中运行,并维护与服务器的长轮询AJAX连接。无论何时在服务器上的REPL中输入内容,它都会被编译为JavaScript并通过long-poll机制发送到客户端,在客户端中评估它发回的响应。
服务器的ClojureScript REPL在正常的Clojure REPL“内部”运行 - 其工作方式的确切机制取决于您正在使用的REPL。 nREPL本身运行在客户端 - 服务器架构上,因此很容易看出事情会如何变得混乱。
这有帮助吗?