Mai*_*tor 18 javascript json websocket socket.io
JSON.stringify显然不是很节省空间.例如,[123456789,123456789]在需要大约5时占用20多个字节.在发送到流之前,websocket会压缩其JSON吗?
Joa*_*elt 35
WebSocket的核心只是TEXT或BINARY数据的一组框架.
它本身不执行压缩.
但是,WebSocket规范允许Extensions,并且在野外有各种各样的压缩扩展(其中一个的形式化规范已经完成).
截至今天(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-bzip2,permessage-lz4和permessage-snappy)
Mys*_*yst 15
websocket在发送到流之前是否会压缩其JSON?
简短的回答是:有时,但你不能依赖它.
正如Joakim Erdfelt恰当地指出的那样,Websocket连接支持Text和Binary消息.
JSON只是传输数据的一种方式,具有通用性和易用性的优点(就空间而言是浪费).
您可以使用Websocket API轻松传输二进制数据,从而消除带宽开销,但代价是其他问题(例如,endieness,字长,解析等).
许多浏览器还支持Websocket消息压缩作为Websocket协议的扩展(尽管服务器可能不支持扩展).
使用Sec-WebSocket-ExtensionsHTTP标头协商扩展.协商通常由客户端/服务器实现,而不提供用于控制它们的公共API.
直到2015年,有许多方法和实现在野外,但自2015年12月以来, RFC 7692是消息压缩的唯一真正竞争者,事情更加清晰.
RFC 7692在Websocket"数据包"中包装(并且可能将其分段)之前压缩整个消息,使得它比以前的压缩方案更容易实现.
当前草案提供permessage-foo压缩协商方案(其中foo是请求/支持的压缩).
我permessage-deflate自己只经历了扩展.
请注意,扩展协商是可选的,这意味着即使您的服务器支持扩展,通常也允许潜在的网络客户端在没有压缩的情况下协商连接.
此外,RFC 7692支持选择性压缩,这意味着某些消息可能会被压缩,而其他消息则不会被压缩...
...例如,[123456789,123456789]可能按原样发送,因为它的长度表示它不太可能值得压缩.
permessage-deflate(RFC 7692),2017年8月8日:这是评论中的信息的组合,最后更新时间为2017年8月8日.
如果我遗漏了任何内容,请在此处添加并更新日期.
x-webkit-deflate-frame)| 归档时间: |
|
| 查看次数: |
23069 次 |
| 最近记录: |