使用消息间 deflate 实现更好的 Websocket 压缩

问题描述 投票:0回答:1

我相信所有现代浏览器都支持“permessage-deflate”形式的 websocket 压缩。然而,据我了解(正如名称所暗示的那样),这只会单独压缩每条消息。就我而言(并且我认为很常见),这没什么用处,因为我发送了许多小的 JSON 消息。

当前或提议的浏览器工具是否有用于连续压缩的功能?我的研究发现了名为 deflate-stream 和 deflate-application-data 的实验性 websocket 扩展,但它们似乎已经死亡。例如,deflate-stream 已于 2011 年从 FireFox 中删除。这很奇怪,因为它非常有用。

我当前的瓶颈是网络带宽,我认为我的应用程序可以从连续(即“消息间”)压缩中受益匪浅。例如,我最常见的消息通常每秒至少发送一次,对于数以万计的 Websockets,这开始导致 100Mbit 连接过载。它看起来像这样(没有空格):

{ "Response": "i", "Data": { "AlwaysSameId": 12345678, "Type": 0, "Style": 0, "Name": "long.similar.names.often.the.same", "Time": 1532492191000000 } }
大多数字段始终或通常相同,只有时间字段始终在变化(但仍然相似)。我的测试表明,对于此类数据,使用“消息间”压缩可以将 JSON 压缩 95%(即小 20 倍!),但“每消息”压缩几乎没有或没有减少(因为 deflate 字典必须是每次都发送)。

我可以在更高级别上实现我自己的“消息间”压缩。 (我之前使用 zlib 1.2.3 在 C 中做过这类事情)这可能有点乏味,因为我必须实现两端,或者至少是大多数数据的方向 - 即在后端(Golang)中压缩和在前端解压缩(Javascript)。

我刚刚收到关于 websocket 压缩发生的情况的建议和澄清。

websocket compression deflate
1个回答
0
投票
该规范允许滑动窗口跨越消息,但也可以协商不跨越消息。

参见

https://datatracker.ietf.org/doc/html/rfc7692#section-7.1.1

© www.soinside.com 2019 - 2024. All rights reserved.