Webflux 介绍

Webflux

目的

与用户打交道

why created?

1.基于函数式编程
2.使用固定的线程和硬件资源处理并发

两种编程模型

  1. 基于注解的 controller
  2. 函数式端点Functional Endpoints
    • Router与Handler
      • RouterFunctions可以产生Router和Handler对象,
      • RouterFunctions对标@Controller中的注解
      • Router相当于@RequestMapping
      • Handler相当于Controller中的方法
    • ServerRequest和ServerResponse
      • SpringMVC中使用的是HTTPServletRequest
      • webFlux + SpringMVC 使用的是ServerHTTPRequest
      • WebFlux+ 响应式 使用的是 ServerRequest

和 Spring MVC 区别

IO 密集度较高,使用性能较好

  • 使用 netty 作为 web 容器

  • 基于注解的 WebFlux 阻塞式与响应式实现

  • WebFlux + SSE 服务器推

  • 传统的SpringMVC注解与WebFlux通用,区别在于底层实现,WebFlux 中的 ServerHttpRequest 与 SpringMVC HTTPServletRequest 的区别

  • 官网建议

    • 如果 Spring MVC 用的好好的,不需要切换,命令式更好写,懂,debug
    • 微服务架构,可以混合使用
    • 如果使用了阻塞的持久化框架,如 JPA,JDBC,最好的选择就是 Spring MVC
    • 陡峭的学习路线

处理请求类

  1. HttpHandler
    • 非阻塞 http 请求处理
  2. WebHandler
    • 高级一点,web api 的请求处理
  3. WebSocket vs. HTTP
    • http
      • 只能由客户端发起连接,服务端作出响应
      • 无状态:每次连接处理一个请求,请求结束后断开连接
      • 无连接: 对于事务处理没有记忆能力,服务器不知道客户端是什么状态
      • 缺陷:通信只能由客户端发起,如果服务器有连续的变化,客户端很难得知
      • 基于http实现即时通讯
        • 轮询: ajax
        • 长轮询: ajax 请求,服务器 hold 住连接
        • 长连接: 嵌入 iframe,长连接的请求,服务器不断输入数据
        • Flash Socket:内嵌 socket 类的 flash 程序,js 调用 flash,socket 通信
    • websockets
      • 2008 诞生,2011 成为标准,浏览器支持
      • 服务器主动向客户端推送消息,客户端也可以主动向服务器发送信息,全双工通信
      • 建立握手连接是通过 http 传输的,建立之后,传输不需要 http 协议
作者

操先森

发布于

2021-08-13

更新于

2021-09-17

许可协议

评论