3

我一直在玩 clojurescriptone - 整洁的项目 - 试图了解 clojurescript 的工作原理。我不清楚浏览器、浏览器 repl 和 http 服务器这三个组件是如何交互的。

我在我的开发环境中使用 emacs

为了更好地理解 ClojureScript(CS),我决定尝试移植 clojurescriptone(CS1) 以使用 lein2 并使用 nrepl 作为我的 repl。该端口确实有效,我能够让 CS1 环境运行并与浏览器交互。我更喜欢 - 现在 - 不要启动一个劣质的 lisp 进程来使用 CS repl,而是在 clojure repl 中运行 CS repl。唯一的缺点是 CS repl 从标准输入获取输入,而 emacs 提示我使用标准输入。为了解决这个问题,我试图替换 CS1 中的一些代码,以便它从 Chas Emerick 编写的 piggieback 库中启动 repl。

在这样做的过程中,我已经达到了我对这些组件如何交互的理解的极限。显然,从我可以收集到的浏览器 repl 是一个侦听某个端口的“服务器”;虽然一直以来我都认为是某种客户端向 http 服务器发送请求并在评估结果后将输出重定向到浏览器(如何??)。现在我不确定情况是否如此。

这些组件如何交互?

抱歉解释太长了!!!

席德

4

1 回答 1

3

浏览器 REPL 有一个服务器端和一个客户端。服务器端在您的 Clojure 主进程中运行;ClojureScript REPL 它自己实际上是在 bREPL服务器中运行的。

bREPL客户端在浏览器中的 ClojureScript 中运行,并保持与服务器的长轮询 AJAX 连接。每当您在服务器上的 REPL 中输入内容时,它都会被编译为 JavaScript 并通过长轮询机制发送到客户端,在客户端中对其进行评估并发送回响应。

服务器的 ClojureScript REPL 在您的普通 Clojure REPL 的“内部”运行——其工作原理的确切机制取决于您使用的 REPL。nREPL 本身运行在客户端-服务器架构上,因此很容易看出事情是如何变得混乱的。

这些帮助有用?

于 2012-09-25T15:10:06.707 回答