Spring Boot 2 - Webflux - Websocket - Netty - Compresión
Estoy usando
- Spring-boot-starter-web 2.3.1
- spring-webflux 5.2.7
- resorte-arranque-arrancador-reactor-netty 2.3.1
Estoy tratando de usar Sec-WebSocket-Extensions: permessage-deflate
en respuestas de websockets. Netty admite la descompresión de websocket desde la corrección 507 ( pregunta relacionada)
Pero no funciona (es decir, el servidor no usa el permessage-deflate
propuesto en los encabezados de solicitud)
Mientras que cuando uso embarcadero con spring-boot-starter-jetty
, funciona fuera de la caja, sin necesidad de configuración adicional necesaria.
¿Alguien sabe cómo resolver esto? ¡Gracias!
Respuestas
Después de mirar el marco spring-webflux, la compresión está deshabilitada por defecto en reactor-netty. De hecho, el constructor predeterminado de clase ReactorNettyRequestUpgradeStrategy
crea una instancia del valor del parámetro de clase WebsocketServerSpec con el valor predeterminado (compresión = falso).
Reactor-netty verifica el predicado websocketClientSpec.compress()
para establecer un soporte de compresión.
Entonces el parámetro websocketClientSpec.compress
debe activarse.
@Bean
public WebSocketHandlerAdapter handlerAdapter(WebSocketService webSocketService) {
return new WebSocketHandlerAdapter(webSocketService);
}
@Bean
public WebSocketService webSocketService() {
return new HandshakeWebSocketService(
new ReactorNettyRequestUpgradeStrategy(WebsocketServerSpec.builder().compress(true)));
}
El resultado del apretón de manos:
