第 11 章 Web 开发进阶(3)
丁雪丰
11.4 响应式 Web
到目前为止,本书一直使用的是命令式编程方式,整个处理过程也都是阻塞式的。以提供 Web 服务为例,我们如果希望同时并发地服务 100 个请求,那就需要 Tomcat 容器有 100 个工作线程,每个线程处理一个请求,如果来了第 101 个请求,那它只能等待前面的某个请求被处理完,有空闲的线程后才开始处理。每个线程本身是要消耗一定资源的,(例如消耗更多内存),大量线程间的切换也会消耗 CPU。但这还不是最要命的,最要命的是在请求处理过程中,如果我们还需要与数据库交互,或者读写文件,又或者调用远程服务,那么当前线程就不得不被阻塞,直到操作结果返回,这就会造成大量的资源浪费。
想要处理更多请求,无非是提升性能,提高并发度。可以用更多的线程和更强的机器,也可以想办法挤压现有资源。既然基于同步线程的方式不行,那就换别的方式,人们自然想了各种办法,如何用更少的资源来提供更大的吞吐量,基于事件驱动的方式是否可行呢?
不同的事件有不同的处理器,在注册完各种处理器之后,通过 IO 多路复用来检测是否有事件(不仅是网络,UI 界面上的点击也算是一种事件),例如 8080 端口是否收到了一个请求,有请求就将它分派给具体的事件处理器做后续处理。而请求处理本身也是事件驱动的,遇到 IO 操作不会“傻傻”地等待结果返回,同样会依靠 IO 完成事件通知。这样一来就能将原本处于阻塞状态的大量线程释放出来。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
![](https://static001.geekbang.org/resource/image/d0/e4/d0880927e2a522a038be2d04bf19dfe4.png)
本文深入介绍了响应式编程在Web开发中的应用,重点聚焦于Project Reactor框架。该框架基于Reactor项目,提供了两个重要概念——Publisher和Subscriber,通过这些概念可以实现数据的生产和订阅。在Project Reactor中,Mono代表0或1个对象,Flux代表多个对象,并提供了丰富的操作方法。此外,文章还介绍了Publisher针对事件的钩子方法,并探讨了线程调度和错误处理等方面的内容。通过示例代码展示了如何使用这些方法,以及如何切换执行的上下文。总的来说,响应式编程在Web开发中具有重要意义,而Project Reactor框架为开发者提供了强大的工具来实现响应式编程。 此外,文章还介绍了背压机制,用于解决上游生产速度远大于下游消费速度的情况,以及介绍了使用WebFlux代替WebMVC的方法。WebFlux是一套完全非阻塞的Web框架,不依赖Servlet容器,提供了强大的客户端支持。通过Spring Boot可以方便地引入WebFlux,并且可以选择不同的内置服务器支持。这些内容为读者提供了全面了解响应式编程和WebFlux框架的概览。文章还提到了响应式编程和命令式编程的适用场景,以及迁移至Project Reactor和WebFlux的建议。文章内容丰富,对于想要了解响应式编程和WebFlux框架的读者具有很高的参考价值。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《学透 Spring:从入门到项目实战》
《学透 Spring:从入门到项目实战》
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论