Spring Boot 2-Webflux-Websocket-Netty-압축

Dec 04 2020

나는 사용하고있다

  • spring-boot-starter-web 2.3.1
  • spring-webflux 5.2.7
  • 스프링 부트 스타터 반응기 네티 2.3.1

나는 Sec-WebSocket-Extensions: permessage-deflatewebsockets 응답 에 사용하려고합니다 . Netty는 수정 507 이후 웹 소켓 압축 해제를 지원합니다 ( 관련 질문).

하지만 작동하지 않습니다 (즉, 서버가 permessage-deflate요청 헤더에 제안 된 것을 사용하지 않음 )

와 함께 부두 를 사용하면 spring-boot-starter-jetty별도의 구성이 필요하지 않고 즉시 작동합니다.

아무도 이것을 해결하는 방법을 알고 있습니까? 감사!

답변

AndrianekenaMoise Jan 06 2021 at 23:33

spring-webflux 프레임 워크를 살펴본 후, Reactor-netty에서 압축이 기본적으로 비활성화되어 있습니다. 실제로 클래스 의 기본 생성자 는 기본값 (compression = false) ReactorNettyRequestUpgradeStrategy을 사용하여 클래스 매개 변수 값 WebsocketServerSpec 의 인스턴스를 생성합니다 .

Reactor-nettywebsocketClientSpec.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)));
}

결과 핸드 셰이크 :