Spring Boot 2-Webflux-Websocket-激活压缩

时间:2018-11-06 20:36:27

标签: spring-boot spring-webflux

我正在使用:

  • Spring Boot 2.1.0发行版
  • Webflux(不是MVC)
  • Websocket
  • 反应性净值

我想用“ GZIP”压缩返回的有效负载(或任何其他压缩)。我已经尝试了application.yml中的配置:

server.compression.enabled: true

但是返回的有效载荷仍然是纯文本。

有人知道如何解决这个问题吗?谢谢。

1 个答案:

答案 0 :(得分:2)

server.compression.enabled配置属性是关于HTTP响应压缩的,因此无法达到预期的目标。

使用WebSocket,您可以使用协议扩展来激活每个消息的压缩,它由您选择的容器支持。必须在握手期间使用Sec-WebSocket-Extensions在客户端和服务器之间进行协商。因此,就您而言,激活它还不够,您还需要在客户端上启用它。参见rfc7692

某些容器(例如最新版本中的Jetty)默认启用了这些压缩扩展。对于Reactor Netty,我不确定情况是否如此。

对于后续步骤,您可以:

  • 检查您的客户端是否正在发送该标头并支持此协议扩展
  • 切换到Jetty来检查是否可以立即使用
  • 如果它与Jetty兼容,而不与Reactor Netty兼容,则您应该create an issue on their issue tracker,因为可能缺少一部分Netty基础设施(WebSocketServerCompressionHandler?)

编辑

我已经创建了reactor/reactor-netty#507