Spring Boot 2 - Webflux - Websocket - Netty - Compressione
sto usando
- spring-boot-starter-web 2.3.1
- spring-webflux 5.2.7
- Spring-boot-starter-reattore-netty 2.3.1
Sto cercando di utilizzare le Sec-WebSocket-Extensions: permessage-deflaterisposte sui websocket. Netty supporta la decompressione websocket dalla correzione 507 ( domanda correlata)
Ma non funziona (ovvero, il server non utilizza le permessage-deflateproposte nelle intestazioni delle richieste)
Considerando che quando uso jetty con spring-boot-starter-jetty, funziona immediatamente, non è necessaria alcuna configurazione aggiuntiva.
Qualcuno sa come risolvere questo problema? Grazie!
Risposte
Dopo aver esaminato il framework spring-webflux, la compressione è disabilitata per impostazione predefinita nel reattore-netty. Infatti, il costruttore predefinito della classe ReactorNettyRequestUpgradeStrategycrea un'istanza del valore del parametro di classe WebsocketServerSpec con valore predefinito (compressione = false).
Reactor-netty controlla il predicato websocketClientSpec.compress()per stabilire un supporto di compressione.
Quindi il parametro websocketClientSpec.compressdeve essere attivato.
@Bean
public WebSocketHandlerAdapter handlerAdapter(WebSocketService webSocketService) {
return new WebSocketHandlerAdapter(webSocketService);
}
@Bean
public WebSocketService webSocketService() {
return new HandshakeWebSocketService(
new ReactorNettyRequestUpgradeStrategy(WebsocketServerSpec.builder().compress(true)));
}
Il risultato della stretta di mano: