我相信所有现代浏览器都支持“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 压缩发生的情况的建议和澄清。