Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs clojurescript中浏览器Repl、浏览器和http服务器之间的交互_Emacs_Clojure_Clojurescript - Fatal编程技术网

Emacs clojurescript中浏览器Repl、浏览器和http服务器之间的交互

Emacs clojurescript中浏览器Repl、浏览器和http服务器之间的交互,emacs,clojure,clojurescript,Emacs,Clojure,Clojurescript,我一直在玩clojurescriptone——一个整洁的项目——试图了解Clojurescripte是如何工作的。我不清楚浏览器、浏览器repl和http服务器这三个组件是如何交互的 我将emacs用于我的开发环境 为了更好地理解ClojureScript(CS),我决定尝试移植clojurescriptone(CS1)来使用lein2,并使用nrepl作为我的repl。端口工作正常,我可以让CS1环境运行并与浏览器交互。目前,我不希望启动一个低级的lisp进程来处理CS repl,而是在clo

我一直在玩clojurescriptone——一个整洁的项目——试图了解Clojurescripte是如何工作的。我不清楚浏览器、浏览器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服务器发送请求,并在评估结果后将输出重定向到浏览器(how??)。现在我不确定情况是否如此

这些组件是如何相互作用的

对不起,解释得太长了


Sid

浏览器REPL具有服务器端和客户端。服务器端在主Clojure进程中运行;ClojureScript REPL-it-self实际上正在bREPL服务器中运行

bREPL客户端在浏览器中的ClojureScript中运行,并维护到服务器的长轮询AJAX连接。每当您在服务器上的REPL中键入某个内容时,它就会被编译为JavaScript,并通过长轮询机制发送到客户端,在客户端中对其进行评估,然后返回响应

服务器的ClojureScript REPL在正常Clojure REPL的“内部”运行——具体的运行机制取决于您使用的是哪个REPL。nREPL本身在客户机-服务器体系结构上运行,因此很容易看出事情是如何变得混乱的


这有帮助吗?

如果我理解正确……clojurescript repl的服务器组件在nrepl repl的客户端组件中运行。clojurescript浏览器repl的客户端组件在浏览器中运行。因此,当我启动clojurescript浏览器repl时,我实际上是在启动clojurescript repl服务器组件,当浏览器连接到此repl时,它将加载客户端组件的代码。对吗?