Spring 启动 2 - Webflux - Websocket - Netty - 压缩

Spring Boot 2 - Webflux - Websocket - Netty - Compression

我正在使用

我正尝试在 websockets 响应中使用 Sec-WebSocket-Extensions: permessage-deflate。 Netty支持websocket解压自修复507 (

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

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

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

看了spring-webflux框架后,reactor-netty默认是禁用压缩的。确实default contructor of class ReactorNettyRequestUpgradeStrategy create an instance of the class parameter value 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)));
}

握手结果: