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-deflateWebSocketの応答で使用しようとしています。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)));
}

結果のハンドシェイク: