Java 如何在SpringWebFlux应用程序中断开空闲客户端的连接?

Java 如何在SpringWebFlux应用程序中断开空闲客户端的连接?,java,spring-webflux,Java,Spring Webflux,我有一个spring-webflux应用程序(引擎盖下有Netty)。有这样一种控制器方法: public Mono<Response> submitBinaryData(@RequestHeader HttpHeaders headers, @RequestBody(required = false) Flux<DataBuffer> data) { return process(da

我有一个
spring-webflux
应用程序(引擎盖下有Netty)。有这样一种控制器方法:

public Mono<Response> submitBinaryData(@RequestHeader HttpHeaders headers,
                                       @RequestBody(required = false) Flux<DataBuffer> data) {
    return process(data.timeout(Duration.ofSeconds(10)), getContentLength(headers));
}
    byte[] bufferOf1Mb = new byte[1024 * 1024];
    HttpRequest request = HttpRequest.newBuilder(new URI("http://localhost:8080/")
            .setHeader("Accept", "application/json")
            .setHeader("Content-Type", "application/octet-stream")
            .POST(BodyPublishers.fromPublisher(JdkFlowAdapter.publisherToFlowPublisher(
                    Flux.just(ByteBuffer.wrap(bufferOf1Mb)).concatWith(Flux.never())), 10 * bufferOf1Mb.length))
            .build();
    HttpResponse<String> httpResponse = client.send(request, BodyHandlers.ofString());
此客户端宣布10Mb的数据,但只写入1Mb,然后永远等待

我希望这些客户端在超时后断开连接,以避免在可能永远中断的客户端上浪费资源。在控制器方法中,有一个
timeout()
操作符,如果数据在一段时间内没有流动,它会抛出一个
TimeoutException
。然后,异常处理程序(未显示)捕获并处理异常:它只向客户端返回一个
响应
对象(作为JSON)

问题是,即使发生超时(可以在日志中看到),客户机也不会注意到任何事情。客户机可能正在等待服务器使用其数据,然后才查看响应。但是输入永远不会被发送。服务器不会关闭连接,因为它希望客户端读取响应。因此,这种联系永远是开放的

调试器还显示,当发生这种情况时,
writeWith()
setComplete()
将在响应对象上调用


有没有办法断开这样一个客户端的连接?可以使用超时设置(尽管server.netty.只有一个超时相关设置,
连接超时,这不是这里需要的),也可以通过编程方式(当客户端明显丢失时,强制切断连接),或者以任何其他方式?

如果您使用WebClient进行http请求,构建webclient时,可以在httpClient中设置responseTimeout

  @Bean
  public WebClient getWebClient(WebClient.Builder webClientBuilder) {

    ClientHttpConnector connector = new ReactorClientHttpConnector(
        HttpClient.create().responseTimeout(Duration.ofSeconds(10))
    );

    return webClientBuilder
        .clientConnector(connector)
        .build();

  }

参考资料:

谢谢,但这是客户端设置。我寻求的是在服务器端控制这一点的能力。