Spring 启动 2 - Webflux - Websocket - 激活压缩

Spring Boot 2 - Webflux - Websocket - Activate Compression

我正在使用:

我想用 "GZIP"(或任何其他压缩)压缩返回的有效负载。我试过 application.yml:

中的配置
server.compression.enabled: true

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

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

server.compression.enabled配置属性是关于HTTP响应压缩的,所以这不会达到预期的目标。

使用 WebSocket,您可以使用协议扩展激活 per-message 压缩,前提是您选择的容器支持它。这必须在握手期间使用 Sec-WebSocket-Extensions 在客户端和服务器之间协商。所以在你的情况下,激活它是不够的,你还需要在客户端上启用它。参见 rfc7692

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

对于接下来的步骤,您可以:

  • 检查您的客户端是否发送 header 并支持此协议扩展
  • 切换到 Jetty 以检查它是否开箱即用
  • 如果它适用于 Jetty 而不是 Reactor Netty,您应该 create an issue on their issue tracker 因为可能缺少一部分 Netty 基础设施(WebSocketServerCompressionHandler?)

编辑

我创建了 reactor/reactor-netty#507