Spring Boot 2 - Webflux - Websocket - Netty - Сжатие
я использую
- весна-загрузка-стартер-сеть 2.3.1
- весна-webflux 5.2.7
- пружина-загрузка-стартер-реактор-netty 2.3.1
Я пытаюсь использовать Sec-WebSocket-Extensions: permessage-deflate
ответы веб-сокетов. Netty поддерживает распаковку веб-сокетов с момента исправления 507 ( связанный вопрос)
Но это не работает (т.е. сервер не использует permessage-deflate
предложенные в заголовках запросов)
В то время как, когда я использую причал с spring-boot-starter-jetty
, он работает из коробки, дополнительная настройка не требуется.
Кто-нибудь знает, как это решить? Спасибо!
Ответы
Посмотрев на фреймворк spring-webflux, сжатие по умолчанию отключено в файле response-netty. Действительно, конструктор класса по умолчаниюReactorNettyRequestUpgradeStrategy
создает экземпляр значения параметра класса WebsocketServerSpec со значением по умолчанию (сжатие = 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)));
}
Результат рукопожатия:
