Spring Boot 2 - Webflux - Websocket - Netty - Compression
saya menggunakan
- pegas-boot-starter-web 2.3.1
- spring-webflux 5.2.7
- pegas-boot-starter-reactor-netty 2.3.1
Saya mencoba menggunakan Sec-WebSocket-Extensions: permessage-deflate
tanggapan websockets. Netty mendukung dekompresi websocket sejak perbaikan 507 ( pertanyaan terkait)
Tapi itu tidak berhasil (yaitu, server tidak menggunakan yang permessage-deflate
diusulkan di header permintaan)
Sedangkan ketika saya menggunakan jetty with spring-boot-starter-jetty
, itu berfungsi di luar kotak, tidak perlu konfigurasi tambahan.
Adakah yang tahu bagaimana menyelesaikan ini? Terima kasih!
Jawaban
Setelah melihat kerangka pegas-webflux, kompresi dinonaktifkan secara default di reactor-netty. Memang contructor standar kelas ReactorNettyRequestUpgradeStrategy
membuat sebuah instance dari nilai parameter kelas WebsocketServerSpec dengan nilai default (kompresi = false).
Reactor-netty memeriksa predikat websocketClientSpec.compress()
untuk membangun dukungan kompresi.
Jadi parameter websocketClientSpec.compress
perlu diaktifkan.
@Bean
public WebSocketHandlerAdapter handlerAdapter(WebSocketService webSocketService) {
return new WebSocketHandlerAdapter(webSocketService);
}
@Bean
public WebSocketService webSocketService() {
return new HandshakeWebSocketService(
new ReactorNettyRequestUpgradeStrategy(WebsocketServerSpec.builder().compress(true)));
}
Hasil jabat tangan:
