截至目前(2018 年),当您使用默认设置设置 luminus 模板项目时,使用的 http/tcp 服务器是什么?
我正在阅读 luminus 使用 immutant,但是,immutant 是其他东西的集合。而且我还读到 immutant 中使用的底层服务器处于低潮状态。
我是否正确假设默认服务器处于低级状态?如果是这样,默认设置对于非阻塞 IO 的执行情况如何?该服务器是否提供像 nginx/nodejs 这样的非阻塞事件循环架构?
Immutant 使用 Undertow 作为其 Web 服务器是正确的。
Undertow 使用非阻塞 IO 线程(通常每个 CPU 内核一个)并且还管理一个工作线程池。引用他们的文档:
XNIO worker 管理 IO 线程和可用于阻塞任务的线程池。通常,非阻塞处理程序将从 IO 线程运行,而阻塞任务(如 Servlet 调用)将被分派到工作线程池。
IO 线程循环运行。这个循环做了三件事:
- 运行已被 IO 线程调度执行的任何任务
- 运行任何已达到超时的计划任务
- 调用 Selector.select(),然后为选定的键调用任何回调
这种架构与节点架构的明显区别在于工作线程池的分离,允许阻塞。
恐怕我无法比较实际性能,这将是特定于用例的。
截至 2019 年年中,默认的 HTTP 服务器是Jetty通过luminus-jetty
包。这是在这里编码的,其他支持的服务器以默认命名:
(set-feature "+jetty" #{"+aleph" "+http-kit" "+immutant" "+war"})
资料来源:Luminus。
看起来它默认使用 immutant,但您可以选择替代服务器。
截至 2020 年年中,Liminus 已切换到ring-undertow作为默认服务器。