范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

WebFlux初体验

  前面铺垫了五篇啦,是时候请出主角了。
  今天我们就先来一个简单的案例大伙体验一把 WebFlux。  1.什么是 WebFlux
  首先我们来看看什么是 WebFlux,Spring 官网上有一张经典的对比图:
  看着这张图,我们来仔细分析下传统的 SpringMVC 和 WebFlux 之间的区别。
  Spring WebFlux 是一个异步非阻塞式 IO 模型,通过少量的容器线程就可以支撑大量的并发访问,所以 Spring WebFlux 可以有效提升系统的吞吐量和伸缩性,特别是在一些 IO 密集型应用中,Spring WebFlux 的优势明显。例如微服务网关 Spring Cloud Gateway 就使用了 WebFlux,这样可以有效提升网管对下游服务的吞吐量。
  不过需要注意的是,接口的响应时间并不会因为使用了 WebFlux 而缩短,服务端的处理结果还是得由 worker 线程处理完成之后再返回给前端。
  WebFlux 底层使用 Netty 容器,这点也和我们传统的 SpringMVC 不一样,不过默认端口都是 8080。WebFlux 另外也提供了对 Jetty 以及 Undertow 等容器的支持,具体使用方式和之前松哥 Spring Boot 系列中讲的一样,大家直接在 pom.xml 文件中添加相关的依赖即可。
  不过需要注意的是,必须是 Servlet3.1+ 容器,如 Tomcat、Jetty,或者是非 Servlet 容器,如 Netty 和 Undertow。  2.什么是 Reactor
  接下来还有一个概念需要和大家介绍,那就是 Reactor。
  Spring Reactor 是 Pivotal 团队基于反应式编程实现的一种方案,这是一种非阻塞,并且由事件驱动的编程方案,它使用函数式编程实现。关于函数式编程,大家可以回顾松哥本系列前面的文章:WebFlux 前置知识(一)。
  Reactor 是一个用于 JVM 的完全非阻塞的响应式编程框架,具备高效的需求管理,可以很好的处理 "backpressure",它可以直接与 Java8 的函数式 API 直接集成,例如 CompletableFuture、各种 Stream 等。
  Reactor 还提供了异步序列 API  Flux (用于 N 个元素)和  Mono (用于 0|1 个元素),并完全遵循和实现了"响应式扩展规范"(Reactive Extensions Specification)。
  换句话说,大家可以把 Reactor 理解为 Java8 中的 Stream(参见WebFlux 前置知识(三))+ Java9 中的 Reactive Stream(参见WebFlux 前置知识(四))。
  上面说了这么多,大家最重要是要记住 Flux 和 Mono,因为这两个东西我们在后面会反复用到。  Mono:实现发布者 Publisher,并返回 0 或 1 个元素。  Flux:实现发布者 Publisher,并返回 N 个元素。
  记住关键字,他俩都是发布者 Publisher。  3.创建工程
  为了演示方便,松哥这里就直接采用 Spring Boot 工程了,首先我们创建一个 Spring Boot 工程,需要注意的是,以往创建 Spring Boot 时我们都是选择 Spring Web 依赖,但是这次我们选择 Spring Reactive Web 依赖,如下图:
  添加上这一个依赖就 OK 了。
  这个时候创建好的 Spring Boot 项目,底层容器是 Netty 而不是我们之前广泛使用的 Tomcat 了。  3.1 Mono
  项目创建成功后,我们可以先来体验一把 Mono 的功能,添加如下 Controller 进行测试:  @RestController public class HelloController {     @GetMapping("/hello")     public String hello() {         return "hello";     }     @GetMapping("/hello2")     public Mono hello2() {         return Mono.just("hello2");     } }
  第一个 /hello 接口就是一个普通的 SpringMVC 中的接口,这个在这里也是支持的。后面的 /hello2 接口返回值则是一个 Mono对象。
  接下来启动项目,然后我们就可以愉快的访问 /hello 和 /hello2 接口了。
  有人可能会说这么写的意义何在呢?
  上面这个例子确实看不出来意义,我们对上面的代码进行一个改进:  @RestController public class HelloController {     @GetMapping("/hello")     public String hello() {         long start = System.currentTimeMillis();         String helloStr = getHelloStr();         System.out.println("普通接口耗时:" + (System.currentTimeMillis() - start));         return helloStr;     }      @GetMapping("/hello2")     public Mono hello2() {         long start = System.currentTimeMillis();         Mono hello2 = Mono.fromSupplier(() -> getHelloStr());         System.out.println("WebFlux 接口耗时:" + (System.currentTimeMillis() - start));         return hello2;     }      private String getHelloStr() {         try {             Thread.sleep(2000);         } catch (InterruptedException e) {             e.printStackTrace();         }         return "hello";     } }
  我们单独抽取出来一个方法 getHelloStr,在这个方法中,我们首先睡眠两秒钟,然后返回一个字符串,最后在接口中调用该方法获取返回的字符串。
  需要注意的是,此时的 Mono是通过 Mono.fromSupplier 方法获取。
  接下来启动项目,我们再次访问这两个接口,打印出来的日志信息如下:
  可以看到:  在普通接口中,请求会被阻塞,所以最终打印出来耗时 2001 毫秒。  在 WebFlux 接口中,请求不会被阻塞,所以服务端的接口耗时为 0。
  这下大家看到差异了吧!这比异步 Servlet 方便多了吧!  3.2 Flux
  Flux 是我们在 WebFlux 中常用的另外一种返回数据格式,我们一起来看下它的一个简单案例:  @GetMapping(value = "/flux",produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux flux() {     Flux flux = Flux.fromArray(new String[]{"javaboy","itboyhub","www.javaboy.org","itboyhub.com"}).map(s -> {         try {             Thread.sleep(2000);         } catch (InterruptedException e) {             e.printStackTrace();         }         return "my->data->" + s;     });     return flux; }
  Flux 也是一个 Publisher,它可以由一个数组产生,上面的代码也都是基本的 Stream 操作,松哥就不再赘述了,不熟悉的小伙伴可以查看WebFlux 前置知识(三)。
  需要注意的是,这里返回的 Content-Type 是 MediaType.TEXT_EVENT_STREAM_VALUE,即  text/event-stream 。
  启动后,在浏览器端访问,我们来看看结果:
  text/event-stream
  我们日常开发中,返回的 Content-Type 基本都是  application/json  或者 text/html ,很少会用到 text/event-stream,这其实也是服务器向浏览器推送消息的一种方案,这种方案和我们所熟知的 WebSocket 有一些差别,这个松哥下次专门撸一篇文章和大家介绍,这里就先不展开了。
  原文链接:https://mp.weixin.qq.com/s/HVJQEdOBdBG_V92j7MMmkw

PSV什么游戏好玩?psv目前已经破解了3。60版的系统。大家可以自由选择玩什么游戏,很多网站也有资源。psv平台大作太多了,我推荐给题主一些好玩的游戏。首先是仙境传说奥德赛,这款游戏是psv平台最类明日之后游戏中有哪些只有老玩家才知道的冷门知识?明日之后的知识点还是比较多的,刚刚开服不久大家都不算老玩家,内测的玩家应该是老玩家,游戏君也总结了几个知识点看各位玩家知道吗?考验你的时候到了。1。配方残页可以用金条购买的在商店的1v1敌方选吕布,我是选夏侯惇,还是选典韦?什么英雄能打赢?吕布是王者荣耀里面的战士一哥,单挑能打赢他的战士,除了老夫子,很难再找出第二个。在1vs1的情况下,夏侯惇能否打赢吕布?如果在前期吕布还没有出破军的情况下,夏侯惇是有绝对的压倒性打一些街机游戏中自杀的这个设定最先出自哪款游戏?其意义何在?感谢邀请!不知道当年玩坦克大战,大家对于打爆自己基地的同伴有什么想要说的?最初的自杀是出自哪部游戏,估计已经没有人可以说得清了。但是玩家们记忆最深的则是侍魂后期出现的自杀,当年在游dnf旭旭宝宝为什么要为dnf疯狂烧钱?旭旭宝宝作为国服知名的DNF玩家,以前以竞速闻名于DNF玩家圈,后来做了直播后,开始疯狂砸钱打造自己的号,成为了国服有名的人民币玩家(败家子)。那他为什么要在DNF里疯狂砸钱呢?小有什么游戏可以推荐给我吗?好玩的游戏?个人感觉tap里的游戏都不错这只是手机游戏,pc端上的游戏也有不少,比如GTA,看门狗,刺客信条等tap上的游戏小部分要付费的,其实也不贵,十到二十来块,毕竟你少充点钱王者荣耀好像越来越卡,进入游戏都要等半天,这是为什么?其实这种情况一直是腾讯游戏的一个弊病,无论是电脑端游戏还是手机端游戏,都有着这种情况,无论是多么高端的配置,几个赛季以后就会出现卡顿情况,甚至在进入游戏的时候都没有以前顺畅。王者荣王者荣耀为何战士刘备典韦只能打野不能上单,上单就会暴毙?你好,我是小凯很高兴回答你的问题王者荣耀的射手都是依靠着加攻击的装备不断的堆积攻击力,从而达到伤害最大化。但是射手也是最容易被人秒的英雄,不管是战士还是刺客,秒掉一个射手都是轻而易王者荣耀里大家都说代代版本削宫本,到底削了什么?以前的宫本武藏是怎么样的?首先,宫本武藏是王者荣耀比较早期上线的一名英雄,而且宫本武藏最初登场时是一名刺客,与李白一起成就了当时的刺客荣耀,对王者峡谷形成了绝对的统治。故而,宫本武藏在早期是王者荣耀中比较具有没有特别好玩的橙光游戏推荐?我要来强烈安利橙光游戏了!虽然我入橙光的时间不长,但是我玩了很多很好玩的游戏,疯狂买游戏!!所以我推荐一些我觉得很好玩的!!!我一般喜欢古风类型的,所以古风会推荐多一点。古风1。偷梦幻西游固伤用什么套装好?早啊!悟空。大家好,我是你们的五开咨询师,教倒卖教五开。点关注不迷路。梦幻西游自从对固伤大削弱以后wdd,ne,ps,df,pt等等各种的固伤门派都需要点修炼了,以前正常秒出去的数
手游每日榜单(2021年12月14日)每日更新游戏榜单和新鲜资讯,关注我不迷路。关注我的都棒棒哒!今天是2021年12月14日,首先来看看今天的畅销榜单变化今天具体的榜单如下今日IOS畅销榜网易大话西游排名第10。这是司马老贼的不老心看到这个消息,未免有些唏嘘。曾经的lpl三大ad,如今回归赛场却还要努力寻找队伍参赛。谈到司马老贼,我们会想到那个湮灭的大嘴四杀,他的招牌烬,以及展现的不苟言笑的一面。司马老贼原名终焉誓约我们炸服两天,还将承诺的补偿砍了一半新游戏炸服不是第一次,但这么炸服的可能真的是第一个。12月9日1100时,网龙研发哔哩哔哩游戏独家代理发行的新游戏终焉誓约正式公测,不过服务器刚开没多久,大部分玩家就发现无法进入服幻塔公测萌新氪金指南作者NGAAimer推BV12L4y1H735前言大家好呀,作为一名资深氪金玩家,(很多款游戏氪金数都有几万了)手游氪金也是坑贼多。同样一百块买礼包或参加活动比直接充进去抽卡价值差我发现了,王者荣耀真正的厉害之处,就是驯化了它的玩家最近发现了一个很有趣的现象英雄联盟手游的难度,正在快速降低。而且这种操作难度降低的改变,仅限于国服。这很有意思。英雄联盟手游,从国服最初上线到现在的每次更新,都会调整操作模式。比如王者荣耀新英雄暃的技能介绍王者新英雄菲技能介绍,这个新英雄可以在峡谷里的墙壁上跳来跳去,非的定位是一名刺客,擅长突进收割。技能看起来花里胡哨,其实理解起来并不复杂,暃的一技能简直就跟铠的一技能一模一样,就是玩辅助太没安全感怎么办?近卫项羽全新黑科技,血量直逼一万七大家好,我是名侦探15号。今天我们来聊一点黑科技的辅助英雄打法。这个打法在很多个赛季之前,经常被认为是坑强行补位放飞自我没什么用。但现在和以前不一样了,现在是风云变幻的S25赛季。TT官方前iG下路组合Puff以及Southwind正式加入TT官宣,前iG下路组合Puff以及Southwind正式加入。TT英雄联盟分部人员变动公告经双方友好协商,我们很高兴地向大家宣布,原iG电子竞技俱乐部选手丁旺(IDPuff)苏志第五人格求生者上分分析说实话,一直都说监管难打,监管难打,但其实这一切都只是基于高分段。在厅级排名中遇到球队真的很难。幸存者水平稍微低一点也没关系。如果每个人都能滑两盘半,那基本就是三出局,很难。但是在召唤与合成随机解谜图文攻略大全召唤与合成随机解谜难度还是比较高的,导致一些玩家无法过关,那么召唤与合成随机解谜怎么过?小编为您带来召唤与合成随机解谜图文攻略汇总,让大家能够轻松解谜。召唤与合成随机解谜图文攻略大吃鸡1680换1套黄金风衣怎么样?与至尊金龙有一个通病欢迎诸位小伙伴们来到天哥开讲的和平精英精英小课堂连续3天的和平小店已经正式结束,除了人气皮肤返场之外,还出现了星云玉兔雪团子星河浪客这3套新衣服。其中的星河浪客由于外观和版型设计的