Совместное использование веб-сокетов LZ77 Раздвижное окно - с захватом контекста
Я перебираю rfc permessage-deflate и не понимаю, что такое разделение скользящего окна LZ77 (раздел 7.2.3.2.)
В нем говорится, что если "согласованные параметры" не содержали параметр расширения "client_no_context_takeover", клиент может сжимать полезную нагрузку следующего сообщения в меньшие байты, ссылаясь на историю в скользящем окне LZ77.
Как сервер узнает, использовал ли клиент то же скользящее окно или новое? Как сервер распакует сообщение? Как я могу использовать Zlib(или любую другую библиотеку) для сжатия / распаковки такого сообщения?
1 ответ
Если client_no_context_takeover согласован, то всегда предполагайте, что следующее сообщение может использовать предыдущее содержимое скользящего окна. Если этого не произойдет, то на предыдущее окно не будут ссылаться и никакого вреда не будет. Вы должны продолжать предполагать, что любое сжатое сообщение может ссылаться на скользящее окно и обновлять скользящее окно, поскольку третье сообщение может ссылаться на первое и второе сообщения в скользящем окне, даже если второе сообщение не относится к первому,
Чтобы распаковать, поддерживать ZLIB inflate
Экземпляр и продолжать кормить его сжатыми данными. inflate
Экземпляр будет поддерживать скользящее окно для вас. присоединять 00 00 ff ff
к каждому сжатому сообщению и передать его inflate()
, Каждое последующее сообщение будет использовать скользящее окно, построенное из предыдущих сообщений, если оно указано в сжатых данных.