动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

Web Flux和Spring MVC区别详解

08-24 17:23 135浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Spring MVC大家都不陌生,但是Web Flux知道的人就不多了,Web Flux即Spring WebFlux是Spring Framework 5.0中引入的新的反应式Web框架。本文就来详细的讲一讲Web Flux和Spring MVC区别

1.首先我们从内容和定义上来看看Web Flux和Spring MVC区别:

Web Flux是一个异步非阻塞的Web框架,它能够充分利用多核CPU的硬件资源去处理大量的并发请求优势:内部使用的是响应式编程,以Reactor库为基础,基于异步和事件驱动。并且可以在诸如Netty,Undertow和Servlet 3.1+容器的服务器上运行。可以让我们在不扩充硬件资源的前提下,提升系统的吞吐量和伸缩性。

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等等。

2.系统上来看看Web Flux和Spring MVC区别

Spring MVC

构建于 Servlet API 之上

同步阻塞 I/O 模型, 认为应用汇阻塞当前线程,所以一个 Request 对应一个 Thread,需要有一个含有大量线程的线程池

Spring WebFlux

构建于 Reactive Streams Adapters 之上

异步非阻塞 I/O 模型,认为应用不会阻塞当前线程,所以只是需要一个包含少数固定线程数的线程池 (event loop workers) 来处理请求。

3.WebFlux 并不是 Spring MVC 替代,它主要应用还是在异步非阻塞编程模型上。如果你的项目并不是该模型 或者你的应用目前本身已经足够应付当前情况,是不需要去切换成 WebFlux 的。虽然 WebFlux 也可以被运行在 Servlet 容器上(需是 Servlet 3.1+ 以上的容器),但是 WebFlux 主要还是应用在异步非阻塞编程模型,而 Spring MVC 是同步阻塞的,如果你目前在 Spring MVC 框架中大量使用非同步方案,那么,WebFlux 才是你想要的,否则,使用 Spring MVC 才是你的首选。

4.WebFlux 特别适合在IO密集型的服务中,比如微服务网关。

这里要介绍一下,IO 密集型包括:磁盘IO密集型, 网络IO密集型,微服务网关就属于网络 IO 密集型,使用异步非阻塞式编程模型,能够显著地提升网关对下游服务转发的吞吐量。

在微服务架构中,Spring MVC 和 WebFlux 可以混合使用,比如已经提到的,对于那些 IO 密集型服务(如网关),我们就可以使用 WebFlux 来实现。

5.下面的两者的交叉图便于我们理解Web Flux和Spring MVC区别。

 

Spring MVC 因为是使用的同步阻塞式,更方便开发人员编写功能代码,Debug 测试等,一般来说,如果Spring MVC能够满足的场景,就尽量不要用 WebFlux;

WebFlux 默认情况下使用 Netty 作为服务器;

主流的数据库基本都可以了,目前已有项目支持mysql,https://r2dbc.io/    (要谨慎使用,毕竟r2dbc也还是实验性的);

Spring MVC是通过DispatcherServlet实现分发,而WebFlux是DispatcherHandler,它实现了WebHandler接口:

①:ServerWebExchange 对象中放置每一次 HTTP 请求响应信息,包括参数等;

②:判断整个接口映射 mappings 集合是否为空,空则创建一个 Not Found 的错误;

③:根据具体的请求地址获取对应的 handlerMapping;

④:调用具体业务方法,也就是我们定义的接口方法;

⑤:处理返回的结果;

虽然本文是为了向大家介绍Web Flux和Spring MVC区别,但是在本站的Spring MVC视频教程中我们对Spring MVC的讲解已经很透彻了,本文更多的还是对Web Flux的一些介绍和讲解,本身这也是知识的积累过程,我们又学习了一种新的Web框架,意味着我们在开发项目时有更多的选择!

0人推荐
共同学习,写下你的评论
0条评论
爱读书的姑娘
程序员爱读书的姑娘

12篇文章贡献56281字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消