17

我看过Spring Tips: Functional Reactive Endpoints with Spring Framework 5.0并阅读了一些关于 spring reactor 的内容,但我不太明白。

鉴于我已经激活了 netty 和 spring reactor ,让端点返回Flux/实例(杰克逊化)而不是直接 dto 对象(杰克逊化)有什么好处?Mono我最初假设反应流在 http 请求/响应上下文中的工作方式更像 websockets,其中服务器使用开放通道将数据推送到接收器,但情况似乎并非如此。

另外,netty 在反应式编程中实际上比 tomcat 做得更好吗?

如果这些问题看起来很愚蠢,我很抱歉,但我不太明白这个新框架方向的目的。为什么会出现,它是如何工作的,它解决了什么问题?

4

2 回答 2

13

我强烈建议您观看最近在比利时 Devoxx 上发表的由 Rossen Stoyanchev 撰写的“Reactive Web Application with Spring 5”

在那里,他谈到了反应式 Web 控制器(如下所示)表面上看起来像Spring MVC HTTP Servlet 请求/响应控制器,但实际上并非如此

@GetMapping("/users/{id}")
public Mono<User> getUser(@PathValiable Long id) {
   return this.userRepository.findById(id);
}

@GetMapping("/users")
public Flux<User> getUsers() {
   return this.userRepository.findAll();
}

他谈到了Servlet 3.1虽然非阻塞对于完全反应式并不真正起作用,以及连接 Servlet 3.1 和反应式流的胶水代码是如何作为 Spring 5 更改的一部分实现的,用于 Servlet 3.1 兼容的 Web 容器(Jetty 和 Tomcat)。

当然,他正在接触完全响应式非阻塞兼容服务器(Netty、Undertow)来运行响应式流。

于 2016-12-05T01:29:15.850 回答
1

说Netty比tomcat好是不对的。实现方式不同。Tomcat 使用 java NIO 来实现 servlet 3.1 规范。同时,netty 也使用 NIO,但引入了自定义 api。如果您想深入了解 servlet 3.1 如何在 Netty 中实现,请观看此视频https://youtu.be/uGXsnB2S_vc

于 2016-12-14T21:08:30.947 回答