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-deflate
websockets 응답 에 사용하려고합니다 . 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)));
}
결과 핸드 셰이크 :
