Spring WebFlux介绍
关于概念,这里不多做介绍,原理之前写过,也不多说了。
关于Servlet
servlet分为同步和异步两种。
同步servlet是我们常见的,当请求进来后,tomcat分给每个请求一个线程进行处理,业务代码需要多长时间,这个线程也就需要等待多长时间,多了也就会阻塞了。
异步servlet不会阻塞tomcat的servlet线程,把耗时的操作放到独立的线程池中。这样就可以使用比较少的线程达到比较高的吞吐量。
WebFlux
webflux有两种实现方式,传统mvc和router functions。
看代码
@RestController
public class TestController {@GetMapping("/1")private String get1(){return "haozi";}@GetMapping("/2")private Mono<String> get2(){return Mono.just("haozi");}
}
第一种是传统mvc,第二种是flux,运行结果上前端看不出什么区别。
需要注意的是Mono表示0或者1个元素,Flux表示0到n个元素(相当于序列)。
修改下代码
@RestController
@Slf4j
public class TestController {@GetMapping("/1")private String get1(){log.info("start");String str = createStr();log.info("end");return str;}@GetMapping("/2")private Mono<String> get2(){log.info("start");Mono<String> result = Mono.fromSupplier(() -> createStr());log.info("end");return result;}private String createStr(){try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {e.printStackTrace();}return "haozi";}
}
运行第一个的日志:
运行第二个的日志:
虽然前端没有区别,但后端所用时间来看,flux模式不会阻塞那么久。
接下来模拟下flux
@GetMapping("/3")private Flux<String> get3(){log.info("start");Flux<String> result = Flux.fromStream(IntStream.range(1 , 5).mapToObj(i -> {try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}return "flux data -- " + i;}));log.info("end");return result;}
结果:
如果想返回一个流式结果,需要修改下代码:
@GetMapping(value = "/3" , produces = "text/event-stream")
// 或者这样
// @GetMapping(value = "/3" , produces = MediaType.TEXT_EVENT_STREAM_VALUE)
结果:
图片上看不出来,实际上是一条一条返回的。
具体实现原因是servlet中的SSE(server-sent events),具体的不多做介绍了。
Spring WebFlux介绍相关推荐
- SpringBoot2.0使用Spring WebFlux之HelloWord篇
SpringBoot2.0使用Spring WebFlux之HelloWord篇 Reactive Programming和Reactive Streams 以及 Spring Webflux 介绍 ...
- Spring Webflux简介
1.Spring Webflux介绍 The original web framework included in the Spring Framework, Spring Web MVC, was ...
- 响应式Spring的道法术器(Spring WebFlux 快速上手 + 全面介绍)
1. Spring WebFlux 2小时快速入门 Spring 5 之使用Spring WebFlux开发响应式应用. lambda与函数式(15min) Reactor 3 响应式编程库(60mi ...
- 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux
作者:李新杰 来自:编程新说 情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用 ...
- Spring Webflux: Kotlin DSL [片断]
原文链接:https://dzone.com/articles/spring-webflux-kotlin-dsl-snippets 作者:Biju Kunjummen 译者:Jackie Tang ...
- Spring WebFlux和Spring Cloud开发响应式微服务
作者:Piotr Mińkowski 译者:大萝卜爱上小白菜 原文:https://dzone.com/articles/reactive-microservices-with-spring-webf ...
- corda_使用Spring WebFlux从Corda节点流式传输数据
corda 自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. ...
- 使用Spring WebFlux从Corda节点流式传输数据
自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. 更具体地说 ...
- 使用Spring WebFlux进行操作
Spring Boot 2.0最近在GA上线了,所以我决定在相当长一段时间内写我的第一篇有关Spring的文章. 自发布以来,我已经看到越来越多的提到Spring WebFlux以及有关如何使用它 ...
最新文章
- 卸载Notepad++!事实已证明,它更牛逼……
- TSVNCache占用CPU的解决办法
- asm 查看 数据文件 修改 时间_更高效的GMX分段模拟方法:修改tpr文件
- Linux网络编程——tcp、udp迭代服务器
- 小确幸BBS论坛-2-首页
- 宝石争霸如何保存进度
- c语言简单计算器减编程,C语言实现简单的计算器(加、减、乘、除)
- 摩莎485通讯测试软件,485串口测试软件1.6 免费版
- Gmail打不开登录不了邮箱最新解决方法
- 强制横屏java_Android强制设置横屏或竖屏
- 卫龙更新招股书:上半年净利润同比下降,产能未饱和仍要募资扩产
- ipad适用计算机专业么,并不适合所有人 iPad Pro买前需认识这几点
- 一键彻底关闭WIN10自动更新_BlockWin10AU
- 【NLP】文本匹配——Simple and Effective Text Matching with Richer Alignment Features阅读与总结(RE2)
- springboot项目jar包发布的,如何线上修改jar包。
- 陷阱技术探秘 ──动态汉化Windows技术的分析
- 儿子作恶,母亲受报应
- 解决金山打字通不能缩小窗口问题
- java线程中断 interrupt
- python神经网络算法pdf_高清图解:神经网络、机器学习、数据科学一网打尽|附PDF...