【问题标题】:Spring Boot 2 - Webflux - Websocket - Activate CompressionSpring Boot 2 - Webflux - Websocket - 激活压缩
【发布时间】:2019-04-10 07:15:00
【问题描述】:

我正在使用:

  • Spring Boot 2.1.0 发布
  • Webflux(不是 MVC)
  • Websocket
  • 反应式网络

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

server.compression.enabled: true

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

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

【问题讨论】:

    标签: spring-boot spring-webflux


    【解决方案1】:

    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

    【讨论】:

    • 感谢您的回复!您在客户端调用中使用 Jetty 和 Sec-WebSocket-Extensions 是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2018-06-24
    • 2020-03-15
    • 2021-06-03
    • 2021-12-31
    • 2015-10-26
    • 2022-08-06
    相关资源
    最近更新 更多