1
|
1 % withpage: ページ番号をつける (著者確認用)
|
0
|
2 \documentclass{ipsjprosym}
|
2
|
3 \usepackage{listings, jlisting}
|
|
4 \usepackage[dvipdfmx]{graphicx}
|
|
5 \usepackage{latexsym}
|
0
|
6
|
2
|
7 \lstset{
|
|
8 language={Java},
|
|
9 tabsize=2,
|
|
10 frame=single,
|
|
11 basicstyle={\ttfamily\footnotesize},%
|
|
12 identifierstyle={\footnotesize},%
|
|
13 commentstyle={\footnotesize\itshape},%
|
|
14 keywordstyle={\footnotesize\bfseries},%
|
|
15 ndkeywordstyle={\footnotesize},%
|
|
16 stringstyle={\footnotesize\ttfamily},
|
|
17 breaklines=true,
|
|
18 captionpos=b,
|
|
19 columns=[l]{fullflexible},%
|
|
20 xrightmargin=0zw,%
|
|
21 xleftmargin=1zw,%
|
|
22 aboveskip=1zw,
|
|
23 numberstyle={\scriptsize},%
|
|
24 stepnumber=1,
|
|
25 numbersep=1zw,%
|
|
26 lineskip=-0.5ex%
|
|
27 }
|
|
28
|
|
29 \input{dummy.tex} %% Font
|
0
|
30
|
|
31 \begin{document}
|
|
32
|
2
|
33 % ユーザー定義したマクロなど
|
|
34 \makeatletter
|
|
35 \let\@ARRAY\@array \def\@array{\def\<{\inhibitglue}\@ARRAY}
|
|
36 \def\<{\(\langle\)}
|
|
37 \def\>{\(\rangle\)}
|
|
38 %\def\|{\verb|}
|
|
39 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
|
|
40 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
|
|
41 \def\LATEX{\iLATEX\Large}
|
|
42 \def\LATEx{\iLATEX\normalsize}
|
|
43 \def\LATex{\iLATEX\small}
|
|
44 \def\iLATEX#1{L\kern-.36em\raise.3ex\hbox{#1\bf A}\kern-.15em
|
|
45 \ T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
|
|
46 \def\LATEXe{\ifx\LaTeXe\undefined \LaTeX 2e\else\LaTeXe\fi}
|
|
47 \def\LATExe{\ifx\LaTeXe\undefined \iLATEX\scriptsize 2e\else\LaTeXe\fi}
|
|
48 \def\Quote{\list{}{}\item[]}
|
|
49 \let\endQuote\endlist
|
|
50 \def\TT{\if@LaTeX@e\tt\fi}
|
|
51 \def\CS#1{\if@LaTeX@e\tt\expandafter\string\csname#1\endcsname\else
|
|
52 $\backslash$#1\fi}
|
0
|
53
|
2
|
54 % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
55 \title{有線上のPC画面配信システムTreeVNCの改良}
|
0
|
56
|
2
|
57 \affiliate{IE}{琉球大学工学部情報工学科}
|
|
58
|
|
59 \author{伊波 立樹}{Tatsuki IHA}{IE}
|
|
60 \author{河野 真治}{Shinji KONO}{IE}
|
0
|
61
|
|
62 \begin{abstract}
|
2
|
63 ゼミや授業等で、それぞれがPC端末を持っている場合では、PCの機能を活かしたコミュニケーションが可能である。教員が操作する画面をそのまま学生に配信したり, ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
|
|
64 TreeVNCは参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる仕組みを取っている。そのため,多人数が参加しても処理性能が下がらない。また、ツリーのRootが見ているVNCサーバーを変更することで、ケーブルの差し替えなしに画面の切替が可能となる。
|
|
65 今研究ではTreeVNCの改良として、WANへの対応、 マルチディスプレイへの対応を行う。
|
0
|
66 \end{abstract}
|
|
67
|
|
68 \begin{jkeyword}
|
|
69 \end{jkeyword}
|
|
70
|
|
71 \maketitle
|
|
72
|
|
73 % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2
|
74 \section{研究背景と目的}
|
|
75 ゼミや授業等で、それぞれがPC端末を持っている場合では、
|
|
76 PCの機能を活かしたコミュニケーションが可能である。
|
|
77 教員が操作する画面をそのまま学生に配信したり、
|
|
78 ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
|
|
79
|
|
80 TreeVNC画面配信システムは、
|
|
81 参加したクライアントをバイナリツリー状に接続し、
|
|
82 配信コストをクライアントにバランスさせる仕組みになっている。
|
|
83 なので、多人数が参加しても処理性能が下がらない。
|
|
84 また、RFBプロトコルを用いているので、ケーブルの差し替えなしに
|
|
85 共有している画面の切り替えが可能になっている。
|
|
86
|
|
87 今研究では、TreeVNCのリファクタリングをすると共に、
|
|
88 port番号の割り当てや、プロトコルの見直しを行った。
|
|
89 これにより、
|
|
90 マルチディスプレイへの対応や、
|
|
91 TreeVNCを遠隔地から利用することを可能にした。
|
|
92 また、マルチスクリーンを使用する際のスクリーンの選択や
|
|
93 サイズの自動変更の問題を解決した。
|
|
94 また、複数のネットワークインターフェスに対応し、
|
|
95 ルータ越えを可能にすることができた。
|
|
96
|
|
97 \section{画面配信システムTreeVNC}
|
|
98 \subsection*{[RFBプロトコル]}
|
|
99 RFB(remote frame buffer)プロトコル\cite{rfbProtocol}とは、自身の画面を送信し、ネットワーク越しに他者の画面に表示するプロトコルである。
|
|
100 ユーザが居る側をRFBクライアント側と呼び、Framebufferへの更新が行われる側はRFBサーバと呼ぶ。
|
|
101 Framebufferとは、メモリ上に置かれた画像データのことである。
|
|
102 RFBプロトコルでは、最初にプロトコルバージョンの確認や認証が行われる。
|
|
103 その後、クライアントに向けてFramebufferの大きさやデスクトップに付けられた名前などが含まれている初期メッセージが送信される。
|
|
104 RFBサーバ側はFramebufferの更新が行われるたびに、RFBクライアントに対してFramebufferの変更部分だけを送信する。
|
|
105 更にRFBクライアントのFramebufferUpdateRequestが来るとそれに答え返信する。
|
|
106 RFBプロトコルは、描画データに使われるエンコードが多数用意されており、また独自のエンコードを実装することもできるプロトコルである。
|
|
107
|
|
108 \subsection*{[TightVNC]}
|
|
109 TightVNC(Tight Virtual Network Computing)\cite{tightvnc}はJavaを用いて作成されたRFBプロトコルのクライアントである。
|
|
110 本研究で作成したTreeVNCはTightVNCを元に作成されている。
|
0
|
111
|
2
|
112 \subsection*{[多人数で VNC を使用する時の問題点]}
|
|
113 多人数で従来の VNC を使用する際、1つのコンピュータに多人数が同時につながり、
|
|
114 処理が集中してしまい、性能が大幅に落ちてしまうという問題が生じる。
|
|
115
|
|
116 ゼミ等の画面配信者が頻繁に切り替わる場合、
|
|
117 配信者が替わる度にアプリケーションを終了し、接続をし直さないといけないという問題がある。
|
|
118
|
|
119 \subsection*{[TreeVNC の構造]}
|
|
120 多人数で VNC を用いるために、クライアントの接続がサーバに一極集中してしまう問題を解決する。
|
|
121 そのために、 TreeVNC はサーバへ接続しに来たクライアントをバイナリツリー状に接続する(図\ref{fig:tree})。
|
|
122 バイナリツリーなら、各nodeに最大2台分のクライアントしか接続されない。
|
|
123 $N$台のクライアントが接続しに来た場合、画面配信の画像データをコピーする回数は、
|
|
124 従来の VNC ではサーバ側で$N$回する必要があるが、TreeVNCでは各 node が2回ずつコピーするだけで済む。
|
|
125 TreeVNC は、root への負荷を各 node に分散することにより、処理性能が向上している。
|
|
126
|
|
127 \begin{figure}[h]
|
|
128 \begin{center}
|
|
129 \includegraphics[width=70mm]{./pic/TreeVNC.pdf}
|
|
130 \end{center}
|
|
131 \caption{構成される木構造}
|
|
132 \label{fig:tree}
|
|
133 \end{figure}
|
|
134
|
|
135 \subsection*{[Multicast や Broadcast を用いたVNC]}
|
|
136 Multicast とは、
|
|
137 同一ネットワーク内でマルチキャストアドレスを持っている端末に対してデータを送信することである。
|
|
138 Broadcast とは、
|
|
139 同一ネットワーク上の全ての端末に対してデータを送信することである。
|
|
140 どちらの通信方法も、root からのデータ送信は1回でよく、
|
|
141 1度データの送信を行うとデータの複製はルータが行う。
|
|
142
|
|
143 VNC を Multicast や Broadcast の通信方法を用いて実装すると、
|
|
144 画像データの送信が1度で済むため、負荷分散のために木構造を形成する必要もなくなる。
|
|
145
|
|
146 しかし、これらの通信方法でのパケットの扱いには
|
|
147 \begin{itemize}
|
|
148 \item 送信可能なパケットのブロックサイズが 64000byte までであると決まっている
|
|
149 \item パケットが途中で消失してしまっても特定することができない
|
|
150 \end{itemize}
|
|
151 といった性質がある。
|
|
152
|
0
|
153
|
2
|
154 VNC でこれらの通信方法を用いて実装する場合、
|
|
155 パケットの扱いの性質を乗り越えなければならない。
|
|
156
|
|
157 送信可能なパケットのサイズが決まっているので、
|
|
158 画面データは 64000byte 以下に分割し送信しなければならない。
|
|
159 しかし、現在の TreeVNC で用いている方法では、
|
|
160 データ分割の処理には時間がかかってしまう。
|
0
|
161
|
2
|
162 パケットの消失を検知するために、
|
|
163 各パケットに対してシリアル番号を振り分ける。
|
|
164 パケットを受信した node 側で、
|
|
165 シリアル番号が連番で届いているのかどうかを調べれば、消失を検知することが可能である。
|
|
166 もしパケットが届いていなかった場合は、root に対して再送要求を送信すれば良い。
|
|
167 しかし、Multicast や Broadcast 通信ではパケットロス率が高かった。
|
|
168
|
|
169 これらの通信方法を用いての VNC の実装にはもう更なる工夫が必要である。
|
|
170
|
|
171
|
|
172
|
|
173 \subsection*{[node 間で行われるメッセージ通信]}
|
0
|
174
|
2
|
175 RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。
|
|
176 %TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。
|
|
177 %
|
|
178 %
|
|
179 %\begin{table*}[htb]
|
|
180 % \scriptsize
|
|
181 % \begin{tabular}{|l|l|l|} \hline
|
|
182 % 通信経路 & message & 説明 \\ \hline \hline
|
|
183 % & FIND\_ROOT & TreeVNC接続時にrootを探す。 \\ \cline{2-3}
|
|
184 % send direct message & WHERE\_TO\_CONNECT & 接続先をrootに聞く。 \\ \cline{2-3}
|
|
185 % (child to root) & LOST\_CHILD & 子nodeの切断をrootに知らせる。 \\ \hline \hline
|
|
186 %
|
|
187 % & FIND\_ROOT\_REPLY & FIND\_ROOTへの返信。 \\ \cline{2-3}
|
|
188 % send direct message & CONNECT\_TO\_AS\_LEADER & 左子nodeとして接続する。接続先のnodeが含まれている。 \\ \cline{2-3}
|
|
189 % (root to child) & CONNECT & 右子nodeとして接続する。接続先のnodeが含まれている。 \\ \hline \hline
|
|
190 %
|
|
191 % message down tree & FRAMEBUFFER\_UPDATE & 画像データ。EncodingTypeを持っている。\\ \cline{2-3}
|
|
192 % (root to child) & CHECK\_DELAY & 通信の遅延を測定する。 \\ \hline \hline
|
|
193 %
|
|
194 % message up tree & CHECK\_DELAY\_REPLY & CHECK\_DELAYへの返信。 \\ \cline{2-3}
|
|
195 % (child to root) & SERVER\_CHANGE\_REQUEST & 画面切り替え要求。 \\ \hline \hline
|
|
196 %
|
|
197 % & FRAMEBUFFER\_UPDATE\_REPLY & 画像データの要求。 \\ \cline{2-3}
|
|
198 % send message & SET\_PIXEL\_FORMAT & pixel値の設定。 \\ \cline{2-3}
|
|
199 % (root to VNCServer) & SET\_ENCODINGS & pixelデータのencodeTypeの設定。 \\ \cline{2-3}
|
|
200 % & KEY\_EVENT & キーボードからのイベント。 \\ \cline{2-3}
|
|
201 % & POINTER\_EVENT & ポインタからのイベント。 \\ \cline{2-3}
|
|
202 % & CLIENT\_CUT\_TEXT & テキストのカットバッファを持った際のmessage。 \\ \hline \hline
|
|
203 %
|
|
204 % & FRAMEBUFFER\_UPDATE & 画像データ。EncodingTypeを持っている。 \\ \cline{2-3}
|
|
205 % send message & SET\_COLOR\_MAP\_ENTRIES & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3}
|
|
206 % (VNCServer to root) & BELL & ビープ音を鳴らす。 \\ \cline{2-3}
|
|
207 % & SERVER\_CUT\_TEXT & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline
|
|
208 % \end{tabular}
|
|
209 % \caption{通信経路とmessage一覧}
|
|
210 % \label{tb:message}
|
|
211 %\end{table*}
|
|
212
|
|
213
|
|
214 図\ref{fig:message}は、
|
|
215 TreeVNC で node が root に接続し、画像データを受信するまでのメッセージ通信の様子である。
|
|
216
|
|
217 \begin{figure}[h]
|
|
218 \begin{center}
|
|
219 \includegraphics[width=70mm]{./pic/message.pdf}
|
|
220 \end{center}
|
|
221 \caption{node 間で行われるメッセージ通信}
|
|
222 \label{fig:message}
|
|
223 \end{figure}
|
|
224
|
0
|
225 \begin{itemize}
|
2
|
226 \item nodeはMulticast通信でrootに対してFIND\_ROOTを送信する(1:findRoot())
|
|
227 \item rootがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
|
|
228 \item node側で、どのrootに接続するかを選択するパネルが表示される
|
|
229 \item nodeはパネルで接続するrootを選択し、rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
|
|
230 \item 受信したrootはnodeの接続先をCONNECT\_TOで送信する(4:connectTo)
|
|
231 \item nodeはrootの指定した接続先に接続しに行く
|
|
232 \item root・node間の接続が確立後、rootからnodeに対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(5:framebufferUpdate())
|
0
|
233 \end{itemize}
|
|
234
|
2
|
235
|
|
236
|
|
237 \subsection*{[配信画面切り替え]}
|
|
238
|
|
239 ゼミでは発表者が順々に入れ替わる。発表者が入れ替わる度に共有する画面の切り替えが必要となる。
|
|
240 ゼミを円滑に進めるために、画面の切り替えをスムーズに行いたい。
|
|
241
|
|
242 画面の共有にプロジェクタを使用する場合、
|
|
243 発表者が変わる度にケーブルの抜き差しを行わないとならない。
|
|
244 その際に、ディスプレイ解像度を設定し直す必要が出たり、
|
|
245 接続不良が起こる等の煩わしい問題が生じることがある。
|
|
246
|
|
247 従来のVNCを使用する場合、
|
|
248 画面の切り替えの度に一旦VNCを終了し、発表者のVNCServerへと再接続を行う必要がある。
|
|
249
|
|
250 TreeVNC は、配信者の切り替えの度に生じる問題を解決している。
|
|
251 TreeVNC を立ち上げることで、ケーブルを使用する必要なしに、
|
|
252 各参加者の手元のPCに発表者の画面を共有することができる。
|
|
253 画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、
|
|
254 share button を押すことによって、配信者の切り替えを行うことができる。
|
|
255
|
|
256 TreeVNC の root は配信者の VNCServer と通信を行っている。
|
|
257 VNCServer から画面データを受信し、そのデータを node へと送信している。
|
|
258 配信者切り替え時に share button が押されると、
|
|
259 root は share button を押したクライアントの VNCServer と通信を始める。
|
|
260 TreeVNCは、配信者切り替えの度に VNC を終了し、再接続する必要がない。
|
|
261
|
|
262 しかし、配信者と受信者の画面サイズの違いや、
|
|
263 マルチディスプレイ全体を共有してしまう問題があるので、
|
|
264 それらを解決する必要がある。
|
|
265
|
|
266
|
|
267 \subsection*{[MulticastQueue]}
|
|
268
|
|
269 配信側の画面が更新されると、 VNCServer から画像データが FRAME\_BUFFER\_UPDATE messageとして送られてくる。
|
|
270 TreeVNC は、画像の更新を複数の node に同時に伝えるため、
|
|
271 MulticastQueue という Queue に画像データを格納する。
|
|
272
|
|
273 各 node は MulticastQueue からデータを取得するスレッドを持つ。
|
|
274 MulticastQueue は複数のスレッドから使用される。
|
|
275
|
|
276 MulticastQueue は、
|
|
277 java.util.concurrent.CountDownLatch を用いて実装されている。
|
|
278 CountDownLatch とは、
|
|
279 java の並列用に用意された API で、他のスレッドで実行中の操作が完了するまで、
|
|
280 複数のスレッドを待機させることのできるクラスである。
|
|
281 スレッドを解放するカウントを設定することができ、
|
|
282 カウントが 0 になるまで await メソッドでスレッドをブロックすることができる。
|
|
283
|
|
284 TreeVNC では、それぞれの画像データにカウントが追加され、
|
|
285 カウントが 0 になると、その画像データは消される。
|
|
286 親 node がMulticastQueueを持っており、
|
|
287 接続されている子 node の数だけ画像データにカウントを設定する。
|
|
288 子 node が画像データを取得すると、そのカウントが減る。
|
|
289 接続している全ての子 node が画像データを取得するとカウントが 0 になり、
|
|
290 MulticastQueueから画像データが消される。
|
|
291
|
|
292 親node は、接続している全ての子nodeが画像データを取得するまで
|
|
293 MulticastQueueの中に持っている画像データを削除することができない。
|
|
294 node が MulticastQueue からデータを取得せずに、
|
|
295 Queue にデータが溜まり続けると、Memory Over Flowを起こしてしまう。
|
|
296 この問題を避けるために、Timeout用のスレッドを用意している。
|
|
297 Timeout スレッドは、ある一定時間取得されない画像データがある場合、
|
|
298 そのデータを node の代わりにpollするという仕組みである。
|
|
299 Timeout スレッドにより、Memory Over Flowを防ぐことができる。
|
|
300
|
|
301 \section{QUALITYモードとSPEEDモード}
|
|
302 高解像度のまま拡大・縮小の処理を行うと、
|
|
303 PC のスペックによっては描画処理に時間がかかってしまうことがある。
|
|
304 配信者の画面をリアルタイムに取得するため、
|
|
305 描画処理に時間のかからないモードを追加する。
|
|
306
|
|
307 画像描画処理には、
|
|
308 高画質優先の QUALITY モードと描画速度優先の SPEED モードがある。
|
|
309 今まで TreeVNC は QUALITY モードで使用していた。
|
|
310
|
|
311 今回、どちらのモードを使用するかをビューワから変更出来るようにした。
|
|
312 これにより、描画処理の遅延を解決することができた。
|
|
313
|
|
314 \section{表示画面サイズ調整機能}
|
|
315
|
|
316 配信側PCによって、配信される画面サイズが変わる。
|
|
317 配信側とクライアントで画面サイズに差がある場合、
|
|
318 画面に入りきらない、或いは表示画面が小さすぎる等の問題が生じる。
|
|
319
|
|
320 ユーザ毎に適切な画面サイズがあり、
|
|
321 簡単に表示画面を適切な大きさに変更できるようにしたい。
|
0
|
322
|
2
|
323 今回、ビューワに HD ボタンと fit screen ボタンを追加した。
|
|
324 HD ボタンは、画面サイズを 1920x1080 サイズに拡大・縮小し、
|
|
325 fit screen ボタンは、クライアントの画面サイズに合わせてフルサイズで拡大・縮小する。
|
|
326
|
|
327 更に、rootとして起動し、viewer も表示される -d オプションを使用した場合は、
|
|
328 表示される画面を常に画面にフィットする様にした。
|
|
329
|
|
330 \section{マルチディスプレイ対応}
|
|
331
|
|
332 画面配信側のPCがマルチディスプレイの場合、
|
|
333 VNCServer からは複数の画面全体の画像データが送信され、
|
|
334 図\ref{fig:multidisplay}の様に画面が配信される。
|
|
335
|
|
336 \begin{figure}[h]
|
|
337 \begin{center}
|
|
338 \includegraphics[width=70mm]{./pic/multidisplay.pdf}
|
|
339 \end{center}
|
|
340 \caption{マルチディスプレイの描画}
|
|
341 \label{fig:multidisplay}
|
|
342 \end{figure}
|
|
343
|
|
344 授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。
|
|
345
|
|
346 そこで、一画面のみをフィルタリングし表示するためのオプション機能(${\mathchar`-}$${\mathchar`-}$filterSingleDisplay)を追加した。
|
|
347 オプションを追加した起動方法をソースコード\ref{filtersingledisplay}に記述する。
|
|
348
|
|
349 root はVNCServerから送られてくる全画面データから一画面のみをフィルタリングする必要がある。
|
|
350 シングルディスプレイサイズは、個々のクライアントでしか取得できない。
|
|
351 なので、配信側は画面の切り替えを行う際に、シングルディスプレイサイズを取得し、
|
|
352 root へ送信する画面切り替えを要求する SERVER\_CHANGE\_REQUEST message に
|
|
353 シングルディスプレイサイズを付加する様にした。
|
|
354
|
|
355 root はメッセージを受け取り initData を変更する。
|
|
356 initData は、RFB プロトコルで行われる通信中に VNCServer が送信するServerInit message から生成される。
|
|
357 画像データが送られてくる前の段階で、これから送信されるデータの情報を取得し、描画の準備をする。
|
|
358 ServerInit messageに含まれているデータは、
|
|
359 配信先の画面サイズ、pixel format、配信先のPCの名前である。
|
|
360
|
|
361 マルチディスプレイの場合、VNCServerは数画面全体のサイズを送信する。
|
|
362 そのまま initData を使用すると複数画面全体を描画することになる。
|
|
363 それを避けるため、initData をシングルディスプレイサイズ用の originalInitData に生成し直す。
|
|
364 図\ref{fig:initdata}の様に、root は接続されている node へ originalInitData を送信する。
|
|
365
|
|
366 \begin{figure}[h]
|
|
367 \begin{center}
|
|
368 \includegraphics[width=70mm]{./pic/sendInitData.pdf}
|
|
369 \end{center}
|
|
370 \caption{シングルディスプレイサイズ用の initData}
|
|
371 \label{fig:initdata}
|
|
372 \end{figure}
|
|
373
|
|
374 これにより、一画面のみの表示が可能となる。
|
|
375
|
|
376
|
|
377 \section{無線LANへの対応}
|
|
378 授業でTreeVNCを使用する場合、
|
|
379 有線を使用するか否かは学生によって違う。
|
|
380 TreeVNCを有線・無線の両方からの接続に対応したい。
|
|
381
|
|
382 従来の TreeVNC は、クライアントの接続する木構造が単一であった。
|
|
383 そのため、単一のネットワークインターフェースでしか使用することができなかった。
|
|
384
|
|
385 この問題を解決するために、
|
|
386 図\ref{fig:multinetworktree}の様に、ネットワークインターフェース別に
|
|
387 木構造を形成するように設計した。
|
|
388
|
|
389 \begin{figure}[h]
|
|
390 \begin{center}
|
|
391 \includegraphics[width=70mm]{./pic/MultiNetworkTree.pdf}
|
|
392 \end{center}
|
|
393 \caption{Multi Network Tree}
|
|
394 \label{fig:multinetworktree}
|
|
395 \end{figure}
|
|
396
|
|
397 TreeVNC は、root が TreeManager というオブジェクトを持っている。
|
|
398 TreeManager は TreeVNC の接続部分を管理している。
|
|
399 TreeManager では木構造を管理する nodeList が生成される。
|
|
400 この nodeList を元に、新しい node の接続や、node の切断検出時の接続の切り替え等を行う。
|
|
401
|
|
402 root の保持しているネットワークインタフェース毎に
|
|
403 TreeManager を生成する様に変更した。
|
|
404 ソースコード\ref{createtreemanager}に、nodeList を生成する部分を示す。
|
|
405
|
|
406 \newpage
|
|
407
|
|
408 \lstinputlisting[breaklines=true,caption=TreeManager の生成,label=createtreemanager]{source/GetNetworkInterfaces.java}
|
|
409
|
0
|
410 \begin{itemize}
|
2
|
411 \item for 文を使用し root が所持しているネットワークインタフェースを取得する(2行目)
|
|
412 \item その中から、起動しており Multicast に対応しており、また、ループバックインタフェースでないネットワークインタフェースを取得する(4行目)
|
|
413 \item 取得してきたネットワークインタフェースの、ネットマスク、ホストネームを取得する(6,7行目)
|
|
414 \item TreeManager を生成する(8行目)
|
|
415 \item TreeManager にネットマスクとネットアドレスを追加する(14行目)
|
|
416 \item HashMap である interfaces に ネットワークインタフェースと対応する TreeManager を追加する(15行目)
|
|
417 \end{itemize}
|
|
418
|
|
419 新しい node が接続してきた際、
|
|
420 interfaces から node のネットワークインタフェースと一致する TreeManager を取得する。
|
|
421 その TreeManager に、node 接続の処理を任せる。
|
|
422
|
|
423 こうすることによって、TreeVNC を複数のネットワークインターフェース別に
|
|
424 木構造を構成することができる。
|
|
425
|
|
426 \section{WANへの対応}
|
|
427 遠隔地からでもゼミや授業に参加できるよう、
|
|
428 異なるネットワークインタフェースから TreeVNC への接続を可能にした。
|
|
429
|
|
430 遠隔地からの接続を実現した TreeVNC を図\ref{fig:remotetreevnc}に示す。
|
|
431 図\ref{fig:remotetreevnc}では、
|
|
432 ネットワーク A で立ち上げた TreeVNC に対し、
|
|
433 遠隔地のネットワーク B, C, D から接続している状態である。
|
|
434 図の様に、各ネットワーク毎に TreeManager を持つ root node が存在する。
|
|
435 TreeManager を持つ node は、そのネットワーク上での接続の木構造を管理する root となる。
|
|
436 遠隔地ネットワークから直接 TreeVNC に接続した node は root となる。
|
|
437
|
|
438 \begin{figure}[h]
|
|
439 \begin{center}
|
|
440 \includegraphics[width=70mm]{./pic/remoteTreeVnc.pdf}
|
|
441 \end{center}
|
|
442 \caption{Remote Network Tree}
|
|
443 \label{fig:remotetreevnc}
|
|
444 \end{figure}
|
|
445
|
|
446
|
|
447
|
|
448 以下に、遠隔地からの接続の手順を記述する。
|
|
449
|
|
450 \begin{itemize}
|
|
451 \item 遠隔地 node から接続したい root に対して接続を要求する WHERE\_TO\_CONNECT message を送信する(図\ref{fig:remotevncconnect}中, 1:)
|
|
452 \item root は、遠隔地 node に対して接続先を含む CONNECT\_TO message を送信する(図\ref{fig:remotevncconnect}中, 2:)
|
|
453 \item 遠隔地 node は指定された接続先に対して接続しに行く(図\ref{fig:remotevncconnect}中, 3:)
|
|
454 \end{itemize}
|
|
455
|
|
456 \begin{figure}[h]
|
|
457 \begin{center}
|
|
458 \includegraphics[width=70mm]{./pic/remoteVncConnect.pdf}
|
|
459 \end{center}
|
|
460 \caption{遠隔地 node からの接続}
|
|
461 \label{fig:remotevncconnect}
|
|
462 \end{figure}
|
|
463
|
|
464 ネットワーク毎に TreeVNC の木構造は管理される。
|
|
465 図\ref{fig:remotenetworktree1}の TreeVNC の木構造はバイナリツリーを形成している。
|
|
466 しかし、遠隔地 node が接続している node には合計3つ node が接続している。
|
|
467 遠隔地 node は、root の管理する nodeList に追加されない。
|
|
468 これは、node の接続・切断・切り替えに遠隔地 node を関与させないためである。
|
|
469
|
|
470 ネットワーク毎に root が存在する。
|
|
471 root は同じネットワーク上の新しい node からの
|
|
472 接続を受け付ける(図\ref{fig:remotenetworktree1}中, 1,2,1',2':)。
|
|
473
|
|
474 \begin{figure}[h]
|
|
475 \begin{center}
|
|
476 \includegraphics[width=70mm]{./pic/remotenetwork.pdf}
|
|
477 \end{center}
|
|
478 \caption{Remote Network Tree}
|
|
479 \label{fig:remotenetworktree1}
|
|
480 \end{figure}
|
|
481
|
|
482
|
|
483 遠隔地 node からでも、画面を配信できるようにする。
|
|
484 遠隔地 node から画面配信を行う場合の画面の切り替えを図\ref{fig:remotenetworktree2}、図\ref{fig:remotenetworktree5}に示す。
|
|
485 以下に、画面切り替えの説明を記述する。
|
|
486
|
|
487 \begin{itemize}
|
|
488 \item 遠隔地 node が親 node へと SERVER\_CHANGE\_REQUEST を送信する(図\ref{fig:remotenetworktree2}中, 1:)
|
|
489 \item SERVER\_CHANGE\_REQUEST には、id が付いており、遠隔地 node からであれば -1 が付加されている
|
|
490 \item SERVER\_CHANGE\_REQUEST は root へと送信される(図\ref{fig:remotenetworktree2}中, 2:)
|
|
491 \item root は SERVER\_CHANGE\_REQUEST の id を確認し、id = -1 の場合、遠隔地 root に対して WHERE\_TO\_CONNECT を送信する(図\ref{fig:remotenetworktree2}中, 3:)
|
|
492 \item 遠隔地 root は WHERE\_TO\_CONNECT の返信として、接続先を含む CONNECT\_TO を送信する(図\ref{fig:remotenetworktree5}中, 4:)
|
|
493 \item root は指定された接続先へと接続しに行く(図\ref{fig:remotenetworktree5}中, 5:)
|
0
|
494 \end{itemize}
|
2
|
495
|
|
496 \begin{figure}[h]
|
|
497 \begin{center}
|
|
498 \includegraphics[width=70mm]{./pic/remotenetwork2.pdf}
|
|
499 \end{center}
|
|
500 \caption{Remote Network Tree}
|
|
501 \label{fig:remotenetworktree2}
|
|
502 \end{figure}
|
|
503
|
|
504 \begin{figure}[h]
|
|
505 \begin{center}
|
|
506 \includegraphics[width=70mm]{./pic/remotenetwork5.pdf}
|
|
507 \end{center}
|
|
508 \caption{Remote Network Tree}
|
|
509 \label{fig:remotenetworktree5}
|
|
510 \end{figure}
|
|
511
|
|
512 \section{評価}
|
|
513
|
|
514 \subsection*{[木の深さによるメッセージ伝達の遅延]}
|
|
515 VNCServer から受信する画像データ、
|
|
516 TreeVNC で扱われるメッセージ通信は構成された木を伝って伝達される。
|
|
517 接続する人数が増える毎に木の段数は増えていく。
|
|
518 そこで root から木の末端の node まで、
|
|
519 メッセージが遅延することなく伝達できているかを検証する実験を行った。
|
|
520
|
|
521
|
|
522 \subsection*{[実験環境]}
|
|
523 授業を受講している学生が TreeVNC を使用した状態で実験を行った。
|
|
524 TreeVNC には最大で34名が接続していた。
|
|
525
|
|
526 \subsection*{[メッセージを使用した実測]}
|
|
527 TreeVNC を伝搬するメッセージに、CHECK\_DELAY・CHECK\_DELAY\_REPLY を追加した。
|
|
528 CHECK\_DELAY は root から node の末端まで伝達するメッセージ(図\ref{fig:checkdelay}, 左)、
|
|
529 CHECK\_DELAY\_REPLY は各 node から root まで伝達するメッセージ(図\ref{fig:checkdelay}, 右)である。
|
|
530
|
|
531 % heart beat 代わりにも使える等の違ったメリットも書く?
|
|
532 % デバッグに使用できたとかって
|
|
533
|
|
534 \begin{figure}[h]
|
|
535 \begin{center}
|
|
536 \includegraphics[width=70mm]{./pic/checkDelay.pdf}
|
|
537 \end{center}
|
|
538 \caption{CHECH\_DELAY, CHECK\_DELAY\_REPLY}
|
|
539 \label{fig:checkdelay}
|
|
540 \end{figure}
|
0
|
541
|
2
|
542 CHECK\_DELAY message は、送信時刻を付けて送信する。
|
|
543 root から CHECK\_DELAY 送信し、
|
|
544 末端 node まで各 node を伝いながら伝達して行く。
|
|
545
|
|
546 CHECK\_DELAY\_REPLY には、CHECK\_DELAY から受け取った送信時刻をそのまま付つけて送信する。
|
|
547 CHECK\_DELAY を受け取った各 node は、
|
|
548 CHECK\_DELAY\_REPLY を接続している親 node に送信する。
|
|
549
|
|
550 CHECK\_DELAY\_REPLY を受け取った root は、
|
|
551 メッセージの伝達にどれだけの時間がかかったかを計算する。
|
|
552
|
|
553 計算方法を以下のソースコード\ref{calc}に記述する。
|
|
554 各 node にデータを下ろす際も、root にデータが上る際も、
|
|
555 木を伝い受け渡されている。
|
|
556 なので、データが root から末端 node に伝わる時間は、
|
|
557 CHECK\_DELAY を送信した時間と、
|
|
558 CHECK\_DELAY\_REPLY を受信した時間の半分であるといえる。
|
|
559
|
|
560 % あとでコメントアウトはずす
|
|
561 \begin{lstlisting}[caption=遅延時間の計算方法,label=calc]
|
|
562 Long delay = System.currentTimeMillis() - time;
|
|
563 double halfDelay = (double) delay / 2;
|
|
564 \end{lstlisting}
|
|
565
|
|
566
|
|
567 \subsection*{[depth毎の遅延結果]}
|
|
568 バイナリツリーで木を構成した場合、
|
|
569 node 数が34台だと深さが5となる。
|
|
570 各木構造の階層毎に、メッセージの伝搬にかかった時間を測定した。
|
|
571
|
|
572 図\ref{fig:test}は遅延の分布を示したヒストグラムである。
|
|
573 X軸はメッセージ伝達にかかった秒数(ms)、
|
|
574 Y軸は CHECK\_DELAY\_REPLY を送信した node の割合を表している。
|
|
575
|
|
576 ほとんどのメッセージの伝達は 0.0 〜 4.0 ミリ秒内に収まっている。
|
|
577 木の段数毎に、メッセージ伝達速度の差が生じている。
|
|
578 深い段数の node ほど、メッセージ伝達速度が落ちている。
|
|
579
|
|
580
|
|
581 \begin{figure}[h]
|
|
582 \begin{center}
|
|
583 \includegraphics[width=70mm]{./pic/test.pdf}
|
|
584 \end{center}
|
|
585 \caption{step1}
|
|
586 \label{fig:test}
|
|
587 \end{figure}
|
0
|
588
|
1
|
589 \section{まとめ}
|
0
|
590
|
|
591 \begin{acknowledgment}
|
2
|
592 謝辞が必要であれば,ここに書く.
|
0
|
593 \end{acknowledgment}
|
|
594
|
1
|
595 % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
0
|
596 % \bibliographystyle{ipsjsort}
|
|
597 % \bibliography{ref}
|
|
598
|
1
|
599 % BibTeX を使用しない場合
|
0
|
600 \begin{thebibliography}{9}
|
2
|
601 \bibitem{latex} 奥村晴彦, 黒木裕介: \textbf{LaTeX2e美文書作成入門}. 技術評論社, 2013.
|
0
|
602 \end{thebibliography}
|
|
603
|
|
604 \end{document}
|