Spring5以后,新增了Webflux,异步非阻塞Web框架。
在SpringBoot第三篇的时候,简单介绍过WebFlux。
本篇,将从更细的粒度上,更全面的介绍下WebFlux。
一、什么是WebFlux
WebFlux是脱离了传统阻塞式Servlet框架,所以,它不同于Spring MVC。
WebFlux是 Spring 5 的一个新模块。包含了响应式 HTTP、服务器推送事件和 WebSocket 的客户端和服务器端支持。
官方架构图
Webflux用少量的线程处理request和response io操作,这些线程称为Loop线程,而业务交给响应式编程框架处理,响应式编程是非常灵活的,用户可以将业务中阻塞的操作提交到响应式框架的work线程中执行,而不阻塞的操作依然可以在Loop线程中进行处理,大大提高了Loop线程的利用率。
虽然Spring WebFlux不同于Spring MVC,但是Spring考虑到让我们更快的上手,它们的注解基本都是一样的。
二、SpringBoot使用WebMVC和WebFlux的差别
SpringBoot WebMVC应用,都需要依赖spring-boot-starter-web ,内部包含Tomcat。
使用WebFlux不需要依赖spring-boot-starter-web 只依赖 spring-boot-starter-webflux 即可。
它的内部使用Netty来运行应用,Netty是基于异步和事件驱动的。
依赖图如下:
三、WebFlux主要功能介绍和对比
1、Maven
依赖清单对比:
- WebMVC(传统Servlet)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- WebFlux(异步非阻塞)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
为了方便区分,在下面将使用servlet-web代替WebMVC,webflux-web代替WebFlux。
2、编码清单对比: