Spring 启动 2 - Webflux - Websocket - Netty - 压缩
Spring Boot 2 - Webflux - Websocket - Netty - Compression
我正在使用
- 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支持websocket解压自修复507 (
但它不起作用(即服务器不使用请求中提出的 permessage-deflate
headers)
而当我将 jetty 与 spring-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)));
}
握手结果:
我正在使用
- 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支持websocket解压自修复507 (
但它不起作用(即服务器不使用请求中提出的 permessage-deflate
headers)
而当我将 jetty 与 spring-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)));
}
握手结果: