# HG changeset patch # User oc # Date 1424208850 -32400 # Node ID ad8beccc487be9827e87e3cd2d7e8835dfa1bd4b # Parent 39c7868b6f3d7126bc97907421be8a2420e84484 update chapter 3 diff -r 39c7868b6f3d -r ad8beccc487b paper/chapter3.tex --- a/paper/chapter3.tex Wed Feb 18 05:02:45 2015 +0900 +++ b/paper/chapter3.tex Wed Feb 18 06:34:10 2015 +0900 @@ -8,7 +8,7 @@ port 番号は一意なので、1台で複数の TreeVNC を立ち上げることができなかった。 今回、動的に port 番号を割り当てることで、 -1つの PC で複数の TreeVNC を起動することを可能にした。 +1台の PC で複数の TreeVNC を起動することを可能にした。 そして、最低限のソケットポートを開けることによって、 メモリの使用量を抑えることにも繋がった。 @@ -103,12 +103,12 @@ \lstinputlisting[breaklines=true,caption=TreeManager の生成,label=createtreemanager]{source/GetNetworkInterfaces.java} \begin{itemize} - \item for 文を使用し root が所持しているネットワークインタフェースを取得する(\ref{createtreemanager}中, 2行目) - \item その中から、起動しており Multicast に対応しており、また、ループバックインタフェースでないネットワークインタフェースを取得する(\ref{createtreemanager}中, 4行目) - \item 取得してきたネットワークインタフェースの、ネットマスク、ホストネームを取得する(\ref{createtreemanager}中, 6,7行目) - \item TreeManager を生成する(\ref{createtreemanager}中, 8行目) - \item TreeManager にネットマスクとネットアドレスを追加する(\ref{createtreemanager}中, 14行目) - \item HashMap である interfaces に ネットワークインタフェースと対応する TreeManager を追加する(\ref{createtreemanager}中, 15行目) + \item for 文を使用し root が所持しているネットワークインタフェースを取得する(2行目) + \item その中から、起動しており Multicast に対応しており、また、ループバックインタフェースでないネットワークインタフェースを取得する(4行目) + \item 取得してきたネットワークインタフェースの、ネットマスク、ホストネームを取得する(6,7行目) + \item TreeManager を生成する(8行目) + \item TreeManager にネットマスクとネットアドレスを追加する(14行目) + \item HashMap である interfaces に ネットワークインタフェースと対応する TreeManager を追加する(15行目) \end{itemize} 新しい node が接続してきた際、 @@ -124,20 +124,24 @@ \section{切断時の検知方法の変更} -接続していたクライアントとの接続が切れた際の検知方法を変更した。 +接続していたnodeが切断された際の検知方法を変更した。 +node が切断されたことを検知できずにいると、 +TreeVNCのnode同士で構成された木構造が崩れてしまい、 +新しいnodeが接続に来た場合に適切な場所にnodeを接続することができなくなってしまう。 +木構造を崩さないよう、node 同士の接続を再構成しなければならない。 root は nodeList という TreeVNC のネットワークトポロジーを管理するためのリストを持っている。 -root は TreeVNC の接続処理の全てを担っている。 +root は TreeVNC の接続処理を行う。 %node が切断された場合、 root は TreeVNC の木構造を崩さないように切断を検知し、 %木構造を崩さないよう、 node 同士の接続を再構成しなければならない。 -node の接続が切れた場合、代わりとなる node の接続が必要となるため root に知らせなければならない。 +node の接続が切れた場合、木の再構成を行うため root に知らせなければならない。 変更前は、lostParent という検知方法を採用していた。 この方法は、親となる node の接続が切れた場合、 子となる node から root に対して lostParent message を送信する。 -これにより root は lostParent を検知し、代替 node の接続を行う。 +これにより root は lostParent を検知し、代替 node の接続を行っていた。 -以下に、lostParent の検知・再接続方法を記述する。 +以下に、lostParent の検知・再接続時のメッセージ通信の流れを記述する。 \begin{itemize} \item 親 node の接続が切れる @@ -165,20 +169,21 @@ 末端 node の切断が検知できない問題を解決するために、 lostChild という検知方法に変更した。 -TreeVNC は、画像データ(framebufferUpdate)が MulticastQueue という Queue に蓄積される。 -node はこの Queue から画像データを取得し、描画している。 +TreeVNC は、VNCServerから送られてくる画像データ(framebufferUpdate)を MulticastQueue という Queue に蓄積する。 +node はこの Queue から画像データを取得し、画面を描画している。 lostChild の検出方法は、この MulticastQueue を使用している。 ある一定時間、MulticastQueue から画像データが取得されない場合、 -その node との接続が切れたと判断することができる。 +Memory Over Flowを回避するために、Timeoutスレッドが用意されている。 +Timeoutを検知した際、node との接続が切れたと判断する。 以下に、lostChild の検知・再接続方法を記述する。 \begin{itemize} - \item 子 node の切断を検知した node が root へ LOST\_CHILD message を送信する(図\ref{fig:lostchild1}中, 1:) - \item LOST\_CHILD message を受け取った root は nodeList の更新を行う(図\ref{fig:lostchild1}中, 2:) + \item 子 node の切断を検知した node が root へ LOST\_CHILD message を送信する(図\ref{fig:lostchild1}中, 1:lostChild()) + \item LOST\_CHILD message を受け取った root は nodeList の更新を行う(図\ref{fig:lostchild1}中, 2:updateNodeList()) \item 切断した node を nodeList から消し、nodeList の最後尾の node に切断した node number を割り当てる - \item root は最後尾の node に、切断した子 node が接続していた親 node に接続する様に CONNECT\_TO message を送信する(図\ref{fig:lostchild1}中, 3:) - \item 最後尾の node が子 node を失った親 node へ接続しに行く(図\ref{fig:lostchild1}中, 4:) + \item root は最後尾の node に、切断した子 node が接続していた親 node に接続する様に CONNECT\_TO message を送信する(図\ref{fig:lostchild1}中, 3:connectTo(1)) + \item 最後尾の node が子 node を失った親 node へ接続しに行く(図\ref{fig:lostchild1}中, 4:connectToParent(1)) \end{itemize} \begin{figure}[htpd] @@ -191,12 +196,12 @@ \newpage -lostChild を検知することより、 +lostChild によって、 切断されてしまった全ての node を検知することができるので、 nodeList の更新が正しく行われる。 新しい node からの接続要求 WHERE\_TO\_CONNECT message に対して、 -適切な node への接続を提供することができる(図\ref{fig:lostchild2}中, 1,2:)。 +適切な node への接続を提供することができる(図\ref{fig:lostchild2}中, 1:whereToConnect(),2:connectTo(2))。 \begin{figure}[htpd] \begin{center} diff -r 39c7868b6f3d -r ad8beccc487b paper/images/chapter3/lostChild1.pdf Binary file paper/images/chapter3/lostChild1.pdf has changed diff -r 39c7868b6f3d -r ad8beccc487b paper/images/chapter3/lostChild1.xbb --- a/paper/images/chapter3/lostChild1.xbb Wed Feb 18 05:02:45 2015 +0900 +++ b/paper/images/chapter3/lostChild1.xbb Wed Feb 18 06:34:10 2015 +0900 @@ -1,8 +1,8 @@ %%Title: ./lostChild1.pdf %%Creator: extractbb 20140317 -%%BoundingBox: 0 0 587 281 -%%HiResBoundingBox: 0.000000 0.000000 586.500000 281.250000 +%%BoundingBox: 0 0 575 281 +%%HiResBoundingBox: 0.000000 0.000000 575.250000 281.250000 %%PDFVersion: 1.3 %%Pages: 1 -%%CreationDate: Sun Feb 15 23:32:55 2015 +%%CreationDate: Wed Feb 18 06:31:09 2015 diff -r 39c7868b6f3d -r ad8beccc487b paper/thesis-paper.pdf Binary file paper/thesis-paper.pdf has changed