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

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

完全没心情工作了,这些手游也太好玩了小小法师化身小小法师,收集法术和神器,搭配出独特的策略组合,粉碎甜心怪物的邪恶计划!天天打怪升级打怪升级赚金币,放置挂机乐无边放松减压是利器,像素古怪奇葩风。轻松休闲无内购,大人小三国杀自制最鸡肋的武将今天xia编一个最鸡肋的武将。就不专门配图和使用模板了,因为技能很长,且鸡肋。因为杨修和鸡肋有关,就用杨修吧。势力神人物杨修体力三点技能养鸡锁定技,回合开始阶段,你摸一张牌暗置于自三国杀武将原画深度赏析大家好,今天我们来看看两个武将原画,其中有的细节平时我们很难注意到,这篇文章让你了解其中蕴含的故事。这段时间文章的更新频率有所恢复哈进入正题神吕布这画面里,容易被人注意到的是神吕布三国杀武将女汉子盘点大家好,今天我们来看看武将中的几个女汉子。性子比较刚烈直爽,一般可以从原原画,台词,技能中可以看出。1。关银屏从台词中可以看出其人物形象雪恨这炽热的鲜血,父亲你可感觉得到!取你首级三国杀看图猜武将,第二期今天画了六个武将,精细程度比上次大幅降低,不过也很好猜。上次平均画一个武将需要20分钟左右。这次平均一个武将几分钟时间。难度略微上涨。这次可以说是抽象派艺术画了,哈哈!1。hr中间三国杀哪些武将是招雷体质?陆逊上榜闪电真是个神奇的东西,他让大家又爱又恨,既能让风和日丽变得风雨交加,又能让命悬一线实现极限翻盘。在三国杀移动版上,他好像有灵魂一般,总爱找某些武将劈。大家好,今天就来看看闪电喜欢光攻城掠地6周年庆,穷奇活动怎么卡冲锋秒杀它?攻城掠地6周年庆已经开始了,玩家可以在游戏里签到拿赤壁皮肤,另外还有一个活动,名叫战穷奇,每位玩家每天有3次挑战机会,战斗胜利后,可以得到穷奇骨10金漆10,一天只能得到30个穷奇GTA5末日2分红,大佬说要带我飞,结果不会下水找潜艇闲来无事,上GTA5线上模式,登录成功就直接注册保镖事务所VIP(摩托帮),然后去设施里开末日2分红关,即波格丹危机。进入组队模式时,组到一位大佬,一开口就要五五开,我说不行,他就全面释放骁龙芯片潜能,荣耀50游戏表现令人意想不到此前,荣耀CEO赵明曾透露,荣耀50将有很多让人意想不到的优质体验。今天,有数码博主率先晒出了荣耀50的游戏帧率测试图,根据测试数据,荣耀50系列的游戏表现已经非常接近一些搭载骁龙王牌战争12块钱赞助战局,15天一个轮回,你觉得值吗?王牌战争集吃鸡与末日求生于一体的游戏,玩家可以自由选择一个模式游玩。选择吃鸡类游戏,就像绝地求生一样的玩法选择末日求生就像明日之后一样的玩法。赞助在末日求生模式里,每个服务器都有一网红爆品背后的秘密,时尚生活品牌洛斐如何圈粉年轻人?随着中国消费结构与消费市场的逐渐变化,新一代的消费群体正在崛起,Z世代已逐渐占据市场主导地位,为消费市场注入了新鲜的血液。据QuestMobile发布的2020Z世代洞察报告数据显
从八十年代开始到如今,每年诞生的最伟大的游戏都有什么?不知道大家有没有听说过GoldenJoystickAwards这个奖项呢?也就是金摇杆奖,也被称之为PeoplesGamingAwards相信大家听到这个名字,就自然而然想到了我们迷你世界田园地图很唯美,景色不要太迷人,很值得欣赏迷你世界作为一款有趣的游戏,其中有很多的玩法,地图也是最值得期待的内容之一。而地图也分成了小游戏类的地图,还有欣赏美景的地图,在进入其中以后也足以欣赏到很多的美景。像是田园地图就很你有手机吗?索尼第一方游戏IP将出手游索尼日前表示,让PlayStation更加社交化是索尼下一个重大挑战之一,这种社交化包括让旗下的3A游戏IP进军手机游戏市场,例如神秘海域和战神。索尼首席执行官吉田健一郎周二在公司给牛玩的游戏,让鸡散步的虚拟世界,赛博朋克已经成真文张书乐(人民网人民邮电报专栏作者,互联网和游戏产业观察者)在游戏世界里与牛共舞也好,扮演一头牛也罢,总归也就是个角色扮演,算不得惊奇。但如果现实中的牛也玩上了游戏,而且还有益身心LPL人员大调整,夏季赛即将拉开序幕关注碎片谈电竞带你领略不一样的游戏资讯内容不妥的还请留言指正随着MSI决赛的结束,还没等庆祝RNG的夺冠,LPL夏季赛很快就要开赛了,由于春夏季赛之间的时间太短,一般队伍也不会做过坎公骑冠剑守护者基地玩法坎公骑冠剑守护者基地过关攻略坎公骑冠剑守护者基地是游戏推出的新玩法,该玩法很多玩家不清楚,不知道该怎么玩比较好。想要知道这个作用的小伙伴们,就让小编给大家详细的讲讲,一起来看看吧。坎公骑冠剑守护者基地玩法推荐新手也月入500030000,抖音游戏推广达人,详细步骤介绍抖音游戏推广是一个隐藏极深的变现入口,找到它你需要,进入搜索页,搜索抖音游戏第二步,找到并关注抖音游戏,进入它的主页并点击主页链接游戏达人推广第三步,进入推广页面,选择任务并拍摄视游戏日报最终幻想新作将曝光!Epic暗示新游戏!RNG庆典开启每天一篇游戏资讯汇总,为你带来最新鲜,最劲爆的游戏资讯。足不出户看尽圈内大事小事,成为游戏圈中的百事通。新的一年所长会继续努力把优质的内容带给大家!游戏单机最终幻想起源或将亮相E3瑶可以光明正大地带斩杀,不会被队友喷,搭配这几个英雄无敌前言近日,王者荣耀在一次更新中加强了瑶这个英雄,这次的加强就是让瑶在大招附身状态下仍然可以释放除了闪现以外的召唤师技能。也让很多瑶瑶公主十分的开心。这个加强看起来好像并没有什么实质超级车长大聚会,谁还不是个优秀的坦克手了?朋友,你是否还在苦思冥想,独自摸索制霸坦克世界的超级大招?那你就out了!聪明的坦克手早早就去创作营蹲守,观摩大神操作,偷师技巧啦!第一期的坦克世界创作营是从5月1日开始至7月315月新一批游戏版号过审,霓虹深渊手游在列,也有腾讯网易说到国内的游戏,就要优先想到国内的版号过审的情况,因为游戏能不能最终上线还是这个版号说了算。不论你是手机游戏也好还是网络游戏也好,或者单机游戏也好都需要有版号你才能正式上线运营。既