1

我正在查看 permessage-deflate rfc,但我不明白关于“共享 LZ77 滑动窗口”的部分(第 7.2.3.2 节。)

它说如果“约定参数”不包含“client_no_context_takeover”扩展参数,客户端可以通过引用LZ77滑动窗口中的历史将下一条消息的有效负载压缩成更少的字节。

服务器如何知道客户端是使用相同的滑动窗口还是使用新的滑动窗口?服务器将如何解压消息?如何使用 Zlib(或任何其他库)来压缩/解压缩这样的消息?

4

1 回答 1

1

如果同意client_no_context_takeover,则始终假设下一条消息可以使用之前的滑动窗口内容。如果没有,则不会引用前一个窗口,也不会造成任何伤害。您必须继续假设任何压缩消息都可以引用滑动窗口并更新滑动窗口,因为第三条消息可以引用滑动窗口中的第一条和第二条消息,即使第二条消息没有引用第一条消息.

要解压,维护一个 zlibinflate实例并继续为其提供压缩数据。该inflate实例将为您维护滑动窗口。附加00 00 ff ff到每个压缩消息并将其提供给inflate(). 如果在压缩数据中引用,则每个后续消息将使用由先前消息构建的滑动窗口。

于 2017-06-24T14:32:48.697 回答