- 类型参数:
-
T
- 推送承诺响应体类型
- 封闭接口:
-
HttpResponse<T>
public static interface HttpResponse.PushPromiseHandler<T>
推送承诺的处理程序。
一个推送承诺是由HTTP/2服务器在检索发起的客户端发送请求时发送的合成请求。服务器可能通过检查发起请求来确定客户端可能需要承诺的资源,因此向客户端推送一个合成的推送请求,即推送承诺。客户端可以选择接受或拒绝推送承诺请求。
推送承诺请求可能在接收到发起的客户端发送请求的响应体完全接收之前收到。然而,推送承诺响应的传递与发起的客户端发送请求的响应的传递不协调。
- 自 JDK 11 开始:
- 11
-
Method Summary
Modifier and TypeMethodDescriptionvoid
applyPushPromise
(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor) 接收传入的推送承诺的通知。static <T> HttpResponse.PushPromiseHandler
<T> of
(Function<HttpRequest, HttpResponse.BodyHandler<T>> pushPromiseHandler, ConcurrentMap<HttpRequest, CompletableFuture<HttpResponse<T>>> pushPromisesMap) 返回一个推送承诺处理程序,将推送承诺及其响应累积到给定的映射中。
-
Method Details
-
applyPushPromise
void applyPushPromise(HttpRequest initiatingRequest, HttpRequest pushPromiseRequest, Function<HttpResponse.BodyHandler<T>, CompletableFuture<HttpResponse<T>>> acceptor) 接收传入的推送承诺的通知。每接收到一个推送承诺时,将调用此方法,直到完全接收到发起的客户端发送请求的响应体。
通过调用给定的
acceptor
函数来接受推送承诺。必须向acceptor
函数传递一个非空的BodyHandler
,用于处理承诺的响应体。接受者函数将返回一个CompletableFuture
,该对象将完成承诺的响应。如果未成功调用
acceptor
函数,则将拒绝推送承诺。如果多次调用acceptor
函数,将抛出IllegalStateException
。- 参数:
-
initiatingRequest
- 发起的客户端发送请求 -
pushPromiseRequest
- 合成的推送请求 -
acceptor
- 必须成功调用以接受推送承诺的接受者函数
-
of
static <T> HttpResponse.PushPromiseHandler<T> of(Function<HttpRequest, HttpResponse.BodyHandler<T>> pushPromiseHandler, ConcurrentMap<HttpRequest, CompletableFuture<HttpResponse<T>>> pushPromisesMap) 返回一个推送承诺处理程序,将推送承诺及其响应累积到给定的映射中。每接受一个推送承诺,都会向给定的映射添加条目。条目的键是推送请求,值是一个
CompletableFuture
,该对象将完成与键的推送请求对应的响应。如果映射中已经存在一个键等于它的条目,则推送请求将被拒绝/取消。如果推送请求与其发起请求的来源不同,则推送请求将被拒绝/取消。当接收并接受推送承诺时,将尽快向给定的映射添加条目。这样,使用此类映射作为缓存的代码可以确定服务器是否已发出推送承诺,并避免进行可能不必要的请求。
推送承诺响应的传递与发起的客户端发送请求的响应的传递不协调。然而,当完全接收到发起的客户端发送请求的响应体时,将保证映射已完全填充,即不会再添加条目。此时映射中包含的各个
CompletableFuture
可能已经完成,也可能尚未完成。- 类型参数:
-
T
- 推送承诺响应体类型 - 参数:
-
pushPromiseHandler
- 用于推送承诺的BodyHandler -
pushPromisesMap
- 用于累积推送承诺的映射 - 返回:
- 一个推送承诺处理程序
-