Spring Boot 2 - Webflux - Websocket - Netty - การบีบอัด

Dec 04 2020

ฉันกำลังใช้

  • สปริงบูตเริ่มต้นเว็บ 2.3.1
  • สปริงเว็บฟลักซ์ 5.2.7
  • สปริงบูตสตาร์ทเครื่องปฏิกรณ์สุทธิ 2.3.1

ฉันกำลังพยายามใช้Sec-WebSocket-Extensions: permessage-deflateกับการตอบสนองของ websockets Netty รองรับการบีบอัด websocket ตั้งแต่แก้ไข507 ( คำถามที่เกี่ยวข้อง)

แต่ไม่ทำงาน (กล่าวคือเซิร์ฟเวอร์ไม่ได้ใช้ที่permessage-deflateเสนอในส่วนหัวของคำขอ)

ในขณะที่ฉันใช้ท่าเทียบเรือกับspring-boot-starter-jettyมันทำงานนอกกรอบไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติม

มีใครรู้วิธีแก้ปัญหานี้บ้างไหม? ขอบคุณ!

คำตอบ

AndrianekenaMoise Jan 06 2021 at 23:33

หลังจากดูเฟรมเวิร์ก spring-webflux แล้วการบีบอัดจะถูกปิดใช้งานโดยค่าเริ่มต้นใน reactor-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)));
}

ผลการจับมือกัน: