Spring Boot 2 - Webflux - Websocket - Netty - Nén
Tôi đang sử dụng
- spring-boot-starter-web 2.3.1
- Spring-webflux 5.2.7
- Spring-boot-starter-reactor-netty 2.3.1
Tôi đang cố gắng sử dụng Sec-WebSocket-Extensions: permessage-deflatephản hồi trên websockets. Netty hỗ trợ giải nén websocket kể từ bản sửa lỗi 507 ( câu hỏi liên quan)
Nhưng nó không hoạt động (tức là máy chủ không sử dụng permessage-deflateđược đề xuất trong tiêu đề yêu cầu)
Trong khi khi tôi sử dụng cầu tàu với spring-boot-starter-jetty, nó hoạt động bình thường, không cần cấu hình bổ sung.
Có ai biết làm thế nào để giải quyết điều này? Cảm ơn!
Trả lời
Sau khi xem xét khuôn khổ spring-webflux, tính năng nén bị tắt theo mặc định trong mạng phản ứng. Thật vậy, cấu trúc mặc định của lớp ReactorNettyRequestUpgradeStrategytạo ra một thể hiện của giá trị tham số lớp WebsocketServerSpec với giá trị mặc định (nén = false).
Reactor-netty kiểm tra vị từ websocketClientSpec.compress()để thiết lập hỗ trợ nén.
Vì vậy, tham số websocketClientSpec.compresscần được kích hoạt.
@Bean
public WebSocketHandlerAdapter handlerAdapter(WebSocketService webSocketService) {
return new WebSocketHandlerAdapter(webSocketService);
}
@Bean
public WebSocketService webSocketService() {
return new HandshakeWebSocketService(
new ReactorNettyRequestUpgradeStrategy(WebsocketServerSpec.builder().compress(true)));
}
Kết quả bắt tay: