Spring webflux SpringWebFlux与标准SpringBoot、TomCat、Jetty、Servlet3.1和Netty相比有哪些优势?

Spring webflux SpringWebFlux与标准SpringBoot、TomCat、Jetty、Servlet3.1和Netty相比有哪些优势?,spring-webflux,Spring Webflux,据我所知,有机会消耗更少的RAM和CPU 据我所知,Servlet3.1也已经在使用NIO了。在速度和/或加载方面有什么优势吗?这是一个相当广泛的话题,但让我们先把事情弄清楚 SpringMVC是一个基于ServletAPI的web框架;这样的应用程序可以部署在Servlet容器(如Jetty、Tomcat、Undertow)上 SpringWebFlux是一个基于反应式HTTP层的反应式web框架;这类应用程序可以部署在Netty或Undertow(使用本机适配器)或Jetty/Tomcat

据我所知,有机会消耗更少的RAM和CPU


据我所知,Servlet3.1也已经在使用NIO了。在速度和/或加载方面有什么优势吗?

这是一个相当广泛的话题,但让我们先把事情弄清楚

  • SpringMVC是一个基于ServletAPI的web框架;这样的应用程序可以部署在Servlet容器(如Jetty、Tomcat、Undertow)上
  • SpringWebFlux是一个基于反应式HTTP层的反应式web框架;这类应用程序可以部署在Netty或Undertow(使用本机适配器)或Jetty/Tomcat/任何Servlet3.1容器上(感谢Servlet3.1适配器)
  • SpringBoot应用程序可以使用SpringMVC或SpringWebFlux
SpringFramework5.0提供了一个新的框架。简而言之,对于处理大量延迟和并发的工作负载,这种方法有利于提高效率和可伸缩性


事实上,Servlet3.1异步I/O也解决了这些问题,但使用该API需要避免使用ServletAPI中阻塞的其他部分。这就是为什么SpringWebFlux没有在其编程模型中公开ServletAPI,而是利用Servlet适配器的原因。

谢谢您的回答。我还有一个问题:Servlet3.1是否具有与Netty相同的速度/响应时间/连接效率?毕竟,它们都使用NIO。事实上没有太大的区别,但这可能取决于您的用例。此外,在http客户端突然断开连接等并不少见的用例中,它们的行为也会有所不同。