Spring Boot 2-Webflux-Websocket-Netty-圧縮
Dec 04 2020
使っています
- spring-boot-starter-web 2.3.1
- 春-webflux5.2.7
- spring-boot-starter-reactor-netty 2.3.1
Sec-WebSocket-Extensions: permessage-deflate
WebSocketの応答で使用しようとしています。Nettyは、修正507(関連する質問)以降、WebSocketの解凍をサポートしています
しかし、それは機能しません(つまり、サーバーはpermessage-deflate
リクエストヘッダーで提案されたものを使用しません)
私が使用したときには桟橋をしてspring-boot-starter-jetty
、それが箱から出して動作しますが、余分な設定は必要ありません。
誰かがこれを解決する方法を知っていますか?ありがとう!
回答
AndrianekenaMoise Jan 06 2021 at 23:33
spring-webfluxフレームワークを確認した後、reactor-nettyではデフォルトで圧縮が無効になっています。実際、クラスのデフォルトのコンストラクターReactorNettyRequestUpgradeStrategy
は、クラスパラメーター値WebsocketServerSpecのインスタンスをデフォルト値(compression = 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)));
}
結果のハンドシェイク:
