Mercurial > hg > Papers > 2015 > oc-thesis
diff chapter3.tex @ 4:14e96778c600
update
author | oc |
---|---|
date | Mon, 16 Feb 2015 01:03:14 +0900 |
parents | 63ae5aaa2a7a |
children | 1bc81f8b7517 |
line wrap: on
line diff
--- a/chapter3.tex Sat Feb 14 14:25:36 2015 +0900 +++ b/chapter3.tex Mon Feb 16 01:03:14 2015 +0900 @@ -12,19 +12,41 @@ 最低限のソケットポートを開けることによって、 メモリの使用量を抑えることにも繋がる。 +以下に、動的に port 番号を割り当てているソースコードを記述する。 + +% selectPort する箇所を記述する + +\begin{lstlisting}[caption=オプション--fixSize,label=fixsize] + public int selectPort(int p) { + int port = p; + while (true) { + try { + servSock = new ServerSocket(port); + acceptPort = port; + myAddress = "127.0.0.1"; + nets.getNetworkInterfaces(); + break; + } catch (BindException e) { + port++; + continue; + } catch (SocketException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + System.out.println("accept port = " + port); + return port; + } +\end{lstlisting} + + % messageの説明にportにどんな関係があるのかとから 以前は固定port番号を使用しmessageの通信を行っていたが、 一意なportを割り当てられているnodeが通信を行うことによって、 どのport番号が使用されているかを意識する必要がなくなった。 - -\section{ホスト切り替え時の挙動の修正} -画面の切り替えを行う際、新しいホスト側の画面に生じた -ビデオフィードバックが他のユーザに配信されてしまう問題があった。 - -ホストの切り替えの際、 -新しいホスト側のviewerを閉じることで問題を解決した。 - +\newpage \section{QUALITYモードとSPEEDモード} @@ -40,6 +62,17 @@ これにより、描画処理の遅延を解決することができた。 +\section{ホスト切り替え時の挙動の修正} +画面の切り替えを行う際、新しいホスト側の画面に生じた +ビデオフィードバックが他のユーザに配信されてしまう問題があった。 + +ホストの切り替えの際、 +新しいホスト側のviewerを閉じることで問題を解決した。 + + +\newpage + + \section{Tree の構成の変更} 従来のTreeVNCは、クライアントの接続する木構造が単一であった。 @@ -86,6 +119,16 @@ 子となる node から root に対して lostParent message を送信する。 これにより root は lostParent を検知し、代替 node の接続を行う。 +以下に、lostParent の検知・再接続方法を記述する。 + +\begin{itemize} + \item 親 node の接続が切れる + \item 切れた親 node に接続していた子 node が root に LOST\_PARENT message を送信する + \item root が nodeList の更新を行う + \item 切れた親 node の代わりに、nodeList の最後尾 node を配置する + \item 親 node を失った子 node は、新しい親 node に接続する +\end{itemize} + この方法では、子のいない末端の node の接続が切れた際に root にメッセージが送信されない。 root は切断を検知できないと、nodeList の更新を行うことができない。 nodeList が正しく更新されない場合、図\ref{fig:lostparent}のように、 @@ -99,18 +142,26 @@ \label{fig:lostparent} \end{figure} +\newpage + 末端 node の切断が検知できない問題を解決するために、 lostChild という検知方法に変更した。 -TreeVNC は、画面データ(framebufferUpdate)が MulticastQueue という Queue に蓄積される。 +TreeVNC は、画像データ(framebufferUpdate)が MulticastQueue という Queue に蓄積される。 node はこの Queue から画像データを取得し、描画している。 lostChild の検出方法は、この MulticastQueue を使用している。 ある一定時間、MulticastQueue から画像データが取得されない場合、 -その node との接続が切れたと判断し、親となる node が root に LOST\_CHILD message を送信する(図\ref{fig:lostchild1})。 -lostChild により、切断されてしまった全ての node を検知することができるので、 -nodeList の更新が正しく行われる。 -これにより、新しい node を適切な場所へ接続することができる(図\ref{fig:lostChild2})。 +その 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 を 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:) +\end{itemize} \begin{figure}[htpd] \begin{center} @@ -120,6 +171,15 @@ \label{fig:lostchild1} \end{figure} +\newpage + +lostChild を検知することより、 +切断されてしまった全ての node を検知することができるので、 +nodeList の更新が正しく行われる。 + +新しい node からの接続要求 WHERE\_TO\_CONNECT message に対して、 +適切な node への接続を提供することができる(図\ref{fig:lostchild2}中, 1,2:)。 + \begin{figure}[htpd] \begin{center} \includegraphics[scale=0.7]{./images/chapter3/lostChild2.pdf}