Clojure:luminus 框架的默认服务器是什么?

MFa*_*ave 5 http clojure luminus

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

我读到 luminus 使用 immutant,但是,immutant 是其他东西的集合。我还读到,immutant 中使用的底层服务器是 undertow。

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

Ven*_*ius 2

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

Undertow 使用非阻塞 IO 线程(通常每个 CPU 核心一个),并且还管理一组工作线程。引用他们的文档

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

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

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

该架构与节点架构之间的明显区别是工作线程池的分离,允许阻塞。

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