# HG changeset patch # User Yu Taninari # Date 1317044770 -32400 # Node ID 72872a363e4250b48f625a10e6841e12c8f6563b # Parent ca7ae1dc95cc1dfe0eca52cd9228014481631080 update html diff -r ca7ae1dc95cc -r 72872a363e42 jssst.html --- a/jssst.html Mon Sep 26 15:49:45 2011 +0900 +++ b/jssst.html Mon Sep 26 22:46:10 2011 +0900 @@ -16,7 +16,7 @@ .taninaritop { margin: auto; width: 95%; - font-weight: bold; +// font-weight: bold; } 2011/9/27 @@ -84,16 +84,15 @@

目的と背景

-
  • 大学の講義中、スクリーンに映されている画面は後ろの席程見えずらい。
  • +
  • 大学の講義中、スクリーンに映されている画面は後ろの席ほど見えづらい。
  • その問題を手元のPCにも写せるようにすることで解決しようと考えた。
  • -
  • 60人以上での画面共有を行うシステムを目標とする。
  • +
  • 60人以上で画面共有を行うシステムを目標とする。
  • VNCによる画面共有

    -
  • 今回、VNCを用いて画面共有システムを作成する。
  • VNC: Virtual Network Computing
    ネットワークを介してコンピュータを遠隔操作するプログラム
  • -
  • VNC用いた授業用画面共有システムTreeVNCの設計と実装を行った。
  • +
  • VNC用いた授業用画面共有システムTreeVNCの設計と実装を行った。
  • @@ -139,171 +138,10 @@ 100% -
  • VNCに使われるCPUの使用率が100%になり、スループットが5分の1まで下がっている。
  • +
  • 48台繋げる事によって、VNCに使われるCPUの使用率が100%になり、スループットが5分の1まで下がっている。
  • - -
    -

    通常のVNCの問題点

    -
  • サーバへのCPU負荷が高い
  • -
  • 1本の通信網への負荷が高い
  • -
    - - - -
    -

    TreeVNCの設計

    - - - - - -
    -
  • 木構造での接続
  • -
  • クライアントの管理を行うTop Proxyを置く。
  • -
  • データは木の下へと流していくようにする。
  • -
    - -

    - -

    -
    -
    - -
    -
    -

    木の構成手順

    - - - - - -
    -
    -
    - -  2分木の場合の木の構成について説明する。
    - クライアントは一旦Top Proxyに接続して、自分の接続先をProxyから取得する。
    -
    -
    -
    - - -
    -
    -

    木の構成手順

    - - - - - -
    -
    -
    - - 親を決定する方法はTop Proxyで
    - - parentNumber = (myNumber - 1) / treeBranch
    -
    - を計算してクライアントにどの親に接続すればよいかを知らせる。 -
    -
    -
    - - -
    -
    -

    木の構成手順

    - - - - - -
    -
    -
    - - 親を決定する方法はTop Proxyで
    - - parentNumber = (myNumber - 1) / treeBranch
    -
    - を計算してクライアントにどの親に接続すればよいかを知らせる。 -
    -
    -
    - - -
    -
    -

    木の構成手順

    - - - - - -
    -
    -
    - - 親を決定する方法はTop Proxyで
    - - parentNumber = (myNumber - 1) / treeBranch
    -
    - を計算してクライアントにどの親に接続すればよいかを知らせる。 -
    -
    -
    - - -
    -
    -

    木の再構成手順

    - - - - - -
    -
    -
    - - クライアント1が落ちたときの説明
    - クライアント1が落ちたとき子供のリーダー(クライアント3)がTop Proxyに親が落ちたことを報告する。
    - Top Proxyからラストノードに対して、落ちたノードの代わりをするように命令が行く。
    -
    - -
    -
    -
    - - -
    -
    -

    木の再構成手順

    - - - - - -
    -
    -
    - - 命令を受けたラストノードが落ちたノードの代わりとなる。
    - 子供たちが新しい親に対して接続を行う。 -
    -
    -
    -
    @@ -327,6 +165,7 @@
  • 通信網1本に対する負荷が減り、安定した通信ができる(有線)。
  • +

    TreeVNCの設計

    @@ -361,9 +200,410 @@
    + +
    +

    通常のVNCの問題点

    +
  • サーバへのCPU負荷が高い
  • +
  • 1本の通信網への負荷が高い
  • +
    + + + + +
    +

    今回の主な内容

    + +
    + + +
    +

    TreeVNCの設計

    + + + + + +
    +
  • 木構造での接続
  • +
  • クライアントの管理を行うTop Proxyを置く。
  • +
  • データは木の上から下へと流していくようにする。
  • +
    + +

    + +

    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + requestHostName(); + +
    + プロキシに対してホストのアドレスを要求する関数。 +
    +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + transferParentAddress(); + +
    + クライアントに接続先を教える関数。 +
    +
    + 実際にクライアントにおくっているデータは +
    + parentAddress +
    + parentNum +
    + treeNum +   
    + leaderFlag +
    + の4つである。 +
    + リーダーは子供の中で一番若い番号の人がなる。 +
    + リーダーフラグは木の再構成の際に使用する。 +
    +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + connectAndAuthenticate(); + +
    + プロキシから受け取ったデータをもとに接続を開始する関数。 +
    +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + 新しいクライアントが来るたびに今まで説明した3つの関数を呼び出す。 + +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    +

    木の構成手順

    + + + + + +
    +
    +
    + + ここで接続先がクライアント1になっているがこれはプロキシ側で +
    + + 親の番号 = (自分の番号 - 1) / 親に対する子どもの数 + +
    + を計算してどの親に接続させれば良いかを決めてクライアントに報告している。 +
    + このように番号で木を管理している。 +
    +
    +
    +
    + + +
    +
    +

    木の再構成手順

    + + + + + +
    +
    +
    + + クライアント1が落ちた時の再接続の処理についての説明。 + +
    +
    +
    + + +
    +
    +

    木の再構成手順

    + + + + + +
    +
    +
    + + + lostHost(); + +
    + 木を構成する際にリーダを決めたが、そのリーダだけが呼び出す関数。 +
    + プロキシに対し落ちた親(クライアント1)の情報を報告する。 +
    +
    +
    +
    + + +
    +
    +

    木の再構成手順

    + + + + + +
    +
    +
    + + + reportLastNode(); + +
    + ラストノードに対し落ちたクライアントの代わりをするように命令を出す。 +
    +
    +
    +
    + + +
    +
    +

    木の再構成手順

    + + + + + +
    +
    +
    + + + connectAndAuthenticate(); + +
    + プロキシから受け取ったデータをもとに接続を開始する関数。 +
    + この時クライアント6がクライアント1に変わる。 + +
    +
    +
    +
    + + +
    +
    +

    木の再構成手順

    + + + + + +
    +
    +
    + + + transferParentAddress(); + +
    + 落ちた親の子供たちに対し新しい親のアドレスを報告する関数。 +
    +
    +
    +
    + + +
    +
    +

    木の再構成手順

    + + + + + +
    +
    +
    + + + connectAndAuthenticate(); + +
    + プロキシから受け取ったデータをもとに接続を開始する関数。 + +
    +
    +
    +
    - + +
    +

    RFB protocol

    +
  • Remote Frame Buffer Protocol :
    GUI操作によるリモートアクセス用の通信プロトコル。VNCで用いられている。
  • +
  • 1~5まではinitial seaquenceとなる。
  • +
  • 6以降は繰り返し行われる処理。画面のデータが転送されてくる。
  • +
    @@ -394,16 +634,47 @@  

    -
  • MulticastQueueクラスを用いた並列な転送を行った。
  • +
  • MulticastQueueクラスを用いた並列な転送を行った。
  •     + + + +
    +

    MulticastQueue

    +
  • MulticastQueue:データを順序よく読み込ませるクラス
  • + + + + + + + + + + +
    + + + +
    + 次のデータがなければwaitする + + データがputされ次第読み込みを再開する +
    +

    + MulticastQueueは、java.util.CountDownnLatchにより実装されている。 +

    +
    +
    @@ -464,9 +735,9 @@

    エンコード

    -
  • MAC OS XではZRLEを使ってVNCを行うことができる
  • +
  • Mac OS XではZRLEを使ってVNCを行うことができる
  • ZRLEはデータ量がRAWデータの約4分の1ですむ。
  • -
  • TreeVNCではVNCサーバとの接続はこのZRLEを扱う。
  • +
  • TreeVNCではVNCサーバとの接続はこのZRLEを扱う。
  • @@ -495,9 +766,27 @@ -
  • Zlibデータは辞書を元にデータの解凍を行う
  • -
  • 辞書がなければデータを正しく解凍できない
  • +
  • Zlibデータは辞書を元にデータの解凍を行う
  • +
  • 辞書がなければデータを正しく解凍できない
  • + +
    +

    ZRLEの問題

    +
  • 辞書はZlibデータの最初に送られてくる。
  • +
  • もしも、ZRLEのデータを最初から送っているのなら、辞書も送ることができる。
  • +
  • データの途中から送ると辞書は送られず、正しく解凍を行うことができない。
  • + + + + + +
    + + + +
    +
    +

    ZRLEE

    @@ -615,13 +904,13 @@
  • VNC Reflector
    • tightVNCの作者が作成したプログラム
    • -
    • VNC Reflecotrにクライアントが接続することでVNCを行うことができる
    • +
    • VNC Reflector(Proxy)にクライアントが接続することでVNCを行うことができる
    -

    質問タイム

    +

    質問

    diff -r ca7ae1dc95cc -r 72872a363e42 pix/reconnect1.png Binary file pix/reconnect1.png has changed diff -r ca7ae1dc95cc -r 72872a363e42 pix/reconnect2.png Binary file pix/reconnect2.png has changed diff -r ca7ae1dc95cc -r 72872a363e42 pix/reconnect3.png Binary file pix/reconnect3.png has changed