【问题标题】:What is the lifecycle of this ClojureScript REPL?这个 ClojureScript REPL 的生命周期是什么?
【发布时间】:2013-03-06 12:30:39
【问题描述】:

我正在尝试了解 ClojureScript 的生命周期及其在 repl 中的评估。

据我所知,当我使用以下命令 lein trampoline cljsbuild repl-listen 启动 repl 时,然后使用以下命令 (repl/connect "http://localhost:9000/repl") 收听时 -

  1. 它创建一个侦听端口 9000 的 TCP 服务器。
  2. 浏览器会建立某种轮询,在其中轮询任何更改。
  3. 当我在 repl 中执行任何代码时,这会更改已编译的 *.js 文件。
  4. 然后将此 *.js 文件提供给浏览器。
  5. 浏览器将其当前的 *.js 文件替换为新文件。
  6. 因此,repl 中执行的代码所导致的更改会显示在浏览器中。

我正在尝试更好地验证和理解这一点。如果有人能详细说明这一点或指出我的链接可以更好地解释它,将不胜感激。

【问题讨论】:

    标签: clojure clojurescript


    【解决方案1】:

    严格来说,javascript 的执行环境不必是浏览器,尽管“大多数”用途是。

    对于基于浏览器的执行环境:

    1. 在端口 9000 上创建 HTTP 服务器
    2. 浏览器使用HTTP Long polling连接服务器,建立执行环境。 (这是一个 HTTP GEThttp://server:9000/repl
    3. 在 REPL 中执行代码时,clojurescript 被编译为 javascript,并且 javascript 在 HTTP 长轮询中作为“响应”(见下文)发送。 (请注意,这不是将 js 文件“提供给浏览器”,而只是相关的表单)
    4. javascript 表单在浏览器中进行评估。
    5. 浏览器中的 javascript 环境现已更新。

    遵循这一点的最简单方法是使用 google chrome 开发者工具中的网络监视器之类的东西来监视 http 流量。

    注意:在 HTTP 长轮询设置中,请求/响应之间存在无限混淆,这可能会有所帮助:

      [REPL]    -> [browser] travels via HTTP Response
      [browser] -> [REPL]    travels via HTTP Request.
    

    【讨论】:

    • 感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多