8

我看過Spring Tips: Functional Reactive Endpoints with Spring Framework 5.0,並且讀了一些關於彈簧反應堆的內容,但我不太明白。彈簧反應堆&netty vs tomcat http

考慮到netty和spring reactor處於活動狀態,讓端點返回Flux/Mono實例(jacksonified)而不是直線對象(jacksonified)有什麼好處?我最初認爲,在http請求/響應上下文中,被動流將更像Web服務器,其中服務器將數據用開放通道推送到接收器,但似乎並非如此。

netty實際上比tomcat在反應式編程中做得更好嗎?

對不起,如果這些問題看起來很愚蠢,但我不太明白這個新框架方向的目的。它爲什麼會出現,它是如何工作的,它解決了什麼問題?

回答

7

我強烈建議你觀看最近在Devoxx Belgium "Reactive Web Application with Spring 5" by Rossen Stoyanchev上展示的作品。

在那裏,他談到了無網絡控制器表面上(下文介紹)的樣子Spring MVC的HTTP Servlet的請求/響應控制器,但它實際上不是

@GetMapping("https://stackoverflow.com/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和Reactive Streams的粘合代碼是如何作爲Spring Servlet 3.1兼容Web容器(Jetty和Tomcat)的更改的一部分實現的。

當然,他支持完全反應式非阻塞兼容服務器(Netty,Undertow)來運行反應流。

1

這意味着Netty比tomcat好是不對的。 執行是不同的。 Tomcat使用Java NIO來實現servlet 3.1規範。同時,netty也使用NIO,但引入了自定義API。 如果您想深入瞭解Servlet 3.1如何在Netty中實現,請觀看此視頻https://youtu.be/uGXsnB2S_vc