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

5

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

我了解到luminus使用immutant,但是immutant本身是一个集合。另外我也注意到在immutant中使用的底层服务器是undertow。

如果我假设默认服务器是undertow,那么它相对于非阻塞IO的性能如何?这个服务器是否提供类似nginx/nodejs的非阻塞事件循环架构?

4个回答

2
您说得对,Immutant使用Undertow作为其Web服务器。
Undertow使用非阻塞IO线程(通常每个CPU核心一个),并管理一个工作线程池。引用他们的文档
“XNIO工作线程管理IO线程和可用于阻塞任务的线程池。一般来说,非阻塞处理程序将在IO线程内运行,而阻塞任务(如Servlet调用)将被分派到工作线程池。”
IO线程在循环中运行。此循环执行三个操作:
- 运行任何已安排由IO线程执行的任务 - 运行任何已到达其超时时间的已安排任务 - 调用Selector.select(),然后调用所选键的任何回调函数
这种架构与节点架构之间的明显区别在于工作线程池的分离,允许其阻塞。
我恐怕无法比较实际的性能,因为这是针对具体用例的。

2
截至2020年中期,Liminus已将ring-undertow作为默认服务器。

2
截至2019年中期,默认的HTTP服务器是通过“luminus-jetty”包实现的Jetty。这里编码了它,其他支持的服务器以默认命名。
(set-feature "+jetty" #{"+aleph" "+http-kit" "+immutant" "+war"})

来源:Luminus


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接