Websocket 共享 LZ77 滑动 window - 上下文接管

Websocket sharing LZ77 Sliding window - with context takeover

我正在查看 permessage-deflate rfc,但我不理解有关 'sharing LZ77 Sliding window' (section 7.2.3.2.)

的部分

表示如果“约定参数”不包含“client_no_context_takeover”扩展参数,客户端可以参考LZ77滑动window.

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

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

要解压缩,请维护一个 zlib inflate 实例并继续向其提供压缩数据。 inflate 实例将为您维护滑动 window。将 00 00 ff ff 附加到每个压缩消息并将其提供给 inflate()。如果在压缩数据中引用,则每个后续消息都将使用以前消息构建的滑动window。