【问题标题】:Websocket sharing LZ77 Sliding window - with context takeoverWebsocket 共享 LZ77 滑动窗口 - 带上下文接管
【发布时间】:2017-06-23 09:31:53
【问题描述】:
我正在查看 permessage-deflate rfc,但我不明白关于 'sharing LZ77 Sliding window' (section 7.2.3.2.) 的部分
表示如果“agreed parameters”不包含“client_no_context_takeover”扩展参数,客户端可以通过引用LZ77滑动窗口中的历史,将下一条消息的payload压缩成更少的字节。
服务器如何知道客户端是使用相同的滑动窗口还是使用新的滑动窗口?
服务器将如何解压消息?
如何使用 Zlib(或任何其他库)来压缩/解压缩这样的消息?
【问题讨论】:
标签:
websocket
zlib
deflate
permessagedeflate
【解决方案1】:
如果同意client_no_context_takeover,则始终假设下一条消息可以使用之前的滑动窗口内容。如果没有,则不会引用前一个窗口,也不会造成任何伤害。您必须继续假设任何压缩消息都可以引用滑动窗口并更新滑动窗口,因为第三条消息可以引用滑动窗口中的第一条和第二条消息,即使第二条消息没有引用第一条消息.
要解压,维护一个 zlib inflate 实例并继续为其提供压缩数据。 inflate 实例将为您维护滑动窗口。将00 00 ff ff 附加到每个压缩消息并将其提供给inflate()。如果在压缩数据中引用,则每个后续消息都将使用由先前消息构建的滑动窗口。