本文,我们来谈谈呼应式编程。
什么是呼应式编程?
呼应式编程是一种编写异步、非堵塞、根据事情驱动的应用程序的编码模式。
呼应式编程旨在进步应用程序的功能和可伸缩性,以应对高并发和高负载的场景。
在传统的恳求呼应模型中,每个客户端恳求会分配一个线程,这些线程会一直等待直到恳求完结,这可能导致资源的浪费和功能瓶颈。呼应式编程使用异步非堵塞的方法,经过订阅和处理事情流来处理恳求。
什么是 WebFlux
Spring Boot 中选用的是呼应式编程模型为 Spring WebFlux。
WebFlux 是一个呼应式的 Web 框架。WebFlex 能够在资源有限的情况下进步体系的吞吐量和伸缩性(不是进步功能)。
比较 MVC 和 WebFlux
Spring MVC 选用命令编程的方法,代码被一句句执行,便利开发者理解与调试代码。 WebFlux 则是根据异步呼应式编程。
它们在作业方法上的区别:
MVC 作业方法
MVC 的作业流程是:主线程接收到恳求 -> 预备数据 -> 回来数据。
整个作业流程是单线程堵塞,用户会感觉等待时间长。由于在成果处理之后才回来数据给浏览器。假如恳求许多,则吞吐量跟不上去。
WebFlux 作业方法
WebFlux 的作业流程是:主线程接收到恳求 -> 当即回来数据和函数的组合(Mono 或 Flux,不是成果) -> 敞开一个新 Work 线程去做实践的数据预备作业,进行真正的事务操作 -> Work 线程完结作业 -> 回来给用户实在的数据(成果)。
这种方法给人的感觉就是呼应时间很短,由于回来的是不变的常数,它不跟着用户数量的添加而改变。
其他区别比照
| 比照项 | Spring MVC | Spring WebFlux |
|---|---|---|
| 地址(路由)映射 |
@Controller、@RequestMapping 等标准的 Spring MVC 注解 |
1. Router Functions,提供一套函数式风格的 API,用于创立 Router、Handler 和 Filter 2. @Controller、@RequestMapping 等标准的 Spring MVC
|
| 数据流 | Serlet API |
Reactive Streams:一种支撑背压的异步数据流处理标准,干流完成有 RxJava 和 Reactor。 Spring WebFlux 默认集成的是 Reactor
|
| 容器 |
Tomcat、Jetty、Undertow
|
Netty、Tomcat、Jetty、Undertow
|
I/O 模式 |
同步堵塞的 I/O 模式 |
异步非堵塞的 I/O 模式 |
| 吞吐功能 | 低 | 高 |
| 事务处理能力 | 相同 | 相同 |
| 支撑数据库 |
NoSQL、SQL
|
支撑 noSQL,不支撑 MySQL 等关系型数据库 |
| 恳求和呼应 |
HttpServletRequest 和 HttpServeletResponse
|
ServerRequest 和 ServerResponse
|
Spring WebFlux 支撑
noSQL,不支撑MySQL等关系型数据库。这有点尴尬
参阅
- 《Spring Boot 实战派》
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

