【问题标题】:Spring Boot 2 - Webflux - Websocket - Netty - CompressionSpring Boot 2 - Webflux - Websocket - Netty - 压缩
【发布时间】:2020-12-04 14:09:07
【问题描述】:

我正在使用

  • spring-boot-starter-web 2.3.1
  • spring-webflux 5.2.7
  • spring-boot-starter-reactor-netty 2.3.1

我正在尝试在 websockets 响应中使用 Sec-WebSocket-Extensions: permessage-deflate。 Netty自修复507(related question)

)支持websocket解压

但它不起作用(即服务器不使用请求标头中提出的permessage-deflate

而当我将 jettyspring-boot-starter-jetty 一起使用时,它开箱即用,无需额外配置。

有人知道如何解决这个问题吗?谢谢!

【问题讨论】:

    标签: websocket compression netty


    【解决方案1】:

    查看spring-webflux框架后,reactor-netty中默认禁用压缩。事实上,ReactorNettyRequestUpgradeStrategy 类的default contructor 创建了类参数值WebsocketServerSpec with default value 的实例(压缩= false)。

    Reactor-netty 检查谓词 websocketClientSpec.compress() 以建立压缩支持。

    所以需要激活参数websocketClientSpec.compress

    @Bean
    public WebSocketHandlerAdapter handlerAdapter(WebSocketService webSocketService) {
    return new WebSocketHandlerAdapter(webSocketService);
    }
    @Bean
    public WebSocketService webSocketService() {
    return new HandshakeWebSocketService(
    new ReactorNettyRequestUpgradeStrategy(WebsocketServerSpec.builder().compress(true)));
    }
    

    结果握手:

    【讨论】:

      猜你喜欢
      • 2019-04-10
      • 2015-11-18
      • 1970-01-01
      • 2022-06-05
      • 1970-01-01
      • 2014-08-31
      • 2020-12-05
      • 2018-07-26
      • 2018-06-24
      相关资源
      最近更新 更多