弹簧靴2-Webflux-Websocket-Netty-压缩

弹簧靴2-Webflux-Websocket-Netty-压缩,websocket,compression,netty,Websocket,Compression,Netty,我正在使用 spring boot starter web 2.3.1 spring webflux 5.2.7 弹簧启动启动器反应器netty 2.3.1 我试图在WebSocket响应上使用Sec WebSocket Extensions:permessage deflate。 Netty自修复以来支持websocket解压缩( 但它不起作用(即,服务器不使用请求头中建议的permessagedeflate) 然而,当我将jetty与spring boot starter jetty一起

我正在使用

  • spring boot starter web 2.3.1
  • spring webflux 5.2.7
  • 弹簧启动启动器反应器netty 2.3.1
我试图在WebSocket响应上使用
Sec WebSocket Extensions:permessage deflate
。 Netty自修复以来支持websocket解压缩(

但它不起作用(即,服务器不使用请求头中建议的
permessagedeflate

然而,当我将jetty
spring boot starter jetty
一起使用时,它是开箱即用的,不需要额外的配置


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

查看spring webflux框架后,默认情况下在reactor netty中禁用压缩。实际上,类的
ReactorNettyRequestUpgradeStrategy
创建了类参数值的实例(compression=false)

检查谓词
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 webflux框架后,默认情况下在reactor netty中禁用压缩。实际上,类的
ReactorNettyRequestUpgradeStrategy
创建类参数值的实例(压缩=false)

检查谓词
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)));
}
握手的结果是: