annotate paper/chapter2.tex @ 20:925d73a27825

add images, update
author oc
date Tue, 17 Feb 2015 15:15:21 +0900
parents 16c5f065f7e7
children 39c7868b6f3d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
1 \chapter{TreeVNC について}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
2
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
3
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
4 \section{RFBプロトコル}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
5 RFB(remote frame buffer)プロトコル\cite{rfbProtocol}とは、自身の画面を送信し、ネットワーク越しに他者の画面に表示するプロトコルである。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
6 ユーザが居る側をRFBクライアント側と呼び、Framebufferへの更新が行われる側はRFBサーバと呼ぶ。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
7 Framebufferとは、メモリ上に置かれた画像データのことである。
3
oc
parents: 1
diff changeset
8 RFBプロトコルでは、最初にプロトコルバージョンの確認や認証が行われる。
oc
parents: 1
diff changeset
9 その後、クライアントに向けてFramebufferの大きさやデスクトップに付けられた名前などが含まれている初期メッセージが送信される。
oc
parents: 1
diff changeset
10 RFBサーバ側はFramebufferの更新が行われるたびに、RFBクライアントに対してFramebufferの変更部分だけを送信する。
oc
parents: 1
diff changeset
11 更にRFBクライアントのFramebufferUpdateRequestが来るとそれに答え返信する。
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
12 RFBプロトコルは、描画データに使われるエンコードが多数用意されており、また独自のエンコードを実装することもできるプロトコルである。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
13
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
14
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
15 \section{TightVNC}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
16 TightVNC(Tight Virtual Network Computing)\cite{tightvnc}はJavaを用いて作成されたRFBプロトコルのクライアントである。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
17 本研究で作成したTreeVNCはTightVNCを元に作成されている。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
18
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
19
3
oc
parents: 1
diff changeset
20 \section{多人数で VNC を使用するときの問題点}
oc
parents: 1
diff changeset
21 多人数で従来の VNC を使用する際、1つのコンピュータに多人数が同時につながり、
oc
parents: 1
diff changeset
22 処理が集中してしまい、性能が大幅に落ちてしまうという問題が生じる。
oc
parents: 1
diff changeset
23
oc
parents: 1
diff changeset
24 ゼミ等の画面配信者が頻繁に切り替わる場合、
oc
parents: 1
diff changeset
25 配信者が替わる度にアプリケーションを終了し、接続をし直さないといけないという問題がある。
oc
parents: 1
diff changeset
26
oc
parents: 1
diff changeset
27
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
28 \newpage
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
29
3
oc
parents: 1
diff changeset
30
oc
parents: 1
diff changeset
31 \section{TreeVNC の構造}
oc
parents: 1
diff changeset
32 多人数で VNC を用いるために、クライアントの接続がサーバに一極集中してしまう問題を解決する。
oc
parents: 1
diff changeset
33 そのために、 TreeVNC はサーバへ接続しに来たクライアントをバイナリツリー状に接続する(図\ref{fig:tree})。
oc
parents: 1
diff changeset
34 バイナリツリーなら、各nodeに最大2台分のクライアントしか接続されない。
oc
parents: 1
diff changeset
35 $N$台のクライアントが接続しに来た場合、画面配信の画像データをコピーする回数は、
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
36 従来の VNC ではサーバ側で$N$回する必要があるが、TreeVNCでは各 node が2回ずつコピーするだけで済む。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
37 TreeVNC は、root への負荷を各 node に分散することにより、処理性能が向上している。
3
oc
parents: 1
diff changeset
38
oc
parents: 1
diff changeset
39 \begin{figure}[htpd]
oc
parents: 1
diff changeset
40 \begin{center}
oc
parents: 1
diff changeset
41 \includegraphics[scale=0.4]{./images/chapter2/TreeVNC.pdf}
oc
parents: 1
diff changeset
42 \end{center}
oc
parents: 1
diff changeset
43 \caption{構成される木構造}
oc
parents: 1
diff changeset
44 \label{fig:tree}
oc
parents: 1
diff changeset
45 \end{figure}
oc
parents: 1
diff changeset
46
oc
parents: 1
diff changeset
47
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
48 \section{Multicast や Broadcast を用いたVNC}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
49
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
50 Multicast とは、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
51 同一ネットワーク内でマルチキャストアドレスを持っている端末に対してデータを送信することである。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
52 Broadcast とは、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
53 同一ネットワーク上の全ての端末に対してデータを送信することである。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
54 どちらの通信方法も、root からのデータ送信は1回でよく、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
55 1度送信するとデータの複製はルータが行う。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
56
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
57 VNC を Multicast や Broadcast の通信方法を用いて実装すると、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
58 画像データの送信が1度で済み、負荷分散のために木構造を形成する必要もなくなる。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
59
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
60 しかし、これらの通信方法でのパケットの扱いには
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
61 \begin{itemize}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
62 \item 送信可能なパケットのブロックサイズが 64000byte までであると決まっている
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
63 \item パケットが途中で消失してしまっても特定することができない
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
64 \end{itemize}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
65 といった性質がある。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
66
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
67 \newpage
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
68
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
69 VNC でこれらの通信方法を用いて実装する場合、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
70 パケットの扱いの性質を乗り越えなければならない。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
71
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
72 送信可能なパケットのサイズが決まっているので、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
73 画面データは 64000byte 以下に分割し送信しなければならない。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
74 しかし、現在の TreeVNC で用いている方法では、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
75 データ分割の処理には時間がかかってしまう。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
76
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
77 パケットの消失を検知するためには、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
78 各パケットに対してシリアル番号を振り分ける。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
79 パケットを受信した node 側で、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
80 シリアル番号が連番で届いているのかどうかを調べれば検知することが可能である。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
81 もし届いていなかった場合は、root に対して再送要求を送信すれば良い。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
82 しかし、Multicast や Broadcast 通信ではパケットロス率が高かった。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
83
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
84 これらの通信方法を用いての VNC の実装にはもう少し工夫が必要である。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
85
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
86
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
87
3
oc
parents: 1
diff changeset
88 \section{node 間で行われるメッセージ通信}
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
89 RFBプロトコルで提供されているメッセージに加え、 TreeVNC 独自のメッセージを使用している。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
90 TreeVNC で使用されるメッセージの一覧を表\ref{tb:message}に示す。
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
91
3
oc
parents: 1
diff changeset
92
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
93 \begin{table*}[htb]
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
94 \scriptsize
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
95 \begin{tabular}{|l|l|l|} \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
96 通信経路 & message & 説明 \\ \hline \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
97 & FIND\_ROOT & 子node接続時にrootを探す。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
98 send direct message & WHERE\_TO\_CONNECT & どのnodeに接続すれば良いかを聞く。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
99 (child to root) & LOST\_PARENT & 親nodeの接続が切れた時にrootに知らせる。 \\ \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
100
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
101 & FIND\_ROOT\_REPLY & FIND\_ROOTへの返信。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
102 send direct message & CONNECT\_TO & nodeとnodeの接続をする。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
103 (root to child) & CONNECT\_TO\_AS\_LEADER & 左子nodeとして、nodeとnodeの接続をする。 \\ \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
104
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
105 message down tree & FRAMEBUFFER\_UPDATE & 画面の差分の画像データ。EncodingTypeを持っている。\\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
106 (root to child) & CHECK\_DELAY & 通信の遅延を測定するmessage。 \\ \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
107
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
108 message up tree & CHECK\_DELAY\_REPLY & CHECK\_DELAYへの返信。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
109 (child to root) & SERVER\_CHANGE\_REQUEST & 画面切り替えのリクエスト。 \\ \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
110
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
111 & FRAMEBUFFER\_UPDATE\_REPLY & FRAMEBUFFER\_UPDATEのリクエスト。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
112 send message & SET\_PIXEL\_FORMAT & pixel値の設定。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
113 (root to VNCServer) & SET\_ENCODINGS & pixelデータのencodeTypeの設定。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
114 & KEY\_EVENT & キーボードからのイベント。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
115 & POINTER\_EVENT & ポインタからのイベント。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
116 & CLIENT\_CUT\_TEXT & テキストのカットバッファを持った際のmessage。 \\ \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
117
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
118 & FRAMEBUFFER\_UPDATE & 大本の画面の差分の画像データ。EncodingTypeを持っている。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
119 send message & SET\_COLOR\_MAP\_ENTRIES & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
120 (VNCServer to root) & BELL & ビープ音を鳴らす。 \\ \cline{2-3}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
121 & SERVER\_CUT\_TEXT & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
122 \end{tabular}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
123 \caption{通信経路とmessage一覧}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
124 \label{tb:message}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
125 \end{table*}
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
126
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
127
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
128 図\ref{fig:message}は、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
129 TreeVNC で node が root に接続し、画像データを受信するまでのメッセージ通信の様子である。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
130
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
131
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
132
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
133 \newpage
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
134
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
135
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
136 \begin{figure}[htbp]
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
137 \begin{center}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
138 \begin{tabular}{c}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
139
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
140 \begin{minipage}{0.5\hsize}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
141 \begin{center}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
142 \includegraphics[width=67mm]{./images/chapter2/message.pdf}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
143 \end{center}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
144 \caption{node 間で行われるメッセージ通信}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
145 \label{fig:message}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
146 \end{minipage}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
147
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
148 \begin{minipage}{0.5\hsize}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
149 \begin{itemize}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
150 \item nodeはMulticast通信でrootに対してFIND\_ROOTを送信する(1:findRoot())
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
151 \item rootが受信し、FIND\_ROOT\_REPLYを送信する(2:findRootReplay())
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
152 \item node側でどのrootに接続するか選択するパネルが表示される
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
153 \item nodeはパネルでrootを選択し、接続先を要求するWHERE\_TO\_CONNECTを送信する(3:whereToConnect())
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
154 \item 受信したrootはnodeの接続先をCONNECT\_TOで送信する(4:connectTo)
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
155 \item nodeはrootの指定した接続先に接続する
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
156 \item root・node間の接続が確立後、rootからnodeに対して定期的に画像データFRAME\_BUFFER\_UPDATEを送信する(4:framebufferUpdate())
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
157 \end{itemize}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
158 \end{minipage}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
159
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
160 \end{tabular}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
161 \end{center}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
162 \end{figure}
3
oc
parents: 1
diff changeset
163
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
164
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
165
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
166 \section{配信画面切り替え}
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
167 ゼミ等では参加者が順々に発表を行う度に、画面の切り替えが必要となる。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
168 ゼミを円滑に進めるために、この画面の切り替えをスムーズに行う必要がある。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
169
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
170 プロジェクタを使用する場合、ケーブルの抜き差しを行わないとならない。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
171 その際に、ディスプレイの解像度の設定をし直す、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
172 接続不良が起こる等の煩わしい問題が生じることがある。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
173
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
174 従来のVNCを使用する場合、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
175 画面の切り替えの度に一旦VNCを終了し、発表者のVNCServerへと再接続を行う必要がある。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
176
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
177 TreeVNC は、これらの配信者の切り替えの度に生じる問題を解決している。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
178 TreeVNC を立ち上げることで、ケーブルを使用せずに手元のPCに発表者の画面を表示させることができる。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
179 画面の切り替えは、ユーザがVNCSeverへの再接続を行うことなく、切り替えた発表者の画面を取得することができる。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
180
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
181 \newpage
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
182
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
183 TreeVNC の root は配信者の VNCServer と通信を行っており、
3
oc
parents: 1
diff changeset
184 VNCServer から画面データを受信し、そのデータを node へと送信している。
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
185 画面切り替え用の share button が押されると、
3
oc
parents: 1
diff changeset
186 root は share button を押したクライアントの VNCServer と新しく通信をし直す。
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
187 これにより、配信者切り替えのために VNC を終了し、再接続する必要がなくなる。
3
oc
parents: 1
diff changeset
188
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
189 しかし、配信者が変わることで起きる画面サイズの違いや、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
190 マルチディスプレイ全体を表示してしまうことがあるので、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
191 それを解決する必要がある。
3
oc
parents: 1
diff changeset
192
oc
parents: 1
diff changeset
193
oc
parents: 1
diff changeset
194 \section{MulticastQueue}
oc
parents: 1
diff changeset
195 配信側の画面が更新されると、 VNCServer から画像データが framebufferUpdate として送られてくる。
oc
parents: 1
diff changeset
196 TreeVNC は、画像の更新を複数の node に同時に伝えるため、
oc
parents: 1
diff changeset
197 MulticastQueue という Queue に画像データを格納する。
oc
parents: 1
diff changeset
198
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
199 各 node は MulticastQueue からデータを取得するスレッドを持つ。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
200 node それぞれがデータを取得するため、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
201 MulticastQueue は複数のスレッドから使用される。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
202
3
oc
parents: 1
diff changeset
203 MulticastQueue は、CountDownLatch を用いている。
oc
parents: 1
diff changeset
204 java.util.concurrent.CountDownLatch とは、
oc
parents: 1
diff changeset
205 java の並列用に用意された API で、他のスレッドで実行中の操作が完了するまで、
oc
parents: 1
diff changeset
206 複数のスレッドを待機させることのできるクラスである。
oc
parents: 1
diff changeset
207 スレッドを解放するカウントを設定することができ、
oc
parents: 1
diff changeset
208 カウントが 0 になるまで await メソッドでスレッドをブロックすることができる。
oc
parents: 1
diff changeset
209
oc
parents: 1
diff changeset
210 TreeVNC では、それぞれの画像データにカウントが追加され、
oc
parents: 1
diff changeset
211 カウントが 0 になると、その画像データは消される。
oc
parents: 1
diff changeset
212 親 node が接続されている子 node の数だけカウントを設定する。
oc
parents: 1
diff changeset
213 子 node が画像データを pull すると、そのカウントが減る。
oc
parents: 1
diff changeset
214 全ての子 node が画像データを pull するとカウントが 0 になり、画像データが消される。
oc
parents: 1
diff changeset
215
8
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
216 node が MulticastQueue からデータを取得せずに、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
217 Queue にデータが溜まり続け、メモリのオーバーフローが起こる場合がある。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
218 この問題を避けるために、Timeout用のスレッドを用意している。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
219 ある一定時間データが取得されなければ、Timeout を検知し、
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
220 取得されなかったデータが全てpollされるという仕組みである。
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
221
42b6994eac80 update chapter2
oc
parents: 3
diff changeset
222
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
223
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
224
3
oc
parents: 1
diff changeset
225
oc
parents: 1
diff changeset
226
1
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
227
dc17ac172c7d add thesis in production.
oc
parents:
diff changeset
228
3
oc
parents: 1
diff changeset
229 %\section{オプション一覧}
oc
parents: 1
diff changeset
230 %${\mathchar`-}$${\mathchar`-}$
oc
parents: 1
diff changeset
231 %
oc
parents: 1
diff changeset
232 %\begin{table*}[htb]
oc
parents: 1
diff changeset
233 %\begin{center}
oc
parents: 1
diff changeset
234 % \begin{tabular}{|l|l|} \hline
oc
parents: 1
diff changeset
235 % オプション & 説明 \\ \hline \hline
oc
parents: 1
diff changeset
236 % -p & a\\ \hline
oc
parents: 1
diff changeset
237 % -d & a\\ \hline
oc
parents: 1
diff changeset
238 % ${\mathchar`-}$${\mathchar`-}$cui & a\\ \hline
oc
parents: 1
diff changeset
239 % -v & a\\ \hline
oc
parents: 1
diff changeset
240 % -version & a\\ \hline
oc
parents: 1
diff changeset
241 % -ns & a\\ \hline
oc
parents: 1
diff changeset
242 % ${\mathchar`-}$${\mathchar`-}$fixSize & a\\ \hline
oc
parents: 1
diff changeset
243 % ${\mathchar`-}$${\mathchar`-}$filterSingleDisplay & a\\ \hline
oc
parents: 1
diff changeset
244 % ${\mathchar`-}$${\mathchar`-}$width & a\\ \hline
oc
parents: 1
diff changeset
245 % ${\mathchar`-}$${\mathchar`-}$height & a\\ \hline
oc
parents: 1
diff changeset
246 % ${\mathchar`-}$${\mathchar`-}$host & a\\ \hline
oc
parents: 1
diff changeset
247 % ${\mathchar`-}$${\mathchar`-}$showTree & a\\ \hline
oc
parents: 1
diff changeset
248 % ${\mathchar`-}$${\mathchar`-}$checkDelay & a\\ \hline
oc
parents: 1
diff changeset
249 % ${\mathchar`-}$${\mathchar`-}$addSerialNum & a\\ \hline
oc
parents: 1
diff changeset
250 % ${\mathchar`-}$${\mathchar`-}$logFile & a\\ \hline
oc
parents: 1
diff changeset
251 % \end{tabular}
oc
parents: 1
diff changeset
252 % \caption{オプション一覧}
oc
parents: 1
diff changeset
253 % \label{tb:option}
oc
parents: 1
diff changeset
254 %\end{center}
oc
parents: 1
diff changeset
255 %\end{table*}