Совместное использование веб-сокетов 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(), Каждое последующее сообщение будет использовать скользящее окно, построенное из предыдущих сообщений, если оно указано в сжатых данных.

Другие вопросы по тегам