2017-06-23 8 views
1

私はpermessage-のdeflate RFC上つもりですし、私は'sharing LZ77 Sliding window' (section 7.2.3.2.)のWebSocketはLZ77スライディングウィンドウを共有する - コンテキストの買収で

それは言う程度の部分を理解していないという「合意されたパラメータは」「client_no_context_takeoverが含まれていなかった場合クライアントは、LZ77スライディングウィンドウ内の履歴を参照することにより、次のメッセージのペイロードをより少ないバイトに圧縮することができます。

クライアントが同じスライディングウィンドウを使用したか、または新しいスライディングウィンドウを使用したかは、サーバーがどのように認識しますか? サーバーはメッセージをどのように圧縮解除しますか? Zlib(または他のlib)を使って、このようなメッセージを圧縮/解凍するにはどうしたらいいですか?

答えて

1

client_no_context_takeoverが合意されている場合、常に次のメッセージが以前のスライディングウィンドウの内容を使用できると仮定します。表示されていない場合、前のウィンドウは参照されず、害もありません。 2番目のメッセージが最初のメッセージを参照していなくても、3番目のメッセージはスライディングウィンドウ内の1番目と2番目のメッセージを参照する可能性があるため、圧縮されたメッセージはすべてのスライディングウィンドウを参照し、 。

解凍するには、zlib inflateインスタンスを維持し、圧縮データを引き続きフィードします。 inflateインスタンスは、あなたのためにスライドウィンドウを維持します。各圧縮メッセージに00 00 ff ffを追加し、それをinflate()に送ります。各後続のメッセージは、圧縮されたデータで参照される場合、以前のメッセージで構築されたスライディングウィンドウを使用します。

関連する問題