模块  java.net.http
软件包  java.net.http

Interface HttpResponse.PushPromiseHandler<T>

  • 参数类型
    T - 推送承诺响应主体类型
    Enclosing interface:
    HttpResponse < T >

    public static interface HttpResponse.PushPromiseHandler<T>
    推送承诺的处理程序。

    推送承诺是HTTP / 2服务器在检索发起客户端发送的请求时发送的合成请求。 服务器可能通过检查发起请求确定客户端可能需要承诺的资源,并因此以推送承诺的形式将合成推送请求推送到客户端。 客户端可以选择接受或拒绝推送承诺请求。

    可以接收推送承诺请求直到已经完全接收到发起客户端发送请求的响应主体的点。 但是,推送承诺响应的传递与发送客户端发送的请求的响应的传递不协调。

    从以下版本开始:
    11
    • 方法详细信息

      • applyPushPromise

        void applyPushPromise​(HttpRequest initiatingRequest,
                              HttpRequest pushPromiseRequest,
                              Function<HttpResponse.BodyHandler<T>,​CompletableFuture<HttpResponse<T>>> acceptor)
        传入推送承诺的通知。

        对于收到的每个推送承诺,调用此方法一次,直到完全接收到发起客户端发送请求的响应主体为止。

        通过调用给定的acceptor函数接受推送承诺。 acceptor函数必须传递非null BodyHandler ,用于处理promise的响应主体。 接受器函数将返回CompletableFuture ,该响应以promise的响应结束。

        如果未成功调用acceptor函数,则拒绝推送承诺。 如果acceptor调用, acceptor函数将抛出IllegalStateException

        参数
        initiatingRequest - 发起客户端发送请求
        pushPromiseRequest - 合成推送请求
        acceptor - 必须成功调用以接受推送承诺的acceptor函数
      • of

        static <T> HttpResponse.PushPromiseHandler<T> of​(Function<HttpRequest,​HttpResponse.BodyHandler<T>> pushPromiseHandler,
                                                         ConcurrentMap<HttpRequest,​CompletableFuture<HttpResponse<T>>> pushPromisesMap)
        返回推送承诺处理程序,它将推送承诺及其响应累积到给定的映射中。

        对于接受的每个推送承诺,将条目添加到给定的映射中。 条目的键是推送请求,条目的值是CompletableFuture ,它与对应于键的推送请求的响应CompletableFuture完成。 如果地图中已存在其密钥为equal的条目,则拒绝/取消推送请求。 如果推送请求与其发起请求的来源不同,则拒绝/取消推送请求。

        当收到并接受推送承诺时,条目会尽快添加到给定的地图中。 这样,使用像缓存这样的映射的代码可以确定服务器是否已发出推送承诺,并且可能避免产生不必要的请求。

        推送承诺响应的传递与对发起的客户端发送的请求的响应的传递不协调。 但是,当完全接收到发起客户端发送请求的响应主体时,保证地图完全填充,即不再添加任何条目。 此时包含的个人CompletableFutures可能已经或可能尚未完成。

        参数类型
        T - 推送承诺响应主体类型
        参数
        pushPromiseHandler - 用于推送承诺的正文处理程序
        pushPromisesMap - 用于累积推送承诺的地图
        结果
        推送承诺处理程序