【问题标题】:Interactions between browser Repl, browser, http server in clojurescriptclojurescript中浏览器Repl、浏览器、http服务器之间的交互
【发布时间】:2012-09-25 12:39:07
【问题描述】:

我一直在玩 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 服务器发送请求并在评估结果后将输出重定向到浏览器(如何??)。现在我不确定情况是否如此。

这些组件如何交互?

抱歉解释太长了!!!

席德

【问题讨论】:

    标签: emacs clojure clojurescript


    【解决方案1】:

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

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

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

    这有帮助吗?

    【讨论】:

    • 如果我理解正确的话……clojurescript repl 的服务器组件在 nrepl repl 的客户端组件中运行。 clojurescript 浏览器 repl 的客户端组件在浏览器中运行。因此,当我启动 clojurescript 浏览器 repl 时,我实际上是在启动 clojurescript repl 服务器组件,当浏览器连接到此 repl 时,它会加载客户端组件的代码。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多