Mercurial > hg > Papers > 2019 > riono-sigos
changeset 14:d958a06673f4
paper section2-8 wrote
author | e165729 <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 08 May 2019 02:30:13 +0900 |
parents | 422802774e74 |
children | 095e808d1ee2 |
files | Paper/riono-sigos.pdf Paper/riono-sigos.tex |
diffstat | 2 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/riono-sigos.tex Wed May 08 01:38:09 2019 +0900 +++ b/Paper/riono-sigos.tex Wed May 08 02:30:13 2019 +0900 @@ -140,7 +140,7 @@ } \label{tb:message} \end{table} - + \subsection{MulticastQueue} 配信側の画面が更新されるとVNCServerから画像データがFRAME\_BUFFER\_UPDATEメッセージとして送られる。その際、画像データの更新を複数のNodeに同時に伝えるためにMulticast Queueというキューに画像データを格納する。 @@ -152,6 +152,13 @@ TreeVNCはLOST\_CHILDというメッセージ通信で、Nodeの切断を検知および木構造の再構成を行なっている。LOST\_CHILDの検出方法にはMulticastQueueを使用しており、ある一定時間MulticastQueueから画像データが取得されない場合、MemoryOverFlowを回避するためにTimeoutスレッドが用意されている。そして、Timeoutを検知した際にNodeとの接続が切れたと判断する。 +\subsection{ZRLEE} +TreeVNCでは、ZRLEE\cite{}というエンコード方法でデータの圧縮を行う。ZRLEEはRFBプロトコルで使用できるZRLEというエンコードタイプを元に生成される。 + +ZRLEはZlib\cite{}で圧縮されたデータとそのデータのバイト数がヘッダーとして送信される。Zlibはjava.util.zip.deflaterとjava.util.zip.inflaterで圧縮と解凍が行える。しかしjava.util.zip.deflaterはデコードに必要な辞書を書き出す(flush)ことが出来ない(図\ref{fig:ZRLE})。従って、圧縮されたデータを途中から受け取るとデータを正しく解凍することが出来ない。 + +そこでZRLEEは一度Root Nodeで受け取ったZRLEのデータをunzipし、データをupdate rectangleと呼ばれる画面ごとのデータに辞書を付与してzipし直すことで初めからデータを読み込んでいなくても解凍できるようになった(図\ref{fig:ZRLEE})。一度ZRLEEに変換してしまえば子Nodeはそのデータを渡すだけで良い。ただしdeflaterとinflaterでは前回までの通信で得た辞書をクリアしなければならないため、Root NodeとNode側では毎回新しく作成する必要がある。 + \section{Multicastの導入} \section{Blokingの手法}