Mercurial > hg > Papers > 2016 > parusu-thesis
annotate paper/main.tex @ 24:ad8f3cea4a16
Update prepaper
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 17 Feb 2016 05:33:16 +0900 |
parents | 71e9e221b0a3 |
children | 004612152453 |
rev | line source |
---|---|
0 | 1 \documentclass[a4j,12pt]{jreport} |
5 | 2 \usepackage[dvipdfmx]{graphicx} |
0 | 3 \usepackage{mythesis} |
4 \usepackage{multirow} | |
5 \usepackage{here} | |
10 | 6 \usepackage{url} |
4 | 7 \usepackage{listings, jlisting} |
10 | 8 |
9 \input{dummy} %% font | |
10 | |
4 | 11 \lstset{% |
12 language={java},%使用言語 | |
13 basicstyle={\small},%書体 | |
14 commentstyle={\small\itshape},%コメントの書体 | |
15 keywordstyle={\small\bfseries},%キーワードの書体 | |
16 %identifierstyle={\small},% | |
17 %ndkeywordstyle={\small},% | |
18 stringstyle={\small},%文字列の書体 | |
19 frame={trlb},%外枠 | |
20 breaklines=true,%改行 | |
21 columns=[l]{fullflexible},% | |
22 xrightmargin=0zw,% | |
23 xleftmargin=3zw,% | |
24 numbers=left,%行番号の表示 | |
25 numberstyle={\scriptsize},%行番号の書体 | |
26 numbersep=1zw,% | |
27 stepnumber=1, | |
28 lineskip=-0.5ex,% | |
29 captionpos=b,%キャプションの位置 | |
30 moredelim=**[s][\color{red}]{\"compressed}{\"}, | |
31 } | |
32 \renewcommand{\lstlistingname}{Code} | |
33 | |
0 | 34 \setlength{\itemsep}{-1zh} |
2 | 35 \title{PC画面配信システムTreeVNCの NAT への対応} |
10 | 36 %\title{Supporting NAT in Screen Sharing System TreeVNC} |
0 | 37 \icon{ |
8 | 38 \includegraphics[width=80mm,bb=0 0 595 642]{fig/ryukyu.pdf} %%元は 642じゃなくて842 |
2 | 39 } |
40 \year{平成27年度 卒業論文} | |
0 | 41 \belongto{琉球大学工学部情報工学科} |
2 | 42 \author{125716B 伊波 立樹 \\ 指導教員 {河野 真治} } |
43 | |
44 %% TreeVNC のNATへの対応 | |
45 %% マルチスクリーン TreeVNC | |
0 | 46 %% プリアンブルに記述 |
47 %% Figure 環境中で Table 環境の見出しを表示・カウンタの操作に必要 | |
48 %% | |
49 \makeatletter | |
50 \newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}} | |
51 \newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}} | |
52 \makeatother | |
53 \setlength\abovecaptionskip{0pt} | |
54 | |
55 \begin{document} | |
56 | |
57 % タイトル | |
58 \maketitle | |
59 \baselineskip 17pt plus 1pt minus 1pt | |
60 | |
61 \pagenumbering{roman} | |
62 \setcounter{page}{0} | |
63 | |
64 \tableofcontents % 目次 | |
65 \listoffigures % 図目次 | |
66 \listoftables % 表目次 | |
67 | |
68 %以下のように、章ごとに個別の tex ファイルを作成して、 | |
69 % main.tex をコンパイルして確認する。 | |
70 %章分けは個人で違うので下のフォーマットを参考にして下さい。 | |
71 | |
72 % はじめに | |
2 | 73 |
74 \chapter{画面共有を利用したコミュニケーション} | |
19 | 75 授業やゼミ等で、それぞれが PC 端末を持っている場合では、 |
76 PC の機能を活かしたコミュニケーションが可能である。 | |
77 | |
78 通常の授業では先生の用意した資料、 PC 画面を見ながら授業が進むことが多い。 | |
79 ゼミでは発表者を切り替えながら発表を行う。 | |
80 | |
81 通常これらの画面を表示するためにプロジェクタが使用されている。 | |
82 しかし、プロジェクタでは通常の授業の際、参加者はプロジェクタに集中するため、手元の PC をほぼ使用することができない。 | |
83 更に手元の PC を使う際はプロジェクタと PC を行き来するため、目に負担がかかってしまう。 | |
84 またゼミの際には発表者を切り替えるたびにプロジェクタにケーブルを差し替える必要がある。 | |
85 ケーブルの差し替えの際に発表者の PC によってアダプターの種類や解像度の設定によって正常に PC 画面を表示できない場合もある。 | |
86 | |
87 画面配信システム TreeVNC\cite{taninari:2011a}は発表者の画面を参加者の PC に表示する。 | |
88 そのため、参加者は不自由なく手元の PC を使用しながら授業を受ける事が可能になる。 | |
89 更に発表者の切り替えの際もケーブルの差し替えずに共有する画面の切替を可能としている。 | |
90 | |
91 Tree VNC は VNC\cite{vnc} を使用した画面配信を行っている。 | |
92 しかし通常の VNC では配信側に全ての参加者が接続するため、多人数の際の処理性能が落ちてしまう。 | |
93 Tree VNC では有線でネットワークに接続した参加者をバイナリツリー状に接続し、 配信コストをクライアントに分散させる仕組みになっている。 | |
94 そのため、授業で先生の画面を表示する際、多人数の生徒が参加しても処理性能が下がらない。 | |
95 また、ツリーのルートが参照している VNC サーバーを変更することで、共有する画面の切替が可能となる。 | |
96 | |
97 しかし TreeVNC を授業やゼミで使用している中、 様々な問題が発生した。 | |
98 NATを越えたネットワーク接続に対応しておらず、遠隔地などで授業やゼミに参加することが出来ない。 | |
99 また、ゼミの際に、マルチディスプレイを使用して画面配信を行う際、すべての画面が配信され、不必要な画面まで表示されてしまう。 | |
100 | |
24 | 101 |
19 | 102 そこで、本研究では上記の問題点を解決し、TreeVNCの有用性を評価することで授業やゼミを円滑に行えることを目標とする。 |
103 | |
2 | 104 \label{chap:introduction} |
105 \pagenumbering{arabic} | |
106 | |
107 %序論の目安としては1枚半ぐらい. | |
108 %英語発表者は,最終予稿の「はじめに」の英訳などを載せてもいいかも. | |
109 | |
0 | 110 |
2 | 111 \chapter{TreeVNC の概念} |
112 \label{chap:concept} | |
113 | |
114 \section{VNC} | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
115 VNC(Virtual Network Computing) は、 RFBプロトコルを用いて遠隔操作を行うリモートデスクトップソフトウェアである。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
116 VNC はサーバー側とクライアント(ビューア)側に分かれている。 サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能とする。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
117 |
2 | 118 \section{RFB プロトコル} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
119 RFB(remote frame buffer)プロトコル\cite{rfbProtocol}とは、自身の画面を送信し、ネットワーク越しに他者の画面に表示するプロトコルである。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
120 ユーザが居る側をRFBクライアント側と呼び、Framebufferへの更新が行われる側はRFBサーバと呼ぶ。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
121 Framebufferとは、メモリ上に置かれた画像データのことである。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
122 RFBプロトコルでは、最初にプロトコルバージョンの確認や認証が行われる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
123 その後、クライアントに向けてFramebufferの大きさやデスクトップに付けられた名前などが含まれている初期メッセージが送信される。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
124 RFBサーバ側はFramebufferの更新が行われるたびに、RFBクライアントに対してFramebufferの変更部分だけを送信する。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
125 更にRFBクライアントのFramebufferUpdateRequestが来るとそれに答え返信する。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
126 RFBプロトコルは、描画データに使われるエンコードが多数用意されており、また独自のエンコードを実装することもできるプロトコルである。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
127 |
2 | 128 \section{多人数で VNC を使用する際の問題} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
129 VNCを使用すればクライアント側にサーバー側の画面を表示することが可能である。 |
8 | 130 しかし、図\ref{fig:vnc}のように多人数のクライアントが1つのサーバーに接続してしまうと処理性能が落ちてしまうという問題点がある。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
131 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
132 また、 ゼミ等の発表で画面配信者が頻繁に切り替わる場合、配信者が替わる度にアプリケーションを終了し、接続をし直さないといけないという問題がある。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
133 |
8 | 134 \begin{figure}[htbp] |
135 \begin{center} | |
136 \includegraphics[scale=0.8]{./images/vnc.pdf} | |
137 \end{center} | |
14 | 138 \caption{VNCの構造} |
8 | 139 \label{fig:vnc} |
140 \end{figure} | |
141 | |
2 | 142 \section{TreeVNC の構造} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
143 TreeVNC は Java を用いて作成された TightVNC(Tight Virtual Network Computing)\cite{tightvnc} を元に作成されている。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
144 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
145 TreeVNC は クライアント同士を接続させ、画面描画のデータを受け取ったクライアントが次のクライアントにデータを流す方式を取っている。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
146 また、サーバへ接続しに来たクライアントをバイナリツリー状に接続する(図\ref{fig:tree})。 |
5 | 147 バイナリツリー状に接続することで、$N$ 台のクライアントが接続しに来た場合、画面配信の画像データをコピーする回数は従来の VNC ではサーバ側で$N$ 回する必要があるが、TreeVNCでは各ノードが2回ずつコピーするだけで済む。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
148 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
149 TreeVNCで通信される画像のデータ量は大きいため、大きなネットワークスループットが必要である。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
150 そのため、有線接続が必須である。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
151 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
152 バイナリツリーのルートのノードを Root Node と呼び、 Root Node に接続されるノードを Node と呼ぶ |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
153 Root Node は子 Nodeにデータを流す機能に加え、各 Node の管理、 VNC サーバーから流れてきた画像データの管理を行う。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
154 Node は 親 Node から送られたデータを 自分の子 Node に流す機能、 逆に子 Node から送られてきたデータを 親 Node に流す機能がある。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
155 |
5 | 156 \begin{figure}[htbp] |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
157 \begin{center} |
5 | 158 \includegraphics[scale=0.8]{./images/treeVnc.pdf} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
159 \end{center} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
160 \caption{構成される木構造} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
161 \label{fig:tree} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
162 \end{figure} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
163 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
164 \newpage |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
165 |
8 | 166 \section{TreeVNC の原理} |
14 | 167 従来の VNC と TreeVNC の構造を比較を図\ref{fig:treeVncTheory}に示す。 |
168 | |
169 \begin{figure}[htbp] | |
170 \begin{center} | |
171 \includegraphics[scale=0.5]{./images/treeVncTheory} | |
172 \end{center} | |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
173 \caption{ポート一本にかかる負荷} |
14 | 174 \label{fig:treeVncTheory} |
175 \end{figure} | |
176 | |
177 表\ref{tb:treeVncTheory}はポート一本あたりの通信量である。 | |
178 通常の VNC の場合、クライアント数に比例してポート一本あたりの負荷が増えている。 | |
179 TreeVNC の場合は1つの Node に対して2台の Node が接続するため、クライアント数関係なく一定である。 | |
180 | |
181 送信するデータ量も通常の VNC の場合 Node 数に比例した量のデータを送信する必要があり、 CPU に負荷がかかってしまう。 | |
182 それに対して TreeVNC はクライアントが増えても送信するデータはクライアント毎に分散されているため、1台の CPU に掛かる負荷は一定となる。 | |
183 そのため、性能が低下せずに画面配信を行うことが出来る。 | |
184 | |
185 \begin{table}[htbp] | |
186 \begin{center} | |
187 \caption{ポート一本あたりの通信量(N はノード数)} | |
188 \begin{tabular}{|l|l|l|} \hline | |
189 & 通常の VNC & TreeVNC \\ \hline | |
190 通信量 & N * データ量 & (2 + 1) * データ量 \\ \hline | |
191 \end{tabular} | |
192 \label{tb:treeVncTheory} | |
193 \end{center} | |
194 \end{table} | |
8 | 195 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
196 \newpage |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
197 |
2 | 198 \section{圧縮形式} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
199 TreeVNC は ZRLEE\cite{taninari:2012a} というエンコードでデータのやり取りを行う。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
200 ZRLEE はRFB プロトコルで使えるエンコーディングタイプの ZRLE を元に生成される。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
201 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
202 ZRLE は Zlib\cite{zlib} で圧縮されたデータとそのデータのバイト数がヘッダーとして付けて送られてくる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
203 Zlib は java.util.zip.deflater と java.util.zip.inflater で圧縮と解凍が行える。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
204 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
205 しかし、 java.util.zip.deflater は解凍に必要な辞書を書き出す(flush)ことが出来ない。 |
5 | 206 そのため図\ref{fig:zrleFail} のように、 Zlib圧縮されたデータを途中から受け取ってもデータを正しく解凍することが出来ない。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
207 |
5 | 208 そこで ZRLEE は 一度 Root Node で受け取った ZRLE のデータを unzip し、 データをzip し直して最後に finish() をいれることで初めからデータを呼んでいなくても解凍を行えるようにした(図\ref{fig:zrlee})。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
209 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
210 一度 ZRLEE に変換してしまえば子 Node はそのデータをそのまま流すだけで良い。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
211 ただし、deflater と inflater では前回までの通信で得た辞書をクリアしないといけないため、 Root Node と Node 側では毎回新しく作る必要がある。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
212 |
5 | 213 \begin{figure}[htbp] |
214 \begin{center} | |
8 | 215 \includegraphics[scale=0.5]{./images/zrleFail.pdf} |
5 | 216 \end{center} |
217 \caption{ZRLEでの問題点} | |
218 \label{fig:zrleFail} | |
219 \end{figure} | |
220 | |
221 \begin{figure}[htbp] | |
222 \begin{center} | |
8 | 223 \includegraphics[scale=0.5]{./images/zrlee.pdf} |
5 | 224 \end{center} |
225 \caption{ZRLEE} | |
226 \label{fig:zrlee} | |
227 \end{figure} | |
228 | |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
229 \newpage |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
230 |
2 | 231 \section{通信経路} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
232 TreeVNC の通信経路として以下が挙げられる |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
233 \begin{itemize} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
234 \item ある Node から Root Node に直接通信を行う send direct message (Node to Root) |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
235 \item Root Node からある Node に直接通信を行う send direct message (Root to Node) |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
236 \item Root Node から木の末端の Node までのすべての Nodeに通信を行う messeage down tree (Root to Node) |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
237 \item ある Node から木構造を上に辿って Root Nodeまで通信を行う message up tree (Node to Root) |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
238 \item Root Node から配信者の VNC サーバーへの通信を行う send message (Root to VNCServer) |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
239 \item VNC サーバーから Root Node への通信を行う send message (VNCServer to Root) |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
240 \end{itemize} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
241 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
242 \section{ノード間で行われるメッセージ通信} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
243 RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
244 TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
245 |
14 | 246 \begin{table}[htbp] |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
247 \caption{通信経路とメッセージ一覧} |
4 | 248 \scriptsize |
249 \begin{tabular}{|l|l|l|} \hline | |
250 通信経路 & message & 説明 \\ \hline \hline | |
251 & FIND\_ROOT & TreeVNC接続時にRoot Nodeを探す。 \\ \cline{2-3} | |
252 send direct message & WHERE\_TO\_CONNECT & 接続先をRoot Nodeに聞く。 \\ \cline{2-3} | |
253 (Node to Root) & LOST\_CHILD & 子Nodeの切断をRoot Nodeに知らせる。 \\ \hline \hline | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
254 |
4 | 255 & FIND\_ROOT\_REPLY & FIND\_ROOTへの返信。 \\ \cline{2-3} |
256 send direct message & CONNECT\_TO\_AS\_LEADER & 左子Nodeとして接続する。接続先のNodeが含まれている。 \\ \cline{2-3} | |
8 | 257 (Root to Node) & CONNECT\_TO & 右子Nodeとして接続する。接続先のNodeが含まれている。 \\ \hline \hline |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
258 |
4 | 259 message down tree & FRAMEBUFFER\_UPDATE & 画像データ。EncodingTypeを持っている。\\ \cline{2-3} |
260 (Root to Node) & CHECK\_DELAY & 通信の遅延を測定する。 \\ \hline \hline | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
261 |
4 | 262 message up tree & CHECK\_DELAY\_REPLY & CHECK\_DELAYへの返信。 \\ \cline{2-3} |
263 (Node to Root) & SERVER\_CHANGE\_REQUEST & 画面切り替え要求。 \\ \hline \hline | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
264 |
4 | 265 & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求。 \\ \cline{2-3} |
266 send message & SET\_PIXEL\_FORMAT & pixel値の設定。 \\ \cline{2-3} | |
267 (Root to VNCServer) & SET\_ENCODINGS & pixelデータのencodeTypeの設定。 \\ \cline{2-3} | |
268 & KEY\_EVENT & キーボードからのイベント。 \\ \cline{2-3} | |
269 & POINTER\_EVENT & ポインタからのイベント。 \\ \cline{2-3} | |
270 & CLIENT\_CUT\_TEXT & テキストのカットバッファを持った際のmessage。 \\ \hline \hline | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
271 |
4 | 272 & FRAMEBUFFER\_UPDATE & 画像データ。EncodingTypeを持っている。 \\ \cline{2-3} |
273 send message & SET\_COLOR\_MAP\_ENTRIES & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3} | |
274 (VNCServer to Root) & BELL & ビープ音を鳴らす。 \\ \cline{2-3} | |
275 & SERVER\_CUT\_TEXT & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline | |
276 \end{tabular} | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
277 \label{tb:message} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
278 \end{table} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
279 |
8 | 280 図\ref{fig:message}は TreeVNC で 新しいNode が Root Node と通信し、木構造を形成するためのメッセージ通信の流れである。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
281 図\ref{fig:message}の手順として |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
282 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
283 \begin{itemize} |
8 | 284 \item 接続を行う Node は Multicast 通信で Root Node に対してFIND\_ROOTを送信する。 |
285 \item Root NodeがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する。 | |
286 \item Node 側で、どのRoot Nodeに接続するかを選択するパネルが表示される。 | |
287 \item Node はパネルで接続するRoot Nodeを選択し、Rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する。 | |
288 \item 受信した Root Node は Node の接続先をCONNECT\_TOで送信する。 Node 3 が接続する場合、Root Node には既に2台の Node が接続している為、 CONNET\_TO で指定する接続先は Node 1となる。 | |
289 \item Node は Root の指定した接続先に接続しに行く。 | |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
290 \end{itemize} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
291 |
8 | 292 を行い、木構造を形成する。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
293 |
8 | 294 \begin{figure}[htbp] |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
295 \begin{center} |
8 | 296 \includegraphics[scale=0.5]{./images/message.pdf} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
297 \end{center} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
298 \caption{node 間で行われるメッセージ通信} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
299 \label{fig:message} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
300 \end{figure} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
301 |
2 | 302 \section{MulticastQueue} |
8 | 303 配信側の画面が更新されると、 VNCServer から画像データがFRAME\_BUFFER\_UPDATE メッセージとして送られる。 |
304 その際、 画像データの更新を複数の Node に同時に伝えるため MulticastQueue というキューに画像データを格納する。 | |
5 | 305 |
4 | 306 MulticastQueue は java.util.concurrent.CountDownLatch を用いて実装されている。 |
5 | 307 CountDownLatch は java の並列用のAPIで他のスレッドで実行中の操作が完了するまで、複数のスレッドを待機させることが出来るクラスである。 |
308 CountDownLatch を初期化する際にカウントを設定することができる。 | |
309 このカウントはスレッドを開放する際に使用し、 await メソッドでカウントが0になるまでメソッドをブロックする事ができる。 | |
4 | 310 |
5 | 311 MulticastQueue は put メソッドを使用して データを queue に追加する。 |
312 put の際に CountDownLatch をカウントダウンする。 | |
313 poll メソッドを使用することで Queue のデータを取得することが出来る。 | |
314 poll メソッドの実行の際に await メソッドが使われているため、 次の put でデータが来るまでスレッドをブロックする。 | |
315 スレッドをブロックされた場合 新しいデータが put されると CountDownLatch がカウントダウンされるため、 データの読み込みが再開される。 | |
4 | 316 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
317 \newpage |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
318 |
2 | 319 \section{木の再構成} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
320 TreeVNC はバイナリツリーでの接続という特性上 Node が切断されたことを検知できずにいると、Node 同士で構成された木構造が崩れてしまい、新しい Node が接続に来た場合に適切な場所に Node を接続することができなくなってしまう。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
321 木構造を崩さないよう、Node 同士の接続を再構成を行う必要がある。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
322 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
323 TreeVNC の木構造のネットワークトポロジーは Root Node が持っている nodeList というリストで管理している。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
324 つまり、Node の接続が切れた場合、木の再構成を行うため Root Node に知らせなければならない。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
325 |
5 | 326 TreeVNC は LOST\_CHILD というメッセージ通信で Node の切断を検知・木の再構成を行っている。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
327 |
5 | 328 TreeVNC は VNC サーバーから送られる画像データ(FRAME\_BUFFER\_Update)を MulticastQueue に蓄積しており、 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
329 Node はこのキューから画像データを取得し、画面を描画している。 |
8 | 330 LOST\_CHILD の検出方法はこの MulticastQueue を使用している。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
331 ある一定時間 MulticastQueue から画像データが取得されない場合 Memory Over Flow を回避するために Timeout スレッドが用意されている。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
332 Timeout を検知した際、Node との接続が切れたと判断する。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
333 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
334 図\ref{fig:lostChild}は6台の Node が接続してる状態で Node3 が切断した場合の木の再構成を示している。 |
8 | 335 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
336 \begin{itemize} |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
337 \item Node3 の切断を検知した Node1 が Root Node へ LOST\_CHILD メッセージを送信する(1: sendLostChild)。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
338 \item LOST\_CHILD メッセージを受け取った Root Node は nodeList から切断した Node を消し、最後尾の Node6 に切断した Node Number を割り当てる(2: updateNodeList)。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
339 \item Root Node は最後尾の Node6 に、切断した子 Node3 が接続していた Node1 に接続する様に CONNECT\_TO メッセージを送信する(3: send ConnectTo (Node1))。 |
8 | 340 \item 最後尾の Node が子 Node を失った親 Node へ接続しに行く(4: connect (Node1))。 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
341 \end{itemize} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
342 |
8 | 343 \begin{figure}[htbp] |
4 | 344 \begin{center} |
10 | 345 \includegraphics[scale=0.5]{./images/lostChild.pdf} |
4 | 346 \end{center} |
347 \caption{LOST\_CHILD を検知・再接続} | |
8 | 348 \label{fig:lostChild} |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
349 \end{figure} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
350 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
351 LOST\_CHILD によって、 切断された全ての Node を検知することができるため、 nodeList の更新が正しく行われる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
352 よって、新しく接続に来た Node を適切な場所に接続することが可能となる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
353 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
354 \newpage |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
355 |
3
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
356 \section{共有画面切り替え} |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
357 ゼミでは発表者が順々に入れ替わる。発表者が入れ替わる度に共有する画面の切り替えが必要となる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
358 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
359 画面の共有にプロジェクタを使用する場合、 発表者が変わる度にケーブルの抜き差しを行う必要がある。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
360 その際に、ディスプレイ解像度を設定し直す必要が出たり、 接続不良が起こる等の煩わしい問題が生じることがある。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
361 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
362 従来のVNCを使用する場合、 画面の切り替えの度に一旦VNCを終了し、発表者の VNC サーバーへと再接続を行う必要がある。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
363 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
364 TreeVNC は配信者の切り替えの度に生じる問題を解決している。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
365 TreeVNC を立ち上げることで、ケーブルを使用する必要なしに、各参加者の手元のPCに発表者の画面を共有することができる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
366 画面の切り替えはユーザが VNC サーバーへの再接続を行うことなく、ビューアの Share Screen ボタンを押すことによって、配信者の切り替えを行うことができる。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
367 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
368 TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている。 |
0fa28652aa74
Add TreeVNC outline for prosym
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
2
diff
changeset
|
369 VNC サーバーから画面データを受信し、そのデータを 子 Node へと送信している。 |
19 | 370 配信者切り替え時に Share Screen ボタンが押されると、 SERVER\_CHANGE\_REQUEST メッセージに Node 番号やディスプレイ情報 を付加し、Root Node に送信する。 |
371 SERVER\_CHANGE\_REQUEST メッセージを受け取った Root Node は配信を行うクライアントの VNC サーバーと通信を始める。 | |
5 | 372 そのため TreeVNC は配信者切り替えの度に VNC を終了し、再接続する必要がない。 |
4 | 373 |
374 \section{複数のネットワークの対応} | |
375 従来の TreeVNC は、クライアントの接続する木構造が単一であった。 | |
376 そのため、Root Node が複数のネットワークに接続していても、 単一のネットワークでしか使用することができなかった。 | |
377 | |
21 | 378 この問題を解決するために、 図\ref{fig:multinetworktree}の様に、ネットワーク別に木構造を形成するように設計した。 |
4 | 379 |
8 | 380 \begin{figure}[htbp] |
4 | 381 \begin{center} |
10 | 382 \includegraphics[scale=0.5]{./images/multiNetworkTree} |
4 | 383 \end{center} |
384 \caption{Multi Network Tree} | |
385 \label{fig:multinetworktree} | |
386 \end{figure} | |
387 | |
388 TreeVNC は Root Node が TreeManager というオブジェクトを持っている。 | |
389 TreeManager は TreeVNC の接続部分を管理している。 | |
390 TreeManager では木構造を管理する nodeList が生成される。 | |
391 この nodeList を元に、新しい Node の接続や、切断検出時の接続の切り替え等を行う。 | |
392 | |
393 Root Node の保持しているネットワーク毎にTreeManager を生成する用に変更を行った。 | |
394 新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得し、 Node 接続の処理を任せる。 | |
395 そのため、 TreeVNC が複数のネットワーク別に木構造を構成することが可能となる。 | |
0 | 396 |
10 | 397 \chapter{NAT 対応} |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
398 \section{TreeVNC の問題点} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
399 TreeVNC は Root Node が所属しているネットワークで木を構成する。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
400 そのため、NAT 越えた別のネットワークからの接続を行うことが出来ない。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
401 |
21 | 402 \section{Direct Connection} |
8 | 403 遠隔地からでもゼミや授業に参加できるよう、 NATを越えたネットワークから TreeVNC への接続を可能にした。 |
404 | |
405 図\ref{fig:directConnection} にNATを越えたネットワークからの接続を示す。 | |
406 別ネットワークからTreeVNCに参加する際、 直接配信側のネットワークの Root Node に接続を行う。 | |
407 この接続を Direct Connection と呼ぶ。 | |
408 | |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
409 \begin{figure}[htbp] |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
410 \begin{center} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
411 \includegraphics[scale=0.5]{./images/directConnection.pdf} |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
412 \caption{Direct Connection} |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
413 \label{fig:directConnection} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
414 \end{center} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
415 \end{figure} |
8 | 416 |
21 | 417 \newpage |
418 | |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
419 \section{Direct Connectionでの木構造} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
420 Direct Connection した Node はそのネットワークの Root Node になり、接続先である TreeVNC の nodeList に追加されない。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
421 つまり、ネットワーク毎に木構造をもつことになる。 |
8 | 422 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
423 新しく接続する Node は図\ref{fig:directConnectionTree}のようにそのネットワークの Root Node に FIND\_ROOT メッセージを送信し、接続処理を行う。 |
8 | 424 |
425 \begin{figure}[htbp] | |
426 \begin{center} | |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
427 \includegraphics[scale=0.5]{./images/directConnectionTree.pdf} |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
428 \caption{新しい Node の接続} |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
429 \label{fig:directConnectionTree} |
8 | 430 \end{center} |
431 \end{figure} | |
432 | |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
433 配信側の Root Node はDirect Connection で接続された Node に対して通常の子 Node と同じように FRAMEBUFFER\_UPDATE メッセージで画像データを送信する。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
434 FRAMEBUFFER\_UPDATE メッセージを受けった Root Node はそのネットワークの Node に対して FRAMEBUFFER\_UPDATE メッセージを送信する。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
435 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
436 \begin{figure}[htbp] |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
437 \begin{center} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
438 \includegraphics[scale=0.5]{./images/directConnectionFrameBuffer.pdf} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
439 \caption{NATを越えたネットワークへの画面配信} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
440 \label{fig:directConnectionFrameBuffer} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
441 \end{center} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
442 \end{figure} |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
443 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
444 |
14 | 445 \chapter{TreeVNC のリファクタリング} |
2 | 446 \section{マルチディスプレイ対応} |
12
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
447 画面配信側のPCがマルチディスプレイの場合 VNC サーバーからは複数の画面全体の画像データが送信されてしまう。 |
4 | 448 授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。 |
19 | 449 そこで、画面を共有する際、ディスプレイを選択させ、画面共有を行う機能を追加した\cite{parusu:2016a}。 |
4 | 450 |
21 | 451 |
4 | 452 ディスプレイの情報は個々のクライアントでしか取得ができない。 |
12
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
453 そのため、配信側は画面の切り替えを行う際に、ディスプレイを選択し、そのディスプレイの左上と右下の座標を取得する。 |
4 | 454 その座標を Root Node への画面切り替えを要求する SERVER\_CHANGE\_REQUEST メッセージに付加させる。 |
455 Root Node は 配信側の VNC サーバー に画像データを要求する FRAMEBUFFER\_UPDATE\_REPLY メッセージに送信された座標を付加する。 | |
456 VNC サーバーは要求された座標内の画像データを FRAMEBUFFER\_UPDATE メッセージで Root Node に送信する。 | |
12
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
457 これにより、一画面のみの表示が可能になる。 |
4 | 458 |
459 図\ref{fig:multidisplay} は Display1 のみを画面共有する例を示している。 | |
460 | |
8 | 461 \begin{figure}[htbp] |
4 | 462 \begin{center} |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
463 \includegraphics[scale=0.4]{./images/shareScreenToMultiDisplay.pdf} |
4 | 464 \end{center} |
465 \caption{マルチディスプレイへの対応} | |
466 \label{fig:multidisplay} | |
467 \end{figure} | |
468 | |
12
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
469 \section{画面切り替えの安定化} |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
470 画面切り替えを行う際、 配信中の画面を停止した後に画面の切り替え処理を実行していた。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
471 しかし、 切り替え先の VNC サーバーへの接続に時間がかかったり、 切り替え先の設定ミスなどで画面の切替がスムーズに行えない場合があった。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
472 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
473 そこで、 画面切り替えを行う際に新しく切り替え用のスレッドを生成し処理する変更を行った。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
474 Root Node は SERVER\_CHANGE\_REQUEST を受け取ると、 配信状態を維持したまま、画面切り替え用に新しくスレッドを生成する。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
475 切り替え用のスレッドは切り替えに必要なデータの設定、 VNC サーバー への接続など通常の切り替え処理を実行する。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
476 切り替えが完了した後に、 現在配信中の画面を停止し、画面の切替を行う。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
477 切り替え用のスレッドを用意することで、配信状況を維持したままスムーズな画面切り替えが可能になった。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
478 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
479 \section{クライアントへのエラー通知} |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
480 TreeVNC には接続しているクライアントへのエラーの通知を行うことが出来なかった。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
481 そのため、 画面切り替えを行う際に切り替え先が VNC サーバーの共有設定をしていない場合 Root Node に接続エラーのダイアログが表示されるという実装になっており、切り替えを行ったクライアントには通知されていなかった。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
482 |
13
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
483 この問題を解決するために新しくERROR\_ANNOUNCE というメッセージを追加した。 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
484 図\ref{fig:errorAnnounce} は Node3 に対してエラー通知を行っている例を示している。 |
13
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
485 ERROR\_ANNOUNCE メッセージは Root Nodeから木構造を辿りながら末端の Node に通信を行うメッセージで、エラー通知したいクライアントの Node Nuber と エラー内容の文字列を付加して送信する。 |
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
486 付加した Node Number に一致する Node がメッセージを受け取ると、 付加されたエラーの文字列をダイアログで表示する。 |
12
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
487 エラー通知用のメッセージを追加することで、 各々のクライアントに対して通知を行うことが可能になった。 |
0 | 488 |
13
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
489 \begin{figure}[htbp] |
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
490 \begin{center} |
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
491 \includegraphics[scale=0.5]{./images/errorAnnounce.pdf} |
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
492 \end{center} |
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
493 \caption{ERROR\_ANNOUNCE メッセージの挙動} |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
494 \label{fig:errorAnnounce} |
13
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
495 \end{figure} |
bcd8506cd151
Add errorAnnounce image
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
12
diff
changeset
|
496 |
2 | 497 \chapter{TreeVNC の評価} |
498 \section{画像データ伝達の遅延} | |
4 | 499 VNC サーバー から受信する画像データ、 TreeVNC で扱われるメッセージ通信は構成された木を伝って伝達される。 |
500 接続する人数が増える毎に木の段数は増えていく。 そこで Root Node から木の末端の Node までの画像データ伝達の遅延を検証する実験を行った。 | |
501 | |
2 | 502 \section{実験環境} |
4 | 503 授業を受講している学生が TreeVNC を使用した状態で実験を行った。 |
504 TreeVNC には最大で17名が接続していた。 | |
505 | |
2 | 506 \section{メッセージを使用した実測} |
12
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
507 TreeVNC を伝搬するメッセージに、CHECK\_DELAY, CHECK\_DELAY\_REPLYを追加した。 |
11169ee81923
Add ServerChange thread and ERROR_ANNOUNCE Message
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
10
diff
changeset
|
508 CHECK\_DELAY は Root Node から 末端の Node まで伝達するメッセージと画像データ、 CHECK\_DELAY\_REPLY は各 Node から Root Node まで伝達するメッセージである。 |
4 | 509 |
510 CHECK\_DELAY メッセージは送信時刻を付けて送信する。 | |
511 Root Nodeから CHECK\_DELAY 送信し、末端の Node まで各 Node を伝いながら伝達して行く。 | |
512 | |
513 CHECK\_DELAY\_REPLY は CHECK\_DELAY から受け取った送信時刻をそのままに、 画像データのサイズを付けて送信する。 | |
514 CHECK\_DELAY を受け取った各 Node は CHECK\_DELAY\_REPLY を接続している親 Node に送信する。 | |
515 | |
516 CHECK\_DELAY\_REPLY を受け取った Root Node はメッセージと画像データの伝達にどれだけの時間がかかったかを計算する。 | |
517 データ計算方法を以下の Code \ref{calc}に記述する。 この変数 time は CHECK\_DELAY\_REPLY に付いている CHEKC\_DELAY の送信時刻である。 | |
518 | |
10 | 519 \begin{lstlisting}[label=calc, caption=遅延時間の計算方法] |
14 | 520 Long delay = System.currentTimeMillis() - time; |
10 | 521 \end{lstlisting} |
4 | 522 |
2 | 523 \section{結果} |
4 | 524 バイナリツリーで木を構成した場合、 Node 数が17台だと深さが4となる。 |
525 各木構造の階層毎に、画像データの伝搬にかかった時間を測定した。 | |
0 | 526 |
14 | 527 図\ref{fig:depth1}, \ref{fig:depth2}, \ref{fig:depth3}, \ref{fig:depth4}は遅延の分布を示した散布図である。 |
4 | 528 X軸はメッセージ伝達にかかった秒数(ms)、 Y軸は画像データのサイズ(Byte)である。 |
529 | |
530 画像データの伝達はほぼ1秒以内に収まっているが、容量が小さい場合でも時間がかかる場合がある。 | |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
531 それはその送信の前に大容量の画像を送信した後の回線の Delay が残っているためだと考えられる。 |
4 | 532 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
533 また、深さ3で極端に遅い場合がある。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
534 遅い原因として、1つの Node がボトルネックになっていることが判明している。 |
14 | 535 このような極端に遅い Node をそのまま木に配置した場合、その Node の子 Node 以下に影響を及ぼすおそれがある。 |
4 | 536 |
14 | 537 \begin{figure}[htbp] |
4 | 538 \begin{center} |
14 | 539 \includegraphics[scale=0.7]{./images/depth1.eps} |
4 | 540 \end{center} |
14 | 541 \caption{データサイズと遅延の関係 : 深さ1} |
10 | 542 \label{fig:depth1} |
5 | 543 \end{figure} |
544 | |
14 | 545 \begin{figure}[htbp] |
5 | 546 \begin{center} |
14 | 547 \includegraphics[scale=0.7]{./images/depth2.eps} |
4 | 548 \end{center} |
14 | 549 \caption{データサイズと遅延の関係 : 深さ2} |
10 | 550 \label{fig:depth2} |
4 | 551 \end{figure} |
14 | 552 |
553 \begin{figure}[htbp] | |
554 \begin{center} | |
555 \includegraphics[scale=0.7]{./images/depth3.eps} | |
556 \end{center} | |
557 \caption{データサイズと遅延の関係 : 深さ3} | |
558 \label{fig:depth3} | |
559 \end{figure} | |
560 | |
561 \begin{figure}[htbp] | |
562 \begin{center} | |
563 \includegraphics[scale=0.7]{./images/depth4.eps} | |
564 \end{center} | |
565 \caption{データサイズと遅延の関係 : 深さ4} | |
566 \label{fig:depth4} | |
567 \end{figure} | |
568 | |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
569 \section{ボトルネックになっている Node への対処} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
570 画像データを受け取る時間が遅い Node をそのまま木構造に配置しているとその子 Node 以下に影響を及ぼす。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
571 そのためネックになっている Node への対処が必要である。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
572 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
573 ボトルネックになっている Node への対処として CHECK\_DELAY\_REPLAY メッセージを使用している。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
574 図\ref{fig:fixTree}は 6台の Node が接続している状態で Node1 がネックになっている場合の木の再構成を示している。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
575 CHECK\_DELAY\_REPLAY メッセージを受け取った Root Node はその Node がボトルネックなっているかの判断を行う。 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
576 ボトルネックになっているなら Root Node の nodeList からその Node を削除する。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
577 削除した Node の場所には末端の Node を配置するように CONNECT\_TO メッセージを送信する。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
578 nodeList から削除された Node は接続されたままなので、データの受信は行うが、 木構造には入らないため、ネックになっている Node の下に新しい Node が繋がることはない。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
579 そのためネックになっている Node 以下に影響を及ばすことがない。 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
580 |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
581 \begin{figure}[htbp] |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
582 \begin{center} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
583 \includegraphics[scale=0.4]{./images/fixTree.pdf} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
584 \end{center} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
585 \caption{ボトルネックになっている Node への対処} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
586 \label{fig:fixTree} |
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
587 \end{figure} |
14 | 588 |
0 | 589 % 今後の課題 |
2 | 590 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
591 \chapter{結論} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
592 \section{まとめ} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
593 本研究では画面配信システム TreeVNC での NAT 対応、 リファクタリングによる機能改良、 TreeVNC の評価を行った。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
594 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
595 NATを越えに対応した Direct Connection という接続方法を確立し実装した。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
596 これにより、NAT を越えた別ネットワークのユーザーが TreeVNC に参加することが可能となった。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
597 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
598 また、リファクタリングによって以下の機能の改良を行った。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
599 \begin{itemize} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
600 \item マルチディスプレイの場合に画面を選択して配信することが可能になった。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
601 \item 画面切り替えの際に切り替え用のスレッドを用意することでスムーズな画面切り替えが可能。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
602 \item 新しくメッセージを追加することでクライアントにエラー通知を行える様になった。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
603 \end{itemize} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
604 |
15
1890002fd43b
Add neckNode section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
14
diff
changeset
|
605 |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
606 \section{今後の課題} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
607 \subsection{NATを越えた画面切り替え} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
608 今回追加した Direct Connection ではNATを越えたネットワークの画面の配信を行うのみであり、 TreeVNC の利点の1つである画面切り替えを行うことが出来ない。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
609 そのため、NATを越えたネットワークでの画面切り替えの実装を行う必要がある。 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
610 |
19 | 611 図\ref{fig:directConnectionServerChange} は Direct Connection での画面切り替えの実装案である。 |
612 まず Direct Connection した ネットワークのクライアントから SERVER\_CHANGE\_REQUEST メッセージが送信される。 | |
613 SERVER\_CHAGEN\_REQUEST メッセージを受け取った そのネットワークの Root Node は Direct Connection した先の Root Node へ SERVER\_CHANGE\_REQUEST を -1 を付加して送信する。 | |
614 -1 を送信することで、 受け取った Root Node は別のネットワークからの画面切り替え要求ということを判断することができる。 | |
615 別ネットワークからの切り替え要求を受け取った Root Node は読み込み用と書き込み用のソケットを入れ替える。 | |
616 ソケットを入れ替えることで、 切り替え要求した Root Node のデータを受け取ることが可能となる。 | |
18
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
617 |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
618 \begin{figure}[htbp] |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
619 \begin{center} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
620 \includegraphics[scale=0.5]{./images/directConnectionServerChange.pdf} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
621 \caption{NATを越えたネットワークでの画面切り替え} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
622 \label{fig:directConnectionServerChange} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
623 \end{center} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
624 \end{figure} |
c05bc62b50e6
Update directConnection
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
15
diff
changeset
|
625 |
19 | 626 \subsection{音声機能の追加} |
627 Direct Conenction により、遠隔地からの画面配信が可能となった。 | |
628 しかし、 ゼミや授業等では画面の表示のみではなく、 音声の配信も行う必要がある。 | |
0 | 629 |
630 % 参考文献 | |
2 | 631 \def\line{−\hspace*{-.7zw}−} |
10 | 632 \nocite{*} |
633 \bibliographystyle{junsrt} | |
634 \bibliography{reference} | |
2 | 635 |
636 | |
637 \chapter*{謝辞} | |
638 \thispagestyle{empty} | |
639 | |
640 %基本的な内容は以下の通り.参考にしてみて下さい. | |
641 %厳密な決まりは無いので,個々人の文体でも構わない. | |
642 %GISゼミや英語ゼミに参加した人はその分も入れておく. | |
643 %順番は重要なので気を付けるように.(提出前に周りの人に確認してもらう.) | |
644 | |
22 | 645 \hspace{1zw}本研究の遂行,また本論文の作成にあたり、御多忙にも関わらず終始懇切なる御指導と御教授を賜わりました河野真治准教授に深く感謝致します。 |
2 | 646 |
22 | 647 数々の貴重な御助言と細かな御配慮を戴いた小久保翔平さん、 徳森海斗さん、 比嘉健太さん並びに並列信頼研究室の皆様に深く感謝致します。 |
2 | 648 |
649 最後に、有意義な時間を共に過ごした情報工学科の学友、並びに物心両面で支えてくれた両親に深く感謝致します。 | |
650 | |
651 \begin{flushright} | |
4 | 652 2010年 3月 \\ hoge |
2 | 653 \end{flushright} |
0 | 654 |
655 % 付録 | |
656 | |
657 \end{document} |