annotate presen/prosym.md @ 29:ce0aff4548a1

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Thu, 07 Jan 2016 10:47:34 +0900
parents c9641abe2163
children 57b34ffe2971
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 title: 有線 LAN 上のPC画面配信システムTreeVNCの改良
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 author: Tatsuki IHA
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 profile:
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 lang: Japanese
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 code-engine: coderay
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 # 画面共有を利用したコミュニケーション
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 授業やゼミ等で、それぞれが PC 端末を持っている場合では、PC の機能を活かした コミュニケーションが可能である。教員が操作する画面をそのまま学生に配信したり, ゼミ などで、発表する学生の画面を切り替えたりすることを可能にしたい。画面配信システム TreeVNC は参加したクライアントをバイナリツリー状に接続し、配信コストを分散させる 仕組みを取っている。そのため, 多人数が参加しても処理性能が下がらない。また、ツリー のルートが参照している VNC サーバーを変更することで、ケーブルの差し替えなしに画面 の切替が可能となる。
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
29
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
10
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
11 # 問題点
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
12 しかし、 TreeVNC を実際に使用していく中で様々な問題が発生した。
29
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
13 本研究では TreeVNC の改良として、複数のネットワークへの対応、 WAN への対応、 マルチディスプレイへの対応を行うとともに、TreeVNC 有用性を示すために画像データの遅延時間計測を行った。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
14
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
15 # 問題:複数のネットワーク
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
16 - 琉球大学では無線と有線が別々のネットワークになっている
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
17 - TreeVNCは単一のネットワークにしか対応できず、両方のネットワークにつながっている端末でも1つのネットワークでしか使用できなかった
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
18
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
19 # 問題:マルチディスプレイ
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
20 - ゼミ等で発表者毎に画面切り替えを行う際、デュアルディスプレイを使っている人がいた
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
21 - その際 VNC サーバーからはすべての画面データが送信されており、発表とは関係ない画面も配信されていた
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
22
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
23 # 問題:WANへの対応
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
24 - 講義等を大学外の遠隔地から受けたい場合がある
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
25 - TreeVNC は NAT を超えた接続が行うことができない
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
26
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
27 # この発表は
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
28 - TreeVNC の概要
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
29 - 今回の改良
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
30 - TreeVNC の評価
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
31
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 # TreeVNC
29
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
33 - TreeVNC は本研究室で開発している VNC を利用した画面配信システム
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 - 参加したクライアントをバイナリツリー状で接続することで配信コストを分散させる
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 - スムーズな画面の切替を行う
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 # VNC
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 - VNC(Virtual Network Computing) は RFBプロトコルを用いて遠隔操作を行うソフトウェア
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 - サーバー側とクライアント側に分かれており、サーバーを起動し、クライアントがサーバーに接続を行うことで遠隔操作を可能とする
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 # RFB プロトコル
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 - RFB(Remote Frame Buffer)プロトコルは VNC で用いられているプロトコル
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 - 自身の画面をネットワーク越しに他者の画面に表示する
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 - RFB サーバと RFB クライアントに分かれている
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 - Framebuffer と呼ばれるメモリ上に置かれた画像データを使用して画面表示を行う
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 - RFB サーバーは Framebuffer が更新されるたびにRFB クライアントに対して Framebuffer の変更部分だけを送信する。
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 # 多人数でVNCを使用する際の問題点
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 - 多人数のクライアントが1つのサーバーに接続する構造である
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 - そのため、サーバー側の処理性能が落ちてしまう
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 - ゼミ等の発表で画面配信者が切り替わる場合配信者が変わるたびにアプリケーションを終了し、再接続を行う必要がある。
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 # TreeVNC の構造
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 - Java で作成されたTightVNC(Tight Virtual Network Computing) を元に作成されている
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 - クライアント同士をバイナリツリー状に接続する
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 - バイナリツリーのルートのノードをRoot Nodeと呼び、 Root Node に接続されるノードを Node と呼ぶ
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 - Node は 親 Node から送られたデータを自分の子 Node に流す機能、 逆に子 Node から送られてきたデータを親 Nodeに流す機能がある
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
58 <img src="./images/TreeVNC.svg" alt="message" width="400">
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
60 # Root Node
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
61 - Root Node は 子 Nodeにデータを流す機能に加え
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
62 - 各 Node の管理
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
63 - VNC サーバーから送信されたFramebuffer の管理を行う
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
64
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
65 # TreeVNCの通信量
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
66 - ポート一本あたりの負荷
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
67 - 従来のVNC : Node数 * データ量
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
68 - TreeVNC : (2(子供の数) + 1) * データ量
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
69 - 従来のVNCはNode数に比例
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
70 - TreeVNCは子供の数に関係するためNode数に関係なく一定
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
71
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
72 # TreeVNC の圧縮形式
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
73 - TreeVNC は ZRLEE というエンコードでデータのやり取りを行う
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
74 - ZRLEE は ZRLE を元に生成される
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
75
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
76 # ZRLE
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
77 - RFB プロトコルで使えるエンコーディングタイプの1つ
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
78 - Zlib で圧縮されたデータとそのデータのバイト数がヘッダーとして付け加えられる
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
79 - java.util.zip.deflater で圧縮, java.util.zip.inflater で解凍が行える
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
80
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
81 # java.util.zip.deflater の問題点
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
82 - java.util.zip.deflater は必要な辞書を書き出す事ができない
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
83 - そのためZlibで圧縮されたデータを途中から受け取ってもデータを正しく解凍できない
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
84
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
85 <img src="./images/ZRLE.svg" alt="message" width="800">
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
86
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
87 # ZRLEE
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
88 - ZRLEE はZRLE を一度 Root Node で解凍して再圧縮を行う
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
89 - 再圧縮の際にfinish()を入れることで初めからデータを呼んでいなくても解凍を行える
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
90 - 一度 ZRLEE に変換すれば子 Node はそのデータをそのまま流すだけで良い
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
91
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
92 <img src="./images/ZRLEE.svg" alt="message" width="400">
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
93
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
94 # TreeVNC の通信経路
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
95 - ある Node から Root Node に直接通信を行う send direct message (Node to Root)
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
96 - Root Node からある Node に直接通信を行う send direct message (Root to Node)
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
97 - Root Node から木の末端の Node までのすべての Node に通信を行う messeage down tree (Root to Node)
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
98 - ある Node から木構造を上に辿って Root Node まで通信を行う message up tree (Node to Root)
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
99 - Root Node から配信者の VNC サーバーへ の通信を行う send message (Root to VNC- Server)
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
100 - VNC サーバーから Root Node への通信を行う send message (VNCServer to Root)
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
102 # TreeVNC に参加するまでのメッセージ通信の流れ
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
103 <table>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
104 <tbody>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
105 <tr>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
106 <td><img src="./images/message.svg" alt="message" width="300"/></td>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
107 <td> 
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
108 <ul>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
109 <li>接続を行う Node(以下 Client Node) は Multicast 通信で Root Node に対して FIND_ROOT を送信する(1:findRoot())</li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
110 <li>Root Node が FIND_ROOT を受信すると接続を行う Node に FIND_ROOT_REPLY を送信する (2:findRootReplay)</li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
111 <li>Client Node 側で、どの Root Node に接続するかを選択するパネルが表示される</li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
112 <li>Client Node はパネルで接続する Root Node を選択し、Root に対して接続先を要求 する WHERE_TO_CONNECT を送信する (3:whereToConnect())</li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
113 <li>受信した Root Node は Client Node の接続先を CONNECT_TO で送信する (4:connectTo)</li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
114 <li>Client Node は Root の指定した接続先に接続しに行く</li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
115 <li>Root Node, Client Node 間の接続が確立後 Root Node から Clinet Node に対して定期的に画像データ FRAME_BUFFER_UPDATE を送信する (5:framebufferUpdate())
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
116 </li>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
117 </ul>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
118 </td>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
119 </tr>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
120 </tbody>
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
121 </table>
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
122
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
123 # 切断時の木の再構成
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
124 - TreeVNC はバイナリーツリーという特性上 Node の切断を検知できずにいると、Node 同士で構成された木構造が崩れてしまい、 木構造が崩れた状態で新しい Node が接続に来た場合に適切な場所に Node を接続することができない
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
125 - 木構造のネットワークトポロジーは Root Node が持っている nodeList というリストで管理している
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
126 - Nodeの接続が切れた場合、木の再構成を行うため nodeListを更新する必要がある
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
127
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
128 # 切断時の木の再構成
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
129 - TreeVNC は Node 切断の検知を LOST\_CHILD というメッセージ通信で行っている
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
130 - LOST\_CHILD の検出方法は MulticastQueue という画像データを蓄積するキューを利用して行う
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
131 - 子 Node は 親 の MulticastQueue から画像データを取得し、画面を描画する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
132 - 一定時間 MulticastQueue から画像データが取得されない場合 Memory Over Flow を回避するためにTimeout スレッドが用意されている
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
133 - Timeout を検知した際、子 Node との接続が切れたと判断し、木を再構成する
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
134
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
135 # LOST_CHILDの例
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
136 - 子 Node の切断を検知した Node が Root Node へ LOST\_CHILD メッセージを送信する (1:lostChild())
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
137 - LOST\_CHILD メッセージを受け取った Root Node は nodeList の更新を行う (2:updateNodeList())
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
138 - 切断した Node を nodeList から消し、 nodeList の最後尾の Node に切断した node number を割り当てる
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
139 - Root Node は最後尾の Node に、切断した子 Node が接続していた親 Node に接続する様 に CONNECT\_TO メッセージを送信する (3:connectTo(1))
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
140 - 最後尾の Node が子 Node を失った親 Node へ 接続しに行く (4:connectToParent(1))
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
141 <img src="./images/lostChild1.svg" alt="message" width="800">
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
142
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 # 共有画面切り替え
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
144 - TreeVNC の Root Node は配信者の VNC サーバーと通信を行っている
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
145 - 画面を配信されている側のビューワにある Share Screen ボタンが押されると木をたどり、 Root Node に SERVER\_CHANGE\_REQUEST メッセージを送信する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
146 - Root Node は Share Screen ボタンを押したクライアントの VNC サーバーと通信を始める。
24
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 23
diff changeset
147 - そのため TreeVNC は配信者切り替えの度にVNCを終了し、再接続する必要がない。
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 # QUALITY モードと SPEED モード
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
150 - 高解像度のデータの描画処理はPCのスペックによって重くなる場合がある
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
151 - 画像描画処理には
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
152 - 高画質優先の QUALITY モード
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
153 - 描画速度優先の SPEED モード
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
154 - 今まで QUALITY モード を使用していた(変更不可)
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
155 - 今回ビューワからユーザーがどちらのモードを使用するかを変更できるようにした
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
156 - これにより描画処理の遅延が解決できると思われる
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 # マルチディスプレイ
25
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
159 - VNC サーバーからはすべての画面データが送信されてしまっていた
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
160 - 共有したいディスプレイを選択して共有するのが望ましい
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
161 - 画面切り替えの際のSERVER\_CHANGE\_REQUESTに共有するディスプレイの座標を付加する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
162 - Root Node は 接続した VNC サーバーから画像データを要求する FRAME\_BUFFER\_UPDATE\_REQUEST メッセージに受け取った座標を付加する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
163 - VNC サーバーは要求された座標内の画像データを FRAME\_BUFFER\_UPDATE メッセージで Root Node に送信する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 24
diff changeset
164 <img src="./images/shareScreenToMultiDisplay.svg" alt="message" width="800">
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166 # 複数ネットワークの対応
26
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
167 - 従来の TreeVNC はクライアントの接続する木構造が単一であった
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
168 - Root Node が複数のネットワークに接続していても単一のネットワークでしか使用することができない
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
169 - Root Node が接続しているネットワークごとに木構造を形成する
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
170 - Root Node は TreeManager というオブジェクトで接続部分を管理している(nodeListもそこで生成される)
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
171 - TreeManager を保持しているネットワーク毎に生成する
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
172 - 新しい Node が接続してきた際、 interfaces から Node のネットワークと一致する TreeManager を取得し、 接続の処理を任せる
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
173 <img src="./images/MultiNetworkTree.svg" alt="message" width="800">
22
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174
fe9d38d95c31 Add presen
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 # WANへの対応
27
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
176 - NATを超えたネットワークからの接続は直接配信側の Root Node に 接続を行うことで実現する
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
177 - この接続を Direct Connection と呼ぶ
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
178 - Direct Connection した Node はそのネットワークの Root Node になり、そのネットワークの他の Node は Root Node に接続を行い木構造を作る
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
179 - 配信側の Root Node は Direct Connection で接続された Root Node に対して 画像データ (Framebuffer) を送信する
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
180 - 画像データを受け取った Root Node は 接続されている子 Node に対して画像データを送信する
26
e982f42632ba Update Multi network tree
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 25
diff changeset
181 <img src="./images/directConnection.svg" alt="message" width="800">
23
03f1b9c4d84e Add slides
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
182
03f1b9c4d84e Add slides
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
183 # TreeVNCの評価
27
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
184 - 木の深さによる画像データの遅延を調べる
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
185 - 実験環境
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
186 - 実際に講義を受講している学生が TreeVNC を使用
7fe5493d2ffb Update WAN section
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 26
diff changeset
187 - 約20名の接続
23
03f1b9c4d84e Add slides
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 22
diff changeset
188
28
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
189 # 使用するメッセージ
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
190 - 計測用のメッセージとして CHECK\_DELAY , CHECK\_DELAY\_REPLY を追加
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
191 - CHECK\_DELAY は 送信時間と画像データ
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
192 - Root Node から 末端の Node に伝達する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
193 - CHECK\_DELAY_REPLY は画像サイズとCHECK\_DELAY で受け取った送信時間
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
194 - 各 Node から Root Node まで伝達する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
195
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
196 # 実測方法
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
197 - まず Root Node は CHECK\_DELAY を 末端 Node まで各 Node を伝いながら伝達する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
198 - CHECK\_DELAY を受け取った各 Node は CHECK\_DELAY\_REPLY を送信する
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
199 - CHECK\_DELAY\_REPLY を受け取った Root Node は CHECK\_DELAY の送信にどれだけ時間がかかったかの計算を行う
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
200
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
201 ```java
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
202 // 遅延時間の計算
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
203 Long delay = System.currentTimeMillis() - time;
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
204 ```
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
205
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
206 # 結果
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
207 <img src="./images/depth1.svg" alt="message" width="800">
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
208 <img src="./images/depth2.svg" alt="message" width="800">
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
209 <img src="./images/depth3.svg" alt="message" width="800">
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
210 <img src="./images/depth4.svg" alt="message" width="800">
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
211
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
212 - 画像データの伝達はほぼ1秒以内に収まっているが、容量が小さい場合でも時間がかかる場合がある。 それはその送信の前に大容量の画像を送信した後の回線の Delay が残っているためだと考えられる
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
213 - 深さ 3 で極端に遅い場合がある。 遅い原因として1つの Node がボトルネックになっている事が判明した。
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
214 - ネックになった Node をそのままにするとその子Nodeに影響を及ぼしてしまう。 そのためその Node に何らかの対応を行う必要がある
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 27
diff changeset
215
29
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
216 # まとめと課題
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
217 - 今回TreeVNCの様々な問題点の解決を行った
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
218 - 実験を行うことにより、さらなる問題点が判明した
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
219
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
220 - 実測で判明したネックになっているNodeへの対処
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
221 - WAN での 画面切り替え
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 28
diff changeset
222 - 追加した機能の評価方法を思考し、評価を行う