介绍Webflux

介绍Webflux

关于WebFlux

我们知道传统的Web框架,比如说:struts2,springmvc等都是基于Servlet API与Servlet容器基础之上运行的,在Servlet3.1之后才有了异步非阻塞的支持。而WebFlux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty,Undertow及支持Servlet3.1的容器上,因此它的运行环境的可选择行要比传统web框架多的多。

  根据官方的说法,webflux主要在如下两方面体现出独有的优势:

非阻塞式

    其实在servlet3.1提供了非阻塞的API,WebFlux提供了一种比其更完美的解决方案。使用非阻塞的方式可以利用较小的线程或硬件资源来处理并发进而提高其可伸缩性

函数式编程端点

    老生常谈的编程方式了,Spring5必须让你使用java8,那么函数式编程就是java8重要的特点之一,而WebFlux支持函数式编程来定义路由端点处理请求。

flux 真的能让业务请求响应更快吗?并不觉得。(个人看法)

传统mvc:

主线程接收到request --> 【准备数据(时间长)】--> 给用户返回数据。
整个过程是单线程阻塞,所以用户感觉等待时间长。

flux是异步模式:

 主线程在接收到request --> 立刻返回

(所以性能测试出来的响应时间是很短,是个不变的常数,不随用户数量增加变化)

WebFlux是Spring Framework 5引入的一种响应式编程模型,用于构建基于事件驱动的非阻塞Web应用程序。相比传统的Servlet API,WebFlux提供了更高的性能和可伸缩性。 在WebFlux中,你可以使用函数式编程或者基于注解的方式来定义处理请求的方法。下面是两种常见的写法介绍: 1. 函数式编程方式: ```java @Configuration public class WebConfig { @Bean public RouterFunction<ServerResponse> routes(UserHandler userHandler) { return RouterFunctions.route() .GET("/users", userHandler::getAllUsers) .POST("/users", userHandler::createUser) .GET("/users/{id}", userHandler::getUserById) .PUT("/users/{id}", userHandler::updateUser) .DELETE("/users/{id}", userHandler::deleteUser) .build(); } } @Component public class UserHandler { public Mono<ServerResponse> getAllUsers(ServerRequest request) { // 处理获取所有用户的逻辑 } public Mono<ServerResponse> createUser(ServerRequest request) { // 处理创建用户的逻辑 } public Mono<ServerResponse> getUserById(ServerRequest request) { // 处理根据ID获取用户的逻辑 } public Mono<ServerResponse> updateUser(ServerRequest request) { // 处理更新用户的逻辑 } public Mono<ServerResponse> deleteUser(ServerRequest request) { // 处理删除用户的逻辑 } } ``` 2. 基于注解的方式: ```java @RestController public class UserController { @Autowired private UserService userService; @GetMapping("/users") public Flux<User> getAllUsers() { // 处理获取所有用户的逻辑 } @PostMapping("/users") public Mono<User> createUser(@RequestBody User user) { // 处理创建用户的逻辑 } @GetMapping("/users/{id}") public Mono<User> getUserById(@PathVariable String id) { // 处理根据ID获取用户的逻辑 } @PutMapping("/users/{id}") public Mono<User> updateUser(@PathVariable String id, @RequestBody User user) { // 处理更新用户的逻辑 } @DeleteMapping("/users/{id}") public Mono<Void> deleteUser(@PathVariable String id) { // 处理删除用户的逻辑 } } ``` 以上是WebFlux的两种常见写法,你可以根据自己的需求选择适合的方式来开发响应式的Web应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值