Spring WebFlux 手册(译文1.2.Reactive Core)

1.2. Reactive Core

spring-web模块包含以下对响应式web应用程序的基本支持。

服务端支持:

1)在服务端请求处理过程中,提供了两个层次的支持,

HttpHandler:提供了用于非阻塞I/O和响应式流反压机制的处理机制。以及用于响应式NettyUndertowTomcatJetty和任何Servlet 3.1+容器的适配器。

2)WebHandler API: 用于处理请求的高级通用web API,使用这个API可以构建具体的编程模型,如带注释的控制器和功能入口。

客户端支持:

对于客户端,有一个基本的ClientHttpConnector来执行带有非阻塞I/O和响应式流反压机制的HTTP请求,以及用于适配器NettyJetty HttpClientAPI。在实际的应用开发过程中,我们使用的更高层级的WebClient就是构建在这个基本的ClientHttpConnector之上。

 

1.2.1. HttpHandler

HttpHandler是一个简单的契约或者编程规范,它是被故意设计成最小化的,且只有一个方法来处理请求和响应。其主要的、也是唯一的目的是对不同的HTTP服务器api进行最小的抽象。

下表描述了它支持的服务器api:

erver name

Server API used

Reactive Streams support

Netty

Netty API

Reactor Netty

Undertow

Undertow API

spring-web: Undertow to Reactive Streams bridge

Tomcat

Servlet 3.1 non-blocking I/O; Tomcat API to read and write ByteBuffers vs byte[]

spring-web: Servlet 3.1 non-blocking I/O to Reactive Streams bridge

Jetty

Servlet 3.1 non-blocking I/O; Jetty API to write ByteBuffers vs byte[]

spring-web: Servlet 3.1 non-blocking I/O to Reactive Streams bridge

Servlet 3.1 container

Servlet 3.1 non-blocking I/O

spring-web: Servlet 3.1 non-blocking I/O to Reactive Streams bridge

下表描述了不通服务端容器的程序依赖 (也参见支持的版本):

Server name

Group id

Artifact name

Reactor Netty

io.projectreactor.netty

reactor-netty

Undertow

io.undertow

undertow-core

Tomcat

org.apache.tomcat.embed

tomcat-embed-core

Jetty

org.eclipse.jetty

jetty-server, jetty-servlet

下面的代码片段显示如何在不同的服务端容器中使用HttpHandler适配器,这些代码一般都是集成在框架中,不需要程序人员编写。

##Java:
HttpHandler handler = ...
ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(handler);
HttpServer.create().host(host).port(port).handle(adapter).bind().block();

##Kotlin:
val handler: HttpHandler = ...
val adapter = ReactorHttpHandlerAdapter(handler)
HttpServer.create().host(host).port(port).handle(adapter).bind().block()

1.2.2. WebHandler API

org.springframework.web.server 包运行在HttpHandler的上层,它提供了一个通用的web API,通过多个WebExceptionHandler、多个WebFilter和单个WebHandler组件组成的链来处理请求。在Spring ApplicationContext的上下文中,可以通过动态的自动注入或者生成器来注册进去,让整个链式处理过程与WebHttpHandlerBuilder放在一起。HttpHandler目标时提供一个简单的抽象设计以便适配不同的服务器,但是 WebHandler API的目标是提供一组更广泛的web应用程序中常用的特性,比如:

•	User session with attributes.
•	Request attributes.
•	Resolved Locale or Principal for the request.
•	Access to parsed and cached form data.
•	Abstractions for multipart data.
•	and more..

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值