Spring Boot 2 - Webflux - Websocket - Netty - การบีบอัด
ฉันกำลังใช้
- สปริงบูตเริ่มต้นเว็บ 2.3.1
- สปริงเว็บฟลักซ์ 5.2.7
- สปริงบูตสตาร์ทเครื่องปฏิกรณ์สุทธิ 2.3.1
ฉันกำลังพยายามใช้Sec-WebSocket-Extensions: permessage-deflateกับการตอบสนองของ websockets Netty รองรับการบีบอัด websocket ตั้งแต่แก้ไข507 ( คำถามที่เกี่ยวข้อง)
แต่ไม่ทำงาน (กล่าวคือเซิร์ฟเวอร์ไม่ได้ใช้ที่permessage-deflateเสนอในส่วนหัวของคำขอ)
ในขณะที่ฉันใช้ท่าเทียบเรือกับspring-boot-starter-jettyมันทำงานนอกกรอบไม่จำเป็นต้องมีการกำหนดค่าเพิ่มเติม
มีใครรู้วิธีแก้ปัญหานี้บ้างไหม? ขอบคุณ!
คำตอบ
หลังจากดูเฟรมเวิร์ก 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)));
}
ผลการจับมือกัน: