comparison paper/prosym.tex @ 2:d964ad17d606

Add oc-thesis
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 10 Nov 2015 02:10:48 +0900
parents 10e5ea7ae31e
children 74034b769a12
comparison
equal deleted inserted replaced
1:10e5ea7ae31e 2:d964ad17d606
1 % withpage: ページ番号をつける (著者確認用) 1 % withpage: ページ番号をつける (著者確認用)
2 % english: 英語原稿用フォーマット
3 \documentclass{ipsjprosym} 2 \documentclass{ipsjprosym}
4 %\documentclass[withpage,english]{ipsjprosym} 3 \usepackage{listings, jlisting}
5 4 \usepackage[dvipdfmx]{graphicx}
6 \usepackage[dvips]{graphicx}
7 \usepackage{latexsym} 5 \usepackage{latexsym}
8 6
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
30
9 \begin{document} 31 \begin{document}
10 32
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}
53
11 % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 54 % Title, Author %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12 \title{タイトルをここに} 55 \title{有線上のPC画面配信システムTreeVNCの改良}
13 56
14 \affiliate{IPSJ}{情報処理学会} 57 \affiliate{IE}{琉球大学工学部情報工学科}
15 \affiliate{PROSYM}{プログラミング・シンポジウム幹事団} 58
16 59 \author{伊波 立樹}{Tatsuki IHA}{IE}
17 \author{情報 太郎}{Joho Taro}{IPSJ}[taro@ipsj.or.jp] 60 \author{河野 真治}{Shinji KONO}{IE}
18 \author{プロシン 花子}{Hiroki MIZUNO}{PROSYM}[hanako@prosym.ipsj.or.jp]
19 61
20 \begin{abstract} 62 \begin{abstract}
21 [概要(400字程度)] 63 ゼミや授業等で、それぞれがPC端末を持っている場合では、PCの機能を活かしたコミュニケーションが可能である。教員が操作する画面をそのまま学生に配信したり, ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
22 本テンプレートは,プログラミング・シンポジウム予稿集に掲載される原稿のた 64 TreeVNCは参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる仕組みを取っている。そのため,多人数が参加しても処理性能が下がらない。また、ツリーのRootが見ているVNCサーバーを変更することで、ケーブルの差し替えなしに画面の切替が可能となる。
23 めのスタイルファイルの使い方を示すものである.著者より提出された原稿は, 65 今研究ではTreeVNCの改良として、WANへの対応、 マルチディスプレイへの対応を行う。
24 ヘッダやページ番号が付加されて,B5サイズにて製本される.そのため,スタイ
25 ルファイルを使用した原稿は,通常よりも大きな余白がとられ,またページ番号
26 等がつかない.印刷時の問題を避けるため,最終原稿の提出の際には,フォント
27 の埋め込みを行ってください.○○○○○○○○○○○○○○○○○○○○○○
28 ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
29 ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
30 ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
31 ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
32 ○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○○
33 \end{abstract} 66 \end{abstract}
34 67
35 \begin{jkeyword} 68 \begin{jkeyword}
36 プログラミング・シンポジウム,冬,予稿集
37 \end{jkeyword} 69 \end{jkeyword}
38 70
39 \maketitle 71 \maketitle
40 72
41 % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 73 % Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
42 \section{はじめに} 74 \section{研究背景と目的}
43 75 ゼミや授業等で、それぞれがPC端末を持っている場合では、
44 本テンプレートは「プログラミング・シンポジウム予稿集」に掲載される 76 PCの機能を活かしたコミュニケーションが可能である。
45 原稿のためのクラスファイル(\verb|ipsjprosym.cls|)の使い方について説明するものである. 77 教員が操作する画面をそのまま学生に配信したり、
46 78 ゼミなどで、発表する学生の画面を切り替えたりすることを可能にしたい。
47 プログラミング・シンポジウム予稿集の原稿は,印刷前にまとめてページ番号が振られ, 79
48 B5版で製本される.本クラスファイルを用いることで,そのような原稿を作成できるはずである. 80 TreeVNC画面配信システムは、
49 81 参加したクライアントをバイナリツリー状に接続し、
50 \section{オプション} 82 配信コストをクライアントにバランスさせる仕組みになっている。
51 83 なので、多人数が参加しても処理性能が下がらない。
52 \verb|ipsjprosym.cls| では以下の二つのオプションを提供している. 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を元に作成されている。
111
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 しかし、これらの通信方法でのパケットの扱いには
53 \begin{itemize} 147 \begin{itemize}
54 \item \verb|withpage|: 著者が執筆上必要な場合のため,ページ番号をつける 148 \item 送信可能なパケットのブロックサイズが 64000byte までであると決まっている
55 \item \verb|english|: 英語で執筆される場合にフォーマットを調整する. 149 \item パケットが途中で消失してしまっても特定することができない
56 \end{itemize} 150 \end{itemize}
57 151 といった性質がある。
58 \section{論文1ページ目の情報} 152
59 153
60 論文の1ページ目には,タイトル,著者名,著者所属,概要,キーワードが配置される. 154 VNC でこれらの通信方法を用いて実装する場合、
61 それぞれ, 155 パケットの扱いの性質を乗り越えなければならない。
156
157 送信可能なパケットのサイズが決まっているので、
158 画面データは 64000byte 以下に分割し送信しなければならない。
159 しかし、現在の TreeVNC で用いている方法では、
160 データ分割の処理には時間がかかってしまう。
161
162 パケットの消失を検知するために、
163 各パケットに対してシリアル番号を振り分ける。
164 パケットを受信した node 側で、
165 シリアル番号が連番で届いているのかどうかを調べれば、消失を検知することが可能である。
166 もしパケットが届いていなかった場合は、root に対して再送要求を送信すれば良い。
167 しかし、Multicast や Broadcast 通信ではパケットロス率が高かった。
168
169 これらの通信方法を用いての VNC の実装にはもう更なる工夫が必要である。
170
171
172
173 \subsection*{[node 間で行われるメッセージ通信]}
174
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
62 \begin{itemize} 225 \begin{itemize}
63 \item \verb|\title| 226 \item nodeはMulticast通信でrootに対してFIND\_ROOTを送信する(1:findRoot())
64 \item \verb|\author| 227 \item rootがFIND\_ROOTを受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
65 \item \verb|affiliate| 228 \item node側で、どのrootに接続するかを選択するパネルが表示される
66 \item \verb|\begin{abstract}|〜\verb|\end{abstract}| 229 \item nodeはパネルで接続するrootを選択し、rootに対して接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
67 \item \verb|\begin{jkeyword}|〜\verb|\end{jkeyword}| 230 \item 受信したrootはnodeの接続先をCONNECT\_TOで送信する(4:connectTo)
231 \item nodeはrootの指定した接続先に接続しに行く
232 \item root・node間の接続が確立後、rootからnodeに対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(5:framebufferUpdate())
68 \end{itemize} 233 \end{itemize}
69 によって記述する. 234
70 その後,\verb|\maketitle| コマンドによってそれらの情報が配置される. 235
71 236
72 以下,通常の論文と同様の形式で記述して下さい. 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 簡単に表示画面を適切な大きさに変更できるようにしたい。
322
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
410 \begin{itemize}
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:)
494 \end{itemize}
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}
541
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}
73 588
74 \section{まとめ} 589 \section{まとめ}
75 590
76 本テンプレートでは,プログラミング・シンポジウム向けの原稿を,
77 \LaTeX を用いて準備する方法についてごく簡単に示した.
78
79 本テンプレートに関する質問・バグ報告は,
80 第56回プログラミングシンポジウム予稿集担当(松崎公紀)\verb|matsuzaki.kiminori@kochi-tech.ac.jp|
81 まで連絡下さい.
82
83 \begin{acknowledgment} 591 \begin{acknowledgment}
84 謝辞が必要であれば,ここに書く. 592 謝辞が必要であれば,ここに書く.
85 \end{acknowledgment} 593 \end{acknowledgment}
86 594
87 % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 595 % BibTeX を使用する場合 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
88 % \bibliographystyle{ipsjsort} 596 % \bibliographystyle{ipsjsort}
89 % \bibliography{ref} 597 % \bibliography{ref}
90 598
91 % BibTeX を使用しない場合 599 % BibTeX を使用しない場合
92 \begin{thebibliography}{9} 600 \begin{thebibliography}{9}
93 \bibitem{latex} 奥村晴彦, 黒木裕介: \textbf{LaTeX2e美文書作成入門}. 技術評論社, 2013. 601 \bibitem{latex} 奥村晴彦, 黒木裕介: \textbf{LaTeX2e美文書作成入門}. 技術評論社, 2013.
94 \end{thebibliography} 602 \end{thebibliography}
95 603
96 \end{document} 604 \end{document}