asp.net web开发框架_第四十七章:初识响应式 Web 开发框架 WebFlux

9498dd2a2362ccda53c9280677bfff31.png

学习目标

  • 了解什么是响应式 Web 开发框架 WebFlux
  • 编写第一个 WebFlux 示例程序

(一)WebFlux 简介

Spring WebFlux is a non-blocking web framework built from the ground up to take advantage of multi-core,next-generation processors and handle massive numbers of concurrent connections.

上面内容摘自 Spring 官网,大致意思是:Spring WebFlux 是一个自底向上构建的非阻塞 Web 框架,用于利用多核、下一代处理器并处理大量并发连接。

原始的 web 框架包含在 Spring 框架中,即 Spring Web MVC,是专为 Servlet API 与 Servlet 容器构建的。reactive stack, web framework, Spring WebFlux 最新被添加到了 Spring 5.0 版本中。它是完全地非阻塞的,支持 Reactive Streams 背压,运行在诸如 Netty、Undertow 与 Server3.1+ 容器中。两个 Web 框架都反映了它们源模块的名称:spring-webmvc 与 spring-webflux,并且它们共存于 Spring 框架之中。每一个模块都是可选的。应用程序可以选择一个或另一个模块,或者在某些情况下两个同时使用。例如,SpringMVC 使用响应式 Web 客户端进行控制。

详细介绍请移步 Spring 官网进行查看:http://spring.io/

1157b54aa462cad70ccf77b9e30d7a17.png

(二)第一个 WebFlux 示例程序

1、创建工程

创建一个 Spring Starter Project,Spring Boot 的版本要求最低为 2.0.0(支持 Spring 5.0)。不要添加原来的 web 依赖,而是要添加 Reactive Web,即 flux 依赖,并添加上 Lombok 与 DevTools 依赖。

8162ce3f4195afabef70859b57cc4946.png

2、定义控制器

这里我们直接定义一个 Controller 用于演示使用,基础代码如下:

@RestController

我们启动项目,访问这两个 mapping 映射,并没有感觉到有任何区别。

3、修改处理器

(1)添加一个耗时操作方法

因为 Spring WebFlux 是一个自底向上构建的非阻塞 Web 框架,这里我们添加一个耗时操作方法,来对其进行演示,这样更为直观,代码如下:

public 

(2)添加 @Slf4j 注解

为了测试方便,我们在创建项目的时候就引入了 Lombok 插件,这里我们使用 Lombok 的 @Slf4j 为当前的控制器添加一个 log 对象。

@RestController

(3)修改两个处理器方法

现在准备工作都做完了,我们就对最初的两个 mapping 映射进行修改,代码如下所示:

@GetMapping

(4)结果演示

当我们在浏览器中测试这两个方法的时候,在浏览器中打印的信息依旧不变,只是中间经过了5秒的耗时操作,并不能看出有何区别,这时我们就需要去看日志信息了,看一下日志的打印时间,就能看出为什么说 Spring WebFlux 是一个非阻塞的 Web 框架了。

e7cdf7b1207a26cf92239f378918800f.png

可见这个方法是实实在在的运行了 5s 以上的时间。

8ed7533a809c2e63f084d46113703aaf.png

而我们使用 WebFlux 的 Mono 方法,日志信息很快就完全打印出来了,而其中的耗时操作则是交给了其他线程进行处理,这样就会大大减小服务器的压力,差异还是十分明显的。

4、修改处理器-Flux 用法

Mono 表示,处理器返回的数据为 0-1 个;而 Flux 表示,处理器返回的数据为 0-多个。在上面的例子中我们使用了 Mono,这次我们来看看 Flux 如何使用。

(1)访问方式

以下测试均使用如下的访问 URL,且不要使用火狐浏览器,而要使用谷歌或360浏览器。 否则,有些效果看不到。

http://localhost:8080/flux3?param=bj&param=sh&param=gd1 类似于这种 URL 的传参形式。

(2)数组转 Flux

@GetMapping

(3)集合转 Flux

@GetMapping

(4)Flux 底层不会阻塞处理器执行

@GetMapping

这些都比较基础,提供代码,就不再进行详细解读了。本章节只是对 WebFlux 进行一个大体的了解,很容易上手。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值