一尘不染

WebSocket如何压缩消息?

json

JSON.stringify显然不是非常节省空间。例如,当[123456789,123456789]可能需要大约5个字节时,它将占用20+字节。websocket是否在发送到流之前压缩其JSON?


阅读 1100

收藏
2020-07-27

共1个答案

一尘不染

从本质上讲,WebSocket只是用于TEXT或BINARY数据的一组框架。

它本身不执行压缩。

但是,WebSocket规范允许扩展,并且野外有各种各样的压缩扩展(其中一项的正式规范已最终确定)。

截至今天(2018年8月),压缩规范为permessage-deflate

在野外看到的一些扩展:

  • permessage-deflate -不论websocket框架的数量如何,使用deflate压缩整个消息的形式化规范的名称。
  • x-webkit-deflate-frame-较早提出的压缩方法,用于压缩每个原始Websocket数据帧。可供Chrome和Safari使用。(现已在Chrome和Safari中弃用)
  • perframe-deflate-上述压缩的重命名版本。可以在各种Websocket服务器实现中使用,也可以在各种基于WebKit的客户端中简要看到。(在现代浏览器中已完全弃用,但仍在各种WebSocket客户端库中显示)

值得注意的是,permessage- deflate扩展是在一个线PMCE(每个消息被压缩扩展)的第一,最终将包括其它压缩方案(正在讨论那些permessage-bzip2permessage- lz4permessage-snappy

2020-07-27