【问题标题】:Clojure: What is the default server for the luminus framework?Clojure:luminus 框架的默认服务器是什么?
【发布时间】:2020-07-15 07:35:24
【问题描述】:

截至目前(2018 年),当您使用默认设置设置 luminus 模板项目时,使用的 http/tcp 服务器是什么?

我读到 luminus 使用 immutant,但是,immutant 是其他东西的集合。而且我还读到 immutant 中使用的底层服务器处于低潮状态。

我是否正确假设默认服务器处于低调状态?如果是这样,默认设置对于非阻塞 IO 的执行情况如何?该服务器是否提供像 nginx/nodejs 这样的非阻塞事件循环架构?

【问题讨论】:

    标签: http clojure luminus


    【解决方案1】:

    Immutant 使用 Undertow 作为其 Web 服务器是正确的。

    Undertow 使用非阻塞 IO 线程(通常每个 CPU 内核一个)并且还管理一个工作线程池。引用他们的documentation

    XNIO worker 管理 IO 线程和一个线程池 可用于阻塞任务。一般来说,非阻塞处理程序将 从一个 IO 线程运行,同时阻塞诸如 Servlet 之类的任务 调用将被分派到工作线程池。

    IO 线程循环运行。这个循环做了三件事:

    • 运行任何已被 IO 线程安排执行的任务
    • 运行所有已超时的计划任务
    • 调用 Selector.select(),然后为选中的对象调用任何回调 键

    这种架构与节点架构的明显区别在于工作线程池的分离,允许阻塞。

    恐怕我无法比较实际的性能,这将是特定于用例的。

    【讨论】:

      【解决方案2】:

      截至 2019 年年中,默认 HTTP 服务器是 Jetty 通过luminus-jetty 包。这是在这里编码的,其他支持的服务器以默认命名:

      (set-feature "+jetty" #{"+aleph" "+http-kit" "+immutant" "+war"})
      

      来源:Luminus

      【讨论】:

        【解决方案3】:

        貌似默认使用immutant,不过你可以选择alternative servers

        【讨论】:

          【解决方案4】:

          截至 2020 年年中,Liminus 已切换到 ring-undertow 作为默认服务器。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-04-17
            • 2014-10-12
            • 1970-01-01
            • 1970-01-01
            • 2021-10-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多