2017-06-23 3 views
1

Je vais sur le perMessage-dégonfler rfc et je ne comprends pas la partie sur 'sharing LZ77 Sliding window' (section 7.2.3.2.)Websocket partage LZ77 fenêtre coulissante - avec prise de contexte

Il dit que si les « paramètres convenus » ne contenaient pas le « client_no_context_takeover "paramètre d'extension, le client peut compresser la charge utile du message suivant en moins d'octets en référençant l'historique dans la fenêtre glissante LZ77.

Comment le serveur saura-t-il si le client utilise la même fenêtre coulissante ou en utilise une nouvelle? Comment le serveur décompresse-t-il le message? Comment utiliser Zlib (ou toute autre lib) pour compresser/décompresser un message comme celui-ci?

Répondre

1

Si client_no_context_takeover est accepté, alors supposez toujours que le message suivant peut utiliser le contenu de la fenêtre glissante précédente. Si ce n'est pas le cas, la fenêtre précédente ne sera pas référencée et aucun dommage n'est fait. Vous devez continuer à supposer que tout message compressé peut se référer à la fenêtre glissante et mettre à jour la fenêtre glissante, puisque le troisième message pourrait se référer aux premier et deuxième messages de la fenêtre glissante, même si le deuxième message ne se référait pas au premier .

Pour décompresser, maintenez une instance zlib inflate et continuez à alimenter les données compressées. L'instance inflate maintiendra la fenêtre coulissante pour vous. Ajoutez 00 00 ff ff à chaque message compressé et alignez-le sur inflate(). Chaque message suivant utilisera la fenêtre glissante construite des messages précédents, si elle est mentionnée dans les données compressées.