哪个企业做网站,软件开发文档国家标准,网站后台管理方便吗,公司网站建设要求书Spring WebFlux
Spring WebFlux 简称 WebFlux #xff0c;是 spring5.0 新引入的一个框架。 SpringBoot 同样为 WebFlux 提供了自动配置。 Spring WebFlux 和 Spring MVC 是属于竞争关系#xff0c;都是框架。在一个项目中两个也可以同时存在。
SpringMVC 是基于 Servlet A…Spring WebFlux
Spring WebFlux 简称 WebFlux 是 spring5.0 新引入的一个框架。 SpringBoot 同样为 WebFlux 提供了自动配置。 Spring WebFlux 和 Spring MVC 是属于竞争关系都是框架。在一个项目中两个也可以同时存在。
SpringMVC 是基于 Servlet API 的 是属于同步的框架就是有请求过来SpringMVC 去获取请求数据的时候如果这条数据没有读取到那么这条读取数据的线程就一直被阻塞的意味着得专门有一条线程来处理每个请求就是客户端每发来一个请求服务器这边就得分配一条线程去处理请求。因此在高并发的时候SpringMVC是会存在一些限制的。
WebFlux 是基于反应式的 API 脱离了 Servlet API 反应式的 API 是一个异步的不需要为每个请求生成单独的线程去处理。
Spring WebFlux 是集成了 Reactor框架 / 基于Reactor框架 Spring WebFlux和Reactor底层默认使用 Netty 作为Web服务器
★ Reactor框架反应式框架
Reactor框架采用Mono和Flux两个类代表消息发布者因此它们都实现了CorePublisherT接口它们的区别在于- Mono代表01个非阻塞数据而Flux则代表0N数据个非阻塞序列。
- Mono相当于只是一个Optional值而Flux才是Stream。基本原理其实就是基于 消息发布 - 消息订阅 的异步通信方式。★ Spring WebFlux
Spring WebFlux就是基于Reactor实现的其中Flux名称就是来自Reactor中的Flux类WebFlux包括了
对反应式HTTP、服务器推送事件SSEServer Send Event及WebSocket的支持。Spring WebFlux提供了两种开发方式
- 使用类似Spring MVC的注解方式。在这种方式下依然使用Controller、RequestMapping等注解修饰类、方法即可。
- 使用函数式编程模型的方式。在这种方式下程序使用RouterFunction来注册映射地址和处理器方法之间路由关系。上面这两种编程模型只是形式上有所不同代码编写方式上存在不同它们本质上完全是一样的它们都运行在相同的反应式流的基础之上。★ Spring MVC VS Spring WebFlux
Spring MVC --- Spring MVC 基于传统Servlet服务器需要使用很大的线程池才能支持大量的并发请求HttpServletRequest来获取请求参数getParameter()它是一个典型的同步方法该方法的返回值是String类型。
——这意味着在没有获取请求参数之前该方法就会阻塞线程这就是同步。HttpServletResponse来生成响应它也是同步服务器生成的响应完全发送给客户端之前该线程什么也做不了。这种同步的设计意味着每当一个客户端请求到来时必须启动单独的线程来为该请求提供服务。当请求的并发数量非常大时只能通过水平的集群扩展、增加更多集群节点来处理这些并发请求。Spring WebFlux--- Spring WebFlux采用异步、非阻塞的编程模型底层反应式容器无需启动额外的线程。ServerRequest来获取请求参数
比如 bodyToFlux(Class? extends T elementClass)、bodyToMono(Class? extends T elementClass)、formData()
这些的返回值都是 Flux 或 Mono 而 Flux 和 Mono 都并不是最终的数据 因此无需同步、阻塞等待数据的到来Mono和Flux都是CorePublisher因此它们可以说只是消息发布者或者说是一个消息通道可以不管获取的消息是否有数据而尝试获取消息的程序就是消息订阅者。这意味着程序在获取Flux或Mono之后完全可以继续向下执行无需阻塞线程。Spring WebFlux的最大优势在于能以较小的、固定数量的线程和更少的内存处理更多的并发请求因此Spring WebFlux可以在高负载的情况具有更好的可伸缩性——因为无需显著增加线程和内存。Spring MVC适用于同步处理的场景Spring WebFlux适用于异步处理的场景尤其在大量IO密集型比如Spring Cloud网关的服务中使用Spring WebFlux比较适合。 ★ Spring WebFlux的自动配置
Spring WebFlux的自动配置主要由WebFluxAutoConfiguration自动配置类负责提供支持。自动配置在Spring WebFlux默认功能的基础上添加了如下特性- 为HttpMessageReader和HttpMessageWriter实例配置了codecs。
- 对服务器静态资源提供支持包括对WebJars的支持。★ 对WebFlux自动配置进行定制
若要在保留自动配置的基础上增加一些自定义的Spring WebFlux配置例如添加拦截器、格式化器、视图控制器等则可通过实现自己的WebFluxConfigurer类并使用Configuration注解修饰该类、但不要使用EnableWebFlux注解修饰。实现该类的如下方法- addFormatters(FormatterRegistry registry)添加格式化器
- configureArgumentResolvers(ArgumentResolverConfigurer configurer)配置参数解析器
- configurePathMatching(PathMatchConfigurer configurer)配置路径匹配器
- configureViewResolvers(ViewResolverRegistry registry)配置视图解析器
...★ 全面接管
如果使用Configuration和EnableWebFlux注解同时修饰自己的Spring WebFlux配置类。这意味着完全关闭了Spring WebFlux的自动配置开发者必须手动完成所有关于Spring WebFlux的配置工作。★ 静态资源处理
完全类似于Spring Boot对Spring MVC所提供的静态资源处理
与Spring MVC类似Spring Boot同样使用类加载路径下/static目录或/public或/resources或/META-INF/resources
或应用根路径作为WebFlux的静态资源路径。 如需添加静态资源路径可提供WebFluxConfigurer实现类通过实现addResourceHandlers()方法可添加自定义的静态资源目录如果要更改覆盖原来的静态资源目录可通过spring.web.resources.static-locations来覆盖系统原有的静态资源目录。同样支持版本无关的静态资源和静态资源缓存清除★ 图标和首页
完全类似于Spring Boot对Spring MVC的首页和图标支持
与Spring MVC类似Spring WebFlux同样可使用静态资源路径下的index.html或templates路径下index模板作为应用的首页。Spring WebFlux同样会使用静态资源路径下的favicon.ico文件作为应用的图标。