Clojure:luminus 框架的默认服务器是什么?
Clojure: What is the default server for the luminus framework?
截至目前(2018 年),当您使用默认设置设置 luminus 模板项目时,使用的 http/tcp 服务器是什么?
我读到 luminus 使用 immutant,但是,immutant 是其他东西的集合。而且我还读到在 immutant 中使用的底层服务器是 undertow。
我假设默认服务器是 undertow 是否正确?如果是这样,默认设置如何执行非阻塞 IO?该服务器是否提供像 nginx/nodejs 这样的非阻塞事件循环架构?
貌似默认使用immutant,不过你可以选择alternative servers。
你说得对,Immutant 使用 Undertow 作为它的网络服务器。
Undertow 使用非阻塞 IO 线程(通常每个 CPU 核心一个)并且还管理工作线程池。引用他们的 documentation:
The XNIO worker manages both the IO threads, and a thread pool that
can be used for blocking tasks. In general non-blocking handlers will
run from withing an IO thread, while blocking tasks such as Servlet
invocations will be dispatched to the worker thread pool.
IO threads run in a loop. This loop does three things:
- Run any tasks that have been scheduled for execution by the IO thread
- Run any scheduled tasks that that have hit their timeout
- Call Selector.select(), and then invoke any callbacks for selected
keys
此架构与节点架构之间的明显区别是工作线程池的分离,允许阻塞。
恐怕我不能说比较实际的性能,这将是特定于用例的。
截至 2019 年年中,默认 HTTP 服务器是 Jetty 通过 luminus-jetty
包。这是在这里编码的,其他支持的服务器以默认命名:
(set-feature "+jetty" #{"+aleph" "+http-kit" "+immutant" "+war"})
来源:Luminus.
截至 2020 年年中,Liminus 已切换到 ring-undertow 作为默认服务器。
截至目前(2018 年),当您使用默认设置设置 luminus 模板项目时,使用的 http/tcp 服务器是什么?
我读到 luminus 使用 immutant,但是,immutant 是其他东西的集合。而且我还读到在 immutant 中使用的底层服务器是 undertow。
我假设默认服务器是 undertow 是否正确?如果是这样,默认设置如何执行非阻塞 IO?该服务器是否提供像 nginx/nodejs 这样的非阻塞事件循环架构?
貌似默认使用immutant,不过你可以选择alternative servers。
你说得对,Immutant 使用 Undertow 作为它的网络服务器。
Undertow 使用非阻塞 IO 线程(通常每个 CPU 核心一个)并且还管理工作线程池。引用他们的 documentation:
The XNIO worker manages both the IO threads, and a thread pool that can be used for blocking tasks. In general non-blocking handlers will run from withing an IO thread, while blocking tasks such as Servlet invocations will be dispatched to the worker thread pool.
IO threads run in a loop. This loop does three things:
- Run any tasks that have been scheduled for execution by the IO thread
- Run any scheduled tasks that that have hit their timeout
- Call Selector.select(), and then invoke any callbacks for selected keys
此架构与节点架构之间的明显区别是工作线程池的分离,允许阻塞。
恐怕我不能说比较实际的性能,这将是特定于用例的。
截至 2019 年年中,默认 HTTP 服务器是 Jetty 通过 luminus-jetty
包。这是在这里编码的,其他支持的服务器以默认命名:
(set-feature "+jetty" #{"+aleph" "+http-kit" "+immutant" "+war"})
来源:Luminus.
截至 2020 年年中,Liminus 已切换到 ring-undertow 作为默认服务器。