Play Framework:通过 WebSocket 对数据进行 Gzip compression/decompression

Play Framework: Gzip compression/decompression of data over WebSocket

Play 中有没有办法通过 WebSocket 通道传递使用 Gzip 压缩的数据?我在 https://www.playframework.com/documentation/2.3.1/GzipEncoding 中读到了关于 GzipFilter 的内容。有没有办法将它与 WebSocket 一起使用? 此外,我的服务器也接受 HTTP 请求,但我不想对它们应用 GZIP。有没有办法只在 WebSocket 中使用 Gzip,不包括 HTTP?

据我所知,websocket 连接有一些压缩扩展。 (https://datatracker.ietf.org/doc/html/draft-tyoshino-hybi-permessage-compression-00).

在某些浏览器中,这应该现在已修复并默认启用 (Chrome)。 在其他(Firefox、WebKit)中(还)不是:https://bugzilla.mozilla.org/show_bug.cgi?id=792831 and https://bugs.webkit.org/show_bug.cgi?id=98840

只要客户端和服务器都支持,启用Gzip应该没有问题。

您可以配置何时使用 Gzip(至少在某种程度上)。例如,如果您有一个 JSON API 并且您还提供正常的 HTML,您可以决定仅对 JSON 数据进行 Gzip:

new GzipFilter(shouldGzip = (request, response) =>
  response.headers.get("Content-Type").exists(_.startsWith("application/json")))