# spring5-webflux
**Repository Path**: tyliuhuan/spring5-webflux
## Basic Information
- **Project Name**: spring5-webflux
- **Description**: Webflux是 Spring5 添加新的用于 web 开发的模块,功能和 SpringMVC 类似,基于响应式编程出现的框架
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2020-07-27
- **Last Updated**: 2021-11-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# spring5-webflux
#### 介绍
Webflux是 Spring5 添加新的用于 web 开发的模块,功能和 SpringMVC 类似,基于响应式编程出现的框架
SpringMVC是基于 Servlet 容器,Webflux 是一种异步非阻塞的框架,异步非阻塞的框架在 Servlet3.1 以后才支持,核心是基于 Reactor 的相关 API 实现的
#### 异步非阻塞
异步和同步针对调用者,调用者发送请求,如果等着对方回应之后才去做其他事情就是同步,如果发送请求之后不等着对方回应就去做其他事情就是异步;
阻塞和非阻塞针对被调用者,被调用者收到请求之后,做完请求任务之后才给出反馈就是阻塞,收到请求之后马上给出反馈然后再去做事情就是非阻塞
#### Webflux的特点
1. 非阻塞式:在有限资源下,提高系统吞吐量和伸缩性,以 Reactor 为基础实现响应式编程
2. 函数式编程:Spring5 框架基于 java8,Webflux 使用 Java8 函数式编程方式实现路由请求
#### 与Spring MVC的比较

1. 两个框架都可以使用注解方式,都运行在 Tomcat 等容器中
2. SpringMVC 采用命令式编程,Webflux 采用异步响应式编程
#### 响应式编程
1. 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便的表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
2. 响应式编程操作中,Reactor 是满足 Reactive 规范框架
3. Reactor 有两个核心类,Mono 和 Flux,这两个类实现接口 Publisher。
Flux 返回 N 个元素
Mono 返回 0 或者 1 个元素
4. Flux 和 Mono 都是数据流的发布者,使用 Flux 和 Mono 都可以发出三种数据信号: 元素值,错误信号,完成信号。
错误信号和完成信号都代表终止信号,终止信号用于告诉订阅者数据流结束了,错误信号终止数据流同时把错误信息传递给订阅者