关于概念,这里不多做介绍,原理之前写过,也不多说了。

关于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介绍相关推荐

  1. SpringBoot2.0使用Spring WebFlux之HelloWord篇

    SpringBoot2.0使用Spring WebFlux之HelloWord篇 Reactive Programming和Reactive Streams 以及 Spring Webflux 介绍 ...

  2. Spring Webflux简介

    1.Spring Webflux介绍 The original web framework included in the Spring Framework, Spring Web MVC, was ...

  3. 响应式Spring的道法术器(Spring WebFlux 快速上手 + 全面介绍)

    1. Spring WebFlux 2小时快速入门 Spring 5 之使用Spring WebFlux开发响应式应用. lambda与函数式(15min) Reactor 3 响应式编程库(60mi ...

  4. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux

    作者:李新杰 来自:编程新说 情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用 ...

  5. Spring Webflux: Kotlin DSL [片断]

    原文链接:https://dzone.com/articles/spring-webflux-kotlin-dsl-snippets 作者:Biju Kunjummen 译者:Jackie Tang ...

  6. Spring WebFlux和Spring Cloud开发响应式微服务

    作者:Piotr Mińkowski 译者:大萝卜爱上小白菜 原文:https://dzone.com/articles/reactive-microservices-with-spring-webf ...

  7. corda_使用Spring WebFlux从Corda节点流式传输数据

    corda 自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. ...

  8. 使用Spring WebFlux从Corda节点流式传输数据

    自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. 更具体地说 ...

  9. 使用Spring WebFlux进行操作

    Spring Boot 2.0最近在GA上线了,所以我决定在相当长一段时间内写我的第一篇有关Spring的文章. 自发布以来,我已经看到越来越多的提到Spring WebFlux以​​及有关如何使用它 ...

最新文章

  1. 卸载Notepad++!事实已证明,它更牛逼……
  2. TSVNCache占用CPU的解决办法
  3. asm 查看 数据文件 修改 时间_更高效的GMX分段模拟方法:修改tpr文件
  4. Linux网络编程——tcp、udp迭代服务器
  5. 小确幸BBS论坛-2-首页
  6. 宝石争霸如何保存进度
  7. c语言简单计算器减编程,C语言实现简单的计算器(加、减、乘、除)
  8. 摩莎485通讯测试软件,485串口测试软件1.6 免费版
  9. Gmail打不开登录不了邮箱最新解决方法
  10. 强制横屏java_Android强制设置横屏或竖屏
  11. 卫龙更新招股书:上半年净利润同比下降,产能未饱和仍要募资扩产
  12. ipad适用计算机专业么,并不适合所有人 iPad Pro买前需认识这几点
  13. 一键彻底关闭WIN10自动更新_BlockWin10AU
  14. 【NLP】文本匹配——Simple and Effective Text Matching with Richer Alignment Features阅读与总结(RE2)
  15. springboot项目jar包发布的,如何线上修改jar包。
  16. 陷阱技术探秘 ──动态汉化Windows技术的分析
  17. 儿子作恶,母亲受报应
  18. 解决金山打字通不能缩小窗口问题
  19. java线程中断 interrupt
  20. python神经网络算法pdf_高清图解:神经网络、机器学习、数据科学一网打尽|附PDF...

热门文章

  1. Tiled Map Editor(瓦片地图编辑器)的Java和QT版本区别
  2. HTML——2022年超好看的元旦倒计时
  3. 银河麒麟操作系统基础学习笔记八
  4. 搜狗词库的批量下载#Python
  5. html5+在线录音,html5在线录音示例源码(MediaStream Recording API)
  6. 全员营销,谁是赢家?
  7. 虚拟局域网VLAN实验操作
  8. RBM系列1:预备知识
  9. 创新微带你了解LoRa与LoRaWAN的区别有哪些
  10. 咸鱼洽谈(linux三剑客之一grep)美好的周五生活开始了~