# HG changeset patch # User Tatsuki IHA # Date 1448894509 -32400 # Node ID 0c8a1baf41cb700783d07e79d3ac8663c3938465 # Parent df9704981b7975d098c853d86e809edf2a2bff1d Fix diff -r df9704981b79 -r 0c8a1baf41cb paper/prosym.pdf Binary file paper/prosym.pdf has changed diff -r df9704981b79 -r 0c8a1baf41cb paper/prosym.tex --- a/paper/prosym.tex Mon Nov 30 22:48:13 2015 +0900 +++ b/paper/prosym.tex Mon Nov 30 23:41:49 2015 +0900 @@ -60,8 +60,8 @@ \begin{abstract} 授業やゼミ等で、それぞれがPC端末を持っている場合では、PCの機能を活かしたコミュニケーションが可能である。教員が操作する画面をそのまま学生に配信したり, ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。 - 画面配信システムTreeVNCは参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる仕組みを取っている。そのため,多人数が参加しても処理性能が下がらない。また、ツリーのルートが参照しているVNCサーバーを変更することで、ケーブルの差し替えなしに画面の切替が可能となる。 - 本研究ではTreeVNCの改良として、複数のネットワークへの対応、 WANへの対応、 マルチディスプレイへの対応するとともに、TreeVNC 有用性を示すために画像データの遅延時間計測を行った。 + 画面配信システムTreeVNCは参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる仕組みを取っている。そのため,多人数が参加しても処理性能が下がらない。また、ツリーのルートが参照しているVNC サーバーを変更することで、ケーブルの差し替えなしに画面の切替が可能となる。 + 本研究ではTreeVNCの改良として、複数のネットワークへの対応、 WANへの対応、 マルチディスプレイへの対応を行うとともに、TreeVNC 有用性を示すために画像データの遅延時間計測を行った。 \end{abstract} \begin{jkeyword} @@ -89,22 +89,22 @@ そのため、参加者は不自由なく手元の PC を使用しながら授業を受ける事が可能になる。 更に発表者の切り替えの際もケーブルの差し替えずに共有する画面の切替を可能としている。 -Tree VNC は VNC を使用した画面配信を行っている。 -しかし通常の VNC では共有側に全ての参加者が接続するため、多人数の際の処理性能が落ちてしまう。 +Tree VNC は VNC\cite{vnc} を使用した画面配信を行っている。 +しかし通常の VNC では配信側に全ての参加者が接続するため、多人数の際の処理性能が落ちてしまう。 Tree VNC では有線でネットワークに接続した参加者をバイナリツリー状に接続し、 配信コストをクライアントに分散させる仕組みになっている。 そのため、授業で先生の画面を表示する際、多人数の生徒が参加しても処理性能が下がらない。 -また、ツリーのルートが参照している VNCサーバーを変更することで、共有する画面の切替が可能となる。 +また、ツリーのルートが参照している VNC サーバーを変更することで、共有する画面の切替が可能となる。 しかし TreeVNC を授業やゼミで使用している中、 様々な問題が発生した。 TreeVNC は起動した PC が複数のネットワークに接続していても、単一のネットワークしか使用することが出来ない。 更に、 NATを越えたネットワーク接続に対応しておらず、遠隔地などで授業やゼミに参加することが出来ない。 -また、ゼミの際に、マルチディスプレイを使用して画面配信を行う際、すべての画面が配信され、不必要な画面まで表示される。 +また、ゼミの際に、マルチディスプレイを使用して画面配信を行う際、すべての画面が配信され、不必要な画面まで表示されてしまう。 -そこで本研究では、上記の問題点を解決し、TreeVNCの有用性を評価することで授業やゼミを円滑に行えることを目標とする。 +そこで、本研究では上記の問題点を解決し、TreeVNCの有用性を評価することで授業やゼミを円滑に行えることを目標とする。 \section{画面配信システムTreeVNC} \subsection{VNCについて} -VNC(Virtual Network Computing)\cite{vnc} は、 RFBプロトコルを用いて遠隔操作を行うリモートデスクトップソフトウェアである。 +VNC(Virtual Network Computing) は、 RFBプロトコルを用いて遠隔操作を行うリモートデスクトップソフトウェアである。 VNC はサーバー側とクライアント(ビューア)側に分かれている。 サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能とする。 \subsection{RFBプロトコル} @@ -148,11 +148,15 @@ TreeVNC は ZRLEE\cite{taninari:2012a} というエンコードでデータのやり取りを行う。 ZRLEE はRFB プロトコルで使えるエンコーディングタイプの ZRLE を元に生成される。 + ZRLE は Zlib\cite{zlib} で圧縮されたデータとそのデータのバイト数がヘッダーとして付けて送られてくる。 Zlib は java.util.zip.deflater と java.util.zip.inflater で圧縮と解凍が行える。 + しかし、 java.util.zip.deflater は解凍に必要な辞書を書き出す(flush)ことが出来ない。 辞書を書き出すことが出来ないため、 Zlib圧縮されたデータを途中から受け取ってもデータを正しく解凍することが出来ない。 + そこで ZRLEE は 一度 Root Node で受け取った ZRLE のデータを unzip し、 データをzip し直して最後に finish() をいれることで初めからデータを呼んでいなくても解凍を行えるようにした。 + 一度 ZRLEE に変換してしまえば子 Node はそのデータをそのまま流すだけで良い。 ただし、deflater と inflater では前回までの通信で得た辞書をクリアしないといけないため、 Root Node と Node 側では毎回新しく作る必要がある。 @@ -241,9 +245,9 @@ TreeVNC は Lost\_CHILD というメッセージ通信で Node の切断を検知・木の再構成を行っている。 -TreeVNC は VNCサーバーから送られる画像データ(FRAME\_BUFFER\_Update)を MulticastQueue というキューに蓄積しており、 +TreeVNC は VNC サーバーから送られる画像データ(FRAME\_BUFFER\_Update)を MulticastQueue というキューに蓄積しており、 Node はこのキューから画像データを取得し、画面を描画している。 -Lost\_Child の検出方法は、この MulticastQueue を使用している。 +Lost\_Child の検出方法はこの MulticastQueue を使用している。 ある一定時間 MulticastQueue から画像データが取得されない場合 Memory Over Flow を回避するために Timeout スレッドが用意されている。 Timeout を検知した際、Node との接続が切れたと判断する。 @@ -260,11 +264,11 @@ \begin{center} \includegraphics[width=70mm]{./pic/lostChild1.pdf} \end{center} - \caption{lostChild を検知・再接続} + \caption{LOST\_CHILD を検知・再接続} \label{fig:lostchild1} \end{figure} -Lost\_Child によって、 切断された全ての Node を検知することができるため、 nodeList の更新が正しく行われる。 +LOST\_CHILD によって、 切断された全ての Node を検知することができるため、 nodeList の更新が正しく行われる。 よって、新しく接続に来た Node を適切な場所に接続することが可能となる。 \subsection{共有画面切り替え} @@ -274,16 +278,16 @@ 画面の共有にプロジェクタを使用する場合、 発表者が変わる度にケーブルの抜き差しを行う必要がある。 その際に、ディスプレイ解像度を設定し直す必要が出たり、 接続不良が起こる等の煩わしい問題が生じることがある。 -従来のVNCを使用する場合、 画面の切り替えの度に一旦VNCを終了し、発表者のVNCServerへと再接続を行う必要がある。 +従来のVNCを使用する場合、 画面の切り替えの度に一旦VNCを終了し、発表者の VNC サーバーへと再接続を行う必要がある。 -TreeVNC は、配信者の切り替えの度に生じる問題を解決している。 +TreeVNC は配信者の切り替えの度に生じる問題を解決している。 TreeVNC を立ち上げることで、ケーブルを使用する必要なしに、各参加者の手元のPCに発表者の画面を共有することができる。 -画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、ビューワの Share Screen ボタンを押すことによって、配信者の切り替えを行うことができる。 +画面の切り替えはユーザが VNC サーバーへの再接続を行うことなく、ビューアの Share Screen ボタンを押すことによって、配信者の切り替えを行うことができる。 -TreeVNC の Root Node は配信者の VNCServer と通信を行っている。 -VNCServer から画面データを受信し、そのデータを 子 Node へと送信している。 -配信者切り替え時に Share Screen ボタン が押されると、 -Root Node は Share Screen ボタン を押したクライアントの VNC サーバー と通信を始める。 +TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている。 +VNC サーバーから画面データを受信し、そのデータを 子 Node へと送信している。 +配信者切り替え時に Share Screen ボタンが押されると、 +Root Node は Share Screen ボタン を押したクライアントの VNC サーバーと通信を始める。 そのためTreeVNCは配信者切り替えの度に VNC を終了し、再接続する必要がない。 \section{TreeVNCの新機能} @@ -293,25 +297,24 @@ 配信者の画面をリアルタイムに取得するため、 描画処理に時間のかからないモードを追加する。 -画像描画処理には、 -高画質優先の QUALITY モードと描画速度優先の SPEED モードがある。 +画像描画処理には高画質優先の QUALITY モードと描画速度優先の SPEED モードがある。 今まで TreeVNC は QUALITY モードで使用していた。 -今回どちらのモードを使用するかを ビューワ から変更出来るようにした。 -これにより、描画処理の遅延を解決することができた。 +今回どちらのモードを使用するかをビューアから変更出来るようにした。 +これにより、描画処理の遅延を解決することが可能となった。 \subsection{マルチディスプレイ対応} 画面配信側のPCがマルチディスプレイの場合、 -VNCServer からは複数の画面全体の画像データが送信されてしまう。 +VNC サーバーからは複数の画面全体の画像データが送信されてしまう。 授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。 そこで、画面を共有する際、ディスプレイを選択させ、画面共有を行う機能を追加した。 ディスプレイの情報は個々のクライアントでしか取得ができない。 そのため、配信側は画面の切替を行う際に、ディスプレイを選択し、そのディスプレイの左上と右下の座標を取得する。 -その座標を Root Node への画面切り替えを要求する SERVER\_CHANGE\_REQUEST message に付加させる。 -Root Node は 配信側の VNCServer に画像データを要求する FRAMEBUFFER\_UPDATE\_REPLY message に送信された座標を付加する。 -VNC サーバーは要求された座標内の画像データを FRAMEBUFFER\_UPDATE message で Root Node に送信する。 +その座標を Root Node への画面切り替えを要求する SERVER\_CHANGE\_REQUEST メッセージに付加させる。 +Root Node は 配信側の VNC サーバー に画像データを要求する FRAMEBUFFER\_UPDATE\_REPLY メッセージに送信された座標を付加する。 +VNC サーバーは要求された座標内の画像データを FRAMEBUFFER\_UPDATE メッセージで Root Node に送信する。 これにより、一画面のみの表示が可能となる。 図\ref{fig:multidisplay} は Display1 のみを画面共有する例を示している。 @@ -343,10 +346,9 @@ TreeManager では木構造を管理する nodeList が生成される。 この nodeList を元に、新しい Node の接続や、切断検出時の接続の切り替え等を行う。 -Root Node の保持しているネットワーク毎にTreeManager を生成する様に変更した。 -新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得する。 -その TreeManager に Node 接続の処理を任せる。 -そのため、 TreeVNC を複数のネットワーク別に木構造を構成することができる。 +Root Node の保持しているネットワーク毎にTreeManager を生成する用に変更を行った。 +新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得し、 Node 接続の処理を任せる。 +そのため、 TreeVNC が複数のネットワーク別に木構造を構成することが可能となる。 \subsection{WANへの対応} 遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。 @@ -374,26 +376,26 @@ \section{TreeVNC の評価} \subsection{木の深さによる画像データ伝達の遅延} -VNCサーバー から受信する画像データ、 TreeVNC で扱われるメッセージ通信は構成された木を伝って伝達される。 -接続する人数が増える毎に木の段数は増えていく。 そこで Root Node から木の末端の Clinet Node までの画像データ伝達の遅延を検証する実験を行った。 +VNC サーバー から受信する画像データ、 TreeVNC で扱われるメッセージ通信は構成された木を伝って伝達される。 +接続する人数が増える毎に木の段数は増えていく。 そこで Root Node から木の末端の Node までの画像データ伝達の遅延を検証する実験を行った。 \subsection{実験環境} 授業を受講している学生が TreeVNC を使用した状態で実験を行った。 TreeVNC には最大で17名が接続していた。 \subsection{メッセージを使用した実測} -TreeVNC を伝搬するメッセージに、CHECK\_DELAY・CHECK\_DELAY\_REPLY を追加した。 +TreeVNC を伝搬するメッセージに、CHECK\_DELAY,CHECK\_DELAY\_REPLYを追加した。 CHECK\_DELAY は Root Node から 末端の Node まで伝達するメッセージと画像データ、 CHECK\_DELAY\_REPLY は各 Node から Root Node まで伝達するメッセージである。 CHECK\_DELAY メッセージは送信時刻を付けて送信する。 Root Nodeから CHECK\_DELAY 送信し、末端の Node まで各 Node を伝いながら伝達して行く。 -CHECK\_DELAY\_REPLY は CHECK\_DELAY から受け取った送信時刻に画像データのサイズを付けて送信する。 +CHECK\_DELAY\_REPLY は CHECK\_DELAY から受け取った送信時刻をそのままに、 画像データのサイズを付けて送信する。 CHECK\_DELAY を受け取った各 Node は CHECK\_DELAY\_REPLY を接続している親 Node に送信する。 CHECK\_DELAY\_REPLY を受け取った Root Node はメッセージと画像データの伝達にどれだけの時間がかかったかを計算する。 -データ計算方法を以下のソースコード\ref{calc}に記述する。 この変数``time''は CHECK\_DELAY\_REPLY に付いている送信時刻である。 +データ計算方法を以下のソースコード\ref{calc}に記述する。 この変数 time は CHECK\_DELAY\_REPLY に付いている CHEKC\_DELAY の送信時刻である。 \begin{table}[htb] \begin{lstlisting}[label=calc, caption=遅延時間の計算方法] @@ -436,28 +438,31 @@ \end{figure} \section{配布方法、リポジトリ} -TreeVNC は jar で配布されている(http://www.cr.ie.u-ryukyu.ac.jp/software/TreeVNC.html)。 -また、Mercurial リポジトリでバージョン管理を行っている(http://www.cr.ie.u-ryukyu.ac.jp/hg/Applications/TreeVNC)。 +TreeVNC は jar で配布を行っている (http://www.cr.ie.u-ryukyu.ac.jp/software/TreeVNC.html)。 + +また、Mercurial でバージョン管理を行っている(http://www.cr.ie.u-ryukyu.ac.jp/hg/Applications/TreeVNC)。 \section{まとめ} -本研究では画面配信システムTreeVNCをマルチディスプレイ、WAN に対応させた。 +本研究では画面配信システムTreeVNCを複数のネットワーク、 WAN、 マルチディスプレイに対応させた。 + +複数のネットワークに対応したことで、 PC が接続している全てのネットワークで TreeVNC を使用できるようになった。 + +WANに対応することでNATを超えているネットワークのユーザーが TreeVNC に参加することが可能となった。 マルチディスプレイに対応したことで、 配信者が配信したいディスプレイを選択し、画面配信することが可能となった。 -WANに対応することでNATを超えているネットワークのユーザーが TreeVNC に参加することが可能となった。 - 今後の課題として機能の安定化、 WAN での画面切り替え、 ユーザビリティの向上、 新機能の評価が上げられる。 機能の安定化として今回の画像データの遅延実験で判明したボトルネックになる Node の対処を行う。 -ネックになっている Node の検出として、CHEKC\_DELAY メッセージの時間を使用して、その Node がネックかどうかを判断する予定である。 +ネックになっている Node の検出として、CHEKC\_DELAY メッセージの時間を使用し、その Node がネックかどうかを判断する予定である。 -今回追加した Direct Connection ではNATを越えたネットワークの画面を配信を行うのみであり、TreeVNC の利点の1つである画面切り替えを行うことが出来ない。 -そのため、NATを越えたネットワークでの画面切り替えの実装は必須と言える。 +今回追加した Direct Connection ではNATを越えたネットワークの画面の配信を行うのみであり、 TreeVNC の利点の1つである画面切り替えを行うことが出来ない。 +そのため、NATを越えたネットワークでの画面切り替えの実装を行う。 Direct Connection などの一部の機能はコマンドラインオプションで指定する必要があるため、一般ユーザーでは操作するのが困難である。 -そこで、 今までコマンドラインオプションで指定していた機能を ビューワ で操作するように変更を行う。 +そこで、 今までコマンドラインオプションで指定していた機能をビューアで操作するように変更を行う。 -今回新機能としてマルチディスプレイ、 WANへの対応を行ったが、 まだ評価を行っていない。 +今回新機能としてマルチディスプレイ、 WANへの対応を行ったが、まだ評価を行っていない。 そのため、適切な評価方法を思考し、評価を行う必要がある。 \nocite{*}