view paper/prosym.tex @ 18:a8c64ed24b6d

Edit purpose of research
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Mon, 30 Nov 2015 16:42:56 +0900
parents b2832058b822
children df9704981b79
line wrap: on
line source

% withpage: ページ番号をつける (著者確認用)
\documentclass[dvipdfmx]{ipsjprosym}
\usepackage[dvipdfmx]{graphicx}
\usepackage{url}
\usepackage{listings, jlisting}
\lstset{%
  language={java},%使用言語
  basicstyle={\small},%書体
  commentstyle={\small\itshape},%コメントの書体
  keywordstyle={\small\bfseries},%キーワードの書体
  %identifierstyle={\small},%
  %ndkeywordstyle={\small},%
  stringstyle={\small},%文字列の書体
  frame={trlb},%外枠
  breaklines=true,%改行
  columns=[l]{fullflexible},%
  xrightmargin=0zw,%
  xleftmargin=3zw,%
  numbers=left,%行番号の表示
  numberstyle={\scriptsize},%行番号の書体
  numbersep=1zw,%
  stepnumber=1,
  lineskip=-0.5ex,%
  captionpos=b,%キャプションの位置
  moredelim=**[s][\color{red}]{\"compressed}{\"},
}
\renewcommand{\lstlistingname}{Code}
\input{dummy.tex} %% Font 

\begin{document}

% ユーザー定義したマクロなど
\makeatletter
\let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
\def\<{\(\langle\)} 
\def\>{\(\rangle\)} 
%\def\|{\verb|} 
\def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline} 
\def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\} 
\def\LATEX{\iLATEX\Large} 
\def\LATEx{\iLATEX\normalsize} 
\def\LATex{\iLATEX\small} 
\def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em 
\   T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX} 
\def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi} 
\def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi} 
\def\Quote{\list{}{}\item[]} 
\let\endQuote\endlist
\def\TT{\if@LaTeX@e\tt\fi}
\def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
    $\backslash$#1\fi}

% Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{有線 LAN 上のPC画面配信システムTreeVNCの改良}

\affiliate{IE}{琉球大学工学部情報工学科}

\author{伊波 立樹}{Tatsuki IHA}{IE}
\author{河野 真治}{Shinji KONO}{IE}

\begin{abstract}
    授業やゼミ等で、それぞれがPC端末を持っている場合では、PCの機能を活かしたコミュニケーションが可能である。教員が操作する画面をそのまま学生に配信したり, ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
    画面配信システムTreeVNCは参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる仕組みを取っている。そのため,多人数が参加しても処理性能が下がらない。また、ツリーのルートが参照しているVNCサーバーを変更することで、ケーブルの差し替えなしに画面の切替が可能となる。
    今研究ではTreeVNCの改良として、複数のネットワークへの対応、 WANへの対応、 マルチディスプレイへの対応するとともに、TreeVNC 有用性を示すために画像データの遅延時間計測を行った。
\end{abstract}

\begin{jkeyword}
\end{jkeyword}

\maketitle

% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{研究背景と目的}
授業やゼミ等で、それぞれが PC 端末を持っている場合では、
PC の機能を活かしたコミュニケーションが可能である。

通常の授業では先生の用意した資料、 PC 画面を見ながら授業が進むことが多い。 
ゼミでは発表者を切り替えながら発表を行う。

通常これらの画面を表示するためにプロジェクタが使用されている。
しかし、プロジェクタでは通常の授業の際、参加者はプロジェクタに集中するため、手元の PC をほぼ使用することができない。
更に手元の PC を使う際はプロジェクタと PC を行き来するため、目に負担がかかってしまう。
またゼミの際には発表者を切り替えるたびにプロジェクタにケーブルを差し替える必要がある。
ケーブルの差し替えの際に発表者の PC によってアダプターの種類や解像度の設定によって正常に PC 画面を表示できない場合もある。

画面配信システム TreeVNC\cite{oc:thesis}\cite{taninari:2012a}は発表者の画面を参加者の PC に表示する。
そのため、参加者は不自由なく手元の PC を使用しながら授業を受ける事が可能になる。
更に発表者の切り替えの際もケーブルの差し替えずに共有する画面の切替を可能としている。

Tree VNC は VNC を使用した画面配信を行っている。
しかし通常の VNC では共有側に全ての参加者が接続するため、多人数の際の処理性能が落ちてしまう。
Tree VNC では参加者をバイナリツリー状に接続し、 配信コストをクライアントに分散させる仕組みになっている。
そのため、授業で先生の画面を表示する際、多人数の生徒が参加しても処理性能が下がらない。
また、ツリーのルートが参照している VNCサーバーを変更することで、共有する画面の切替が可能となる。

本研究では 複数のネットワークへの対応、 WAN 、マルチディスプレイへの対応を行う。

TreeVNC は起動した PC が複数のネットワークに接続していても、単一のネットワークしか使用することが出来なかった。
それに対応するため、木構造の生成方法を見直し、複数ネットワークに対応した。
TreeVNC はNATを越えたネットワーク接続に対応しておらず、遠隔地などで授業やゼミに参加することが出来なかった。
そのため、NATを越えた新しい接続方法を提案し、実装を行った。
また、ゼミの際に、マルチディスプレイを使用して画面配信を行う際、全ての画面が送信されることがわかった。発表の際は複数の画面を表示する必要ない。
そこで、配信する際に配信するディスプレイ情報を取得し、配信を行うことで、対応した。

\section{画面配信システムTreeVNC}
\subsection{VNCについて}
VNC(Virtual Network Computing) は、 RFBプロトコルを用いて遠隔操作を行うリモートデスクトップソフトウェアである。
VNC はサーバー側とクライアント(ビューア)側に分かれている。 サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能とする。

\subsection{RFBプロトコル}
RFB(remote frame buffer)プロトコル\cite{rfbProtocol}とは、自身の画面を送信し、ネットワーク越しに他者の画面に表示するプロトコルである。
ユーザが居る側をRFBクライアント側と呼び、Framebufferへの更新が行われる側はRFBサーバと呼ぶ。
Framebufferとは、メモリ上に置かれた画像データのことである。
RFBプロトコルでは、最初にプロトコルバージョンの確認や認証が行われる。
その後、クライアントに向けてFramebufferの大きさやデスクトップに付けられた名前などが含まれている初期メッセージが送信される。
RFBサーバ側はFramebufferの更新が行われるたびに、RFBクライアントに対してFramebufferの変更部分だけを送信する。
更にRFBクライアントのFramebufferUpdateRequestが来るとそれに答え返信する。
RFBプロトコルは、描画データに使われるエンコードが多数用意されており、また独自のエンコードを実装することもできるプロトコルである。

\subsection{多人数で VNC を使用する時の問題点}
VNCを使用すればクライアント側にサーバー側の画面を表示することが可能である。 
しかし、多人数のクライアントが1つのサーバーに接続してしまうと処理性能が落ちてしまうという問題点がある。

また、 ゼミ等の発表で画面配信者が頻繁に切り替わる場合、
配信者が替わる度にアプリケーションを終了し、接続をし直さないといけないという問題がある。

\subsection{TreeVNC の構造}
TreeVNC は Java を用いて作成された TightVNC(Tight Virtual Network Computing)\cite{tightvnc} を元に作成されている。

TreeVNC は クライアント同士を接続させ、画面描画のデータを受け取ったクライアントが次のクライアントにデータを流す方式を取っている。
また、サーバへ接続しに来たクライアントをバイナリツリー状に接続する(図\ref{fig:tree})。
バイナリツリー状に接続することで、$N$台のクライアントが接続しに来た場合、画面配信の画像データをコピーする回数は従来の VNC ではサーバ側で$N$回する必要があるが、TreeVNCでは各ノードが2回ずつコピーするだけで済む。 

バイナリツリーのルートのノードを Root Node と呼び、 Root Node に接続されるノードを Node と呼ぶ
Root Node は子 Nodeにデータを流す機能に加え、各 Node の管理、 VNC サーバーから流れてきた画像データの管理を行う。 
Node は 親 Node から送られたデータを 自分の子 Node に流す機能、 逆に子 Node から送られてきたデータを 親 Node に流す機能がある。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/TreeVNC.pdf}
    \end{center}
    \caption{構成される木構造}
    \label{fig:tree}
\end{figure}

\subsection{TreeVNC の通信経路}
TreeVNC の通信経路として以下が挙げられる
\begin{itemize}
    \item ある Node から Root Node に直接通信を行う send direct message (Node to Root)
    \item Root Node からある Node に直接通信を行う send direct message (Root to Node)
    \item Root Node から木の末端の Node までのすべての Nodeに通信を行う messeage down tree (Root to Node)
    \item ある Node から木構造を上に辿って Root Nodeまで通信を行う message up tree (Node to Root)
    \item Root Node から配信者の VNC サーバーへの通信を行う send message (Root to VNCServer)
    \item VNC サーバーから Root Node への通信を行う send message (VNCServer to Root)
\end{itemize}


\subsection{ノード間で行われるメッセージ通信}
RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。
TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。

\begin{table}[h!]
    \caption{通信経路とメッセージ一覧}
    \large
    \scalebox{0.4} {
        \begin{tabular}{|l|l|l|} \hline
            通信経路            & message                    & 説明 \\ \hline \hline
                                & FIND\_ROOT                 & TreeVNC接続時にRoot Nodeを探す。 \\ \cline{2-3}
            send direct message & WHERE\_TO\_CONNECT         & 接続先をRoot Nodeに聞く。 \\ \cline{2-3}
            (Node to Root)      & LOST\_CHILD                & 子Nodeの切断をRoot Nodeに知らせる。 \\ \hline \hline

                                & FIND\_ROOT\_REPLY          & FIND\_ROOTへの返信。 \\ \cline{2-3}
            send direct message & CONNECT\_TO\_AS\_LEADER    & 左子Nodeとして接続する。接続先のNodeが含まれている。 \\ \cline{2-3}
            (Root to Node)      & CONNECT                    & 右子Nodeとして接続する。接続先のNodeが含まれている。 \\ \hline \hline

            message down tree   & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。\\ \cline{2-3}
            (Root to Node)      & CHECK\_DELAY               & 通信の遅延を測定する。 \\ \hline \hline

            message up tree     & CHECK\_DELAY\_REPLY        & CHECK\_DELAYへの返信。 \\ \cline{2-3}
            (Node to Root)      & SERVER\_CHANGE\_REQUEST    & 画面切り替え要求。 \\ \hline \hline

                                & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求。 \\ \cline{2-3}
            send message        & SET\_PIXEL\_FORMAT         & pixel値の設定。 \\ \cline{2-3}
            (Root to VNCServer) & SET\_ENCODINGS             & pixelデータのencodeTypeの設定。 \\ \cline{2-3}
                                & KEY\_EVENT                 & キーボードからのイベント。 \\ \cline{2-3}
                                & POINTER\_EVENT             & ポインタからのイベント。 \\ \cline{2-3}
                                & CLIENT\_CUT\_TEXT          & テキストのカットバッファを持った際のmessage。 \\ \hline \hline

                                & FRAMEBUFFER\_UPDATE        & 画像データ。EncodingTypeを持っている。 \\ \cline{2-3}
            send message        & SET\_COLOR\_MAP\_ENTRIES   & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3}
            (VNCServer to Root) & BELL                       & ビープ音を鳴らす。 \\ \cline{2-3}
                                & SERVER\_CUT\_TEXT          & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline
        \end{tabular}
    }
    \label{tb:message}
\end{table}

図\ref{fig:message}は TreeVNC で Node が Root Node に接続し、画像データを受信するまでのメッセージ通信の様子である。
図\ref{fig:message}の手順として

\begin{itemize}
    \item 接続を行う Node (以下 Client Node)はMulticast通信で Root Node に対してFIND\_ROOTを送信する(1:findRoot())
    \item Root NodeがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
    \item Client Node 側で、どのRoot Nodeに接続するかを選択するパネルが表示される
    \item Client Node はパネルで接続するRoot Nodeを選択し、Rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
    \item 受信した Root Node は Client Node の接続先をCONNECT\_TOで送信する(4:connectTo)
    \item Client Node は Root の指定した接続先に接続しに行く
    \item Root Node, Client Node間の接続が確立後、Root Node から Clinet Node に対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(5:framebufferUpdate())
\end{itemize}

を行っている。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=65mm]{./pic/message.pdf}
    \end{center}
    \caption{node 間で行われるメッセージ通信}
    \label{fig:message}
\end{figure}

\subsection{切断時の木の再構成}
TreeVNC はバイナリツリーでの接続という特性上 Node が切断されたことを検知できずにいると、Node 同士で構成された木構造が崩れてしまい、新しい Node が接続に来た場合に適切な場所に Node を接続することができなくなってしまう。
木構造を崩さないよう、Node 同士の接続を再構成を行う必要がある。

TreeVNC の木構造のネットワークトポロジーは Root Node が持っている nodeList というリストで管理している。
つまり、Node の接続が切れた場合、木の再構成を行うため Root Node に知らせなければならない。

TreeVNC は Lost\_CHILD というメッセージ通信で Node の切断を検知・木の再構成を行っている。

TreeVNC は VNCサーバーから送られる画像データ(FRAME\_BUFFER\_Update)を MulticastQueue というキューに蓄積しており、
Node はこのキューから画像データを取得し、画面を描画している。
Lost\_Child の検出方法は、この MulticastQueue を使用している。
ある一定時間 MulticastQueue から画像データが取得されない場合 Memory Over Flow を回避するために Timeout スレッドが用意されている。
Timeout を検知した際、Node との接続が切れたと判断する。

Lost\_Child の検知・木の再構成を以下に示す。
\begin{itemize}
  \item 子 Node の切断を検知した Node が Root Node へ LOST\_CHILD メッセージを送信する(図\ref{fig:lostchild1}中, 1:lostChild())
  \item LOST\_CHILD メッセージを受け取った Root Node は nodeList の更新を行う(図\ref{fig:lostchild1}中, 2:updateNodeList())
  \item 切断した Node を nodeList から消し、nodeList の最後尾の Node に切断した node number を割り当てる
  \item Root Node は最後尾の Node に、切断した子 Node が接続していた親 Node に接続する様に CONNECT\_TO メッセージを送信する(図\ref{fig:lostchild1}中, 3:connectTo(1))
  \item 最後尾の Node が子 Node を失った親 Node へ接続しに行く(図\ref{fig:lostchild1}中, 4:connectToParent(1))
\end{itemize}

\begin{figure}[ht]
  \begin{center}
    \includegraphics[width=70mm]{./pic/lostChild1.pdf}
  \end{center}
  \caption{lostChild を検知・再接続}
  \label{fig:lostchild1}
\end{figure}

Lost\_Child によって、 切断された全ての Node を検知することができるため、 nodeList の更新が正しく行われる。
よって、新しく接続に来た Node を適切な場所に接続することが可能となる。

\subsection{共有画面切り替え}
ゼミでは発表者が順々に入れ替わる。発表者が入れ替わる度に共有する画面の切り替えが必要となる。
ゼミを円滑に進めるために、画面の切り替えをスムーズに行いたい。

画面の共有にプロジェクタを使用する場合、 発表者が変わる度にケーブルの抜き差しを行う必要がある。
その際に、ディスプレイ解像度を設定し直す必要が出たり、 接続不良が起こる等の煩わしい問題が生じることがある。

従来のVNCを使用する場合、 画面の切り替えの度に一旦VNCを終了し、発表者のVNCServerへと再接続を行う必要がある。

TreeVNC は、配信者の切り替えの度に生じる問題を解決している。
TreeVNC を立ち上げることで、ケーブルを使用する必要なしに、各参加者の手元のPCに発表者の画面を共有することができる。
画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、ビューワの Share Screen ボタンを押すことによって、配信者の切り替えを行うことができる。

TreeVNC の Root Node は配信者の VNCServer と通信を行っている。
VNCServer から画面データを受信し、そのデータを 子 Node へと送信している。
配信者切り替え時に Share Screen ボタン が押されると、
Root Node は Share Screen ボタン を押したクライアントの VNC サーバー と通信を始める。
そのためTreeVNCは配信者切り替えの度に VNC を終了し、再接続する必要がない。

\section{TreeVNCの新機能}
\subsection{QUALITYモードとSPEEDモード}
高解像度のまま拡大・縮小の処理を行うと、
PC のスペックによっては描画処理に時間がかかってしまうことがある。
配信者の画面をリアルタイムに取得するため、
描画処理に時間のかからないモードを追加する。

画像描画処理には、
高画質優先の QUALITY モードと描画速度優先の SPEED モードがある。
今まで TreeVNC は QUALITY モードで使用していた。

今回どちらのモードを使用するかを ビューワ から変更出来るようにした。
これにより、描画処理の遅延を解決することができた。

\subsection{マルチディスプレイ対応}
画面配信側のPCがマルチディスプレイの場合、
VNCServer からは複数の画面全体の画像データが送信されてしまう。

授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。
そこで、画面を共有する際、ディスプレイを選択させ、画面共有を行う機能を追加した。

ディスプレイの情報は個々のクライアントでしか取得ができない。
そのため、配信側は画面の切替を行う際に、ディスプレイを選択し、そのディスプレイの左上と右下の座標を取得する。
その座標を Root Node への画面切り替えを要求する SERVER\_CHANGE\_REQUEST message に付加させる。 
Root Node は 配信側の VNCServer に画像データを要求する FRAMEBUFFER\_UPDATE\_REPLY message に送信された座標を付加する。 
VNC サーバーは要求された座標内の画像データを FRAMEBUFFER\_UPDATE message で Root Node に送信する。 
これにより、一画面のみの表示が可能となる。

図\ref{fig:multidisplay} は Display1 のみを画面共有する例を示している。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/shareScreenToMultiDisplay.pdf}
    \end{center}
    \caption{マルチディスプレイへの対応}
    \label{fig:multidisplay}
\end{figure}

\subsection{複数のネットワークの対応}
従来の TreeVNC は、クライアントの接続する木構造が単一であった。
そのため、Root Node が複数のネットワークに接続していても、 単一のネットワークでしか使用することができなかった。

この問題を解決するために、 図\ref{fig:multinetworktree}の様に、ネットワーク別に 木構造を形成するように設計した。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/MultiNetworkTree.pdf}
    \end{center}
    \caption{Multi Network Tree}
    \label{fig:multinetworktree}
\end{figure}

TreeVNC は Root Node が TreeManager というオブジェクトを持っている。
TreeManager は TreeVNC の接続部分を管理している。
TreeManager では木構造を管理する nodeList が生成される。
この nodeList を元に、新しい Node の接続や、切断検出時の接続の切り替え等を行う。

Root Node の保持しているネットワーク毎にTreeManager を生成する様に変更した。
新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得する。
その TreeManager に Node 接続の処理を任せる。
そのため、 TreeVNC を複数のネットワーク別に木構造を構成することができる。

\subsection{WANへの対応}
遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。

図\ref{fig:directConnection} にNATを越えたネットワークからの接続を示す。
別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。
この接続を Direct Connection と呼ぶ。

Direct Connection した Node はそのネットワークの Root Node になる。 
そのネットワークの他の Node はそのネットワークの Root Node に接続し、木構造を生成する。

配信側の Root Node は Direct Connection で接続された Root Node に対して Framebuffer Update で 画像データを送信する。
Framebuffer Update が送信された Root Node は そのネットワークの Node に対して Framebuffer Update を送信する。

これにより、NATを越えたネットワークの画面共有が可能となる。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=80mm]{./pic/directConnection.pdf}
        \caption{遠隔地 Node からの接続}
        \label{fig:directConnection}
    \end{center}
\end{figure}


\section{TreeVNC の評価}
\subsection{木の深さによる画像データ伝達の遅延}
VNCサーバー から受信する画像データ、 TreeVNC で扱われるメッセージ通信は構成された木を伝って伝達される。
接続する人数が増える毎に木の段数は増えていく。 そこで Root Node から木の末端の Clinet Node までの画像データ伝達の遅延を検証する実験を行った。

\subsection{実験環境}
授業を受講している学生が TreeVNC を使用した状態で実験を行った。
TreeVNC には最大で17名が接続していた。

\subsection{メッセージを使用した実測}
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 を受け取った各 Node は CHECK\_DELAY\_REPLY を接続している親 Node に送信する。

CHECK\_DELAY\_REPLY を受け取った Root Node はメッセージと画像データの伝達にどれだけの時間がかかったかを計算する。
データ計算方法を以下のソースコード\ref{calc}に記述する。 この変数``time''は CHECK\_DELAY\_REPLY に付いている送信時刻である。

\begin{table}[htb]
    \begin{lstlisting}[label=calc, caption=遅延時間の計算方法]
    Long delay = System.currentTimeMillis() - time;
    \end{lstlisting}
\end{table}


\subsection{深さ毎の遅延結果}
バイナリツリーで木を構成した場合、 Node 数が17台だと深さが4となる。
各木構造の階層毎に、画像データの伝搬にかかった時間を測定した。

図\ref{fig:depth}は遅延の分布を示した散布図である。
X軸はメッセージ伝達にかかった秒数(ms)、 Y軸は画像データのサイズ(Byte)である。

画像データの伝達はほぼ1秒以内に収まっているが、容量が小さい場合でも時間がかかる場合がある。
それはその送信の前に大容量の画像を送信した後の回線のDelayが残っているためだと考えられる。

また、深さ3で極端に遅い場合がある。 遅い原因として、1つの Node がボトルネックになっていることが判明している。
このような極端に遅い Node をそのまま木に配置した場合、その Node の子 Node 以下に影響を及ぼす場合がある。
そのため、遅い Nodeを検出して、木の最後尾に移動させる機能が必要である。

今回4段分のデータでは30名程度の遅延のみしか判断することができないため、更に大人数での実験を繰り返し行う必要がある。

\begin{figure}[ht]
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth1.eps}
    \end{center}
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth2.eps}
    \end{center}
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth3.eps}
    \end{center}
    \begin{center}
        \includegraphics[width=70mm]{./pic/depth4.eps}
    \end{center}
    \caption{深さ毎のデータサイズと遅延の関係(上から深さ1, 2, 3, 4)}
    \label{fig:depth}
\end{figure}

\section{まとめ}
本研究では画面配信システムTreeVNCをマルチディスプレイ、WAN に対応させた。

マルチディスプレイに対応したことで、 配信者が配信したいディスプレイを選択し、画面配信することが可能となった。

WANに対応することでNATを超えているネットワークのユーザーが TreeVNC に参加することが可能となった。

今後の課題として機能の安定化、 WAN での画面切り替え、 ユーザビリティの向上、 新機能の評価が上げられる。

機能の安定化として今回の画像データの遅延実験で判明したボトルネックになる Node の対処を行う。
ネックになっている Node の検出として、CHEKC\_DELAY メッセージの時間を使用して、その Node がネックかどうかを判断する予定である。

今回追加した Direct Connection ではNATを越えたネットワークの画面を配信を行うのみであり、TreeVNC の利点の1つである画面切り替えを行うことが出来ない。
そのため、NATを越えたネットワークでの画面切り替えの実装は必須と言える。 

Direct Connection などの一部の機能はコマンドラインオプションで指定する必要があるため、一般ユーザーでは操作するのが困難である。
そこで、 今までコマンドラインオプションで指定していた機能を ビューワ で操作するように変更を行う。

今回新機能としてマルチディスプレイ、 WANへの対応を行ったが、 まだ評価を行っていない。
そのため、適切な評価方法を思考し、評価を行う必要がある。

\nocite{*}
\bibliographystyle{ipsjunsrt}
\bibliography{prosym}

\end{document}