Webflux 介绍
Webflux
目的
与用户打交道
why created?
1.基于函数式编程
2.使用固定的线程和硬件资源处理并发
两种编程模型
- 基于注解的 controller
- 函数式端点Functional Endpoints
- Router与Handler
- RouterFunctions可以产生Router和Handler对象,
- RouterFunctions对标@Controller中的注解
- Router相当于@RequestMapping
- Handler相当于Controller中的方法
- ServerRequest和ServerResponse
- SpringMVC中使用的是HTTPServletRequest
- webFlux + SpringMVC 使用的是ServerHTTPRequest
- WebFlux+ 响应式 使用的是 ServerRequest
- Router与Handler
和 Spring MVC 区别
IO 密集度较高,使用性能较好
使用 netty 作为 web 容器
基于注解的 WebFlux 阻塞式与响应式实现
WebFlux + SSE 服务器推
传统的SpringMVC注解与WebFlux通用,区别在于底层实现,WebFlux 中的 ServerHttpRequest 与 SpringMVC HTTPServletRequest 的区别
-
- 如果 Spring MVC 用的好好的,不需要切换,命令式更好写,懂,debug
- 微服务架构,可以混合使用
- 如果使用了阻塞的持久化框架,如 JPA,JDBC,最好的选择就是 Spring MVC
- 陡峭的学习路线
处理请求类
- HttpHandler
- 非阻塞 http 请求处理
- WebHandler
- 高级一点,web api 的请求处理
- WebSocket vs. HTTP
- http
- 只能由客户端发起连接,服务端作出响应
- 无状态:每次连接处理一个请求,请求结束后断开连接
- 无连接: 对于事务处理没有记忆能力,服务器不知道客户端是什么状态
- 缺陷:通信只能由客户端发起,如果服务器有连续的变化,客户端很难得知
- 基于http实现即时通讯
- 轮询: ajax
- 长轮询: ajax 请求,服务器 hold 住连接
- 长连接: 嵌入 iframe,长连接的请求,服务器不断输入数据
- Flash Socket:内嵌 socket 类的 flash 程序,js 调用 flash,socket 通信
- websockets
- 2008 诞生,2011 成为标准,浏览器支持
- 服务器主动向客户端推送消息,客户端也可以主动向服务器发送信息,全双工通信
- 建立握手连接是通过 http 传输的,建立之后,传输不需要 http 协议
- http
Webflux 介绍