view report.tex @ 5:3275b58829c7

update
author oc
date Wed, 29 Oct 2014 18:17:25 +0900
parents f8cb6edde76f
children
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvips]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{lscape}
%\usepackage{multicol}
%\pagestyle{fancy}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}} 琉球大学主催 工学部情報工学科 中間発表予稿}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\begin{document}
\title{授業やゼミ向けの画面配信システムTreeVNCの機能拡張}
\author{115747H 大城美和 {}{} 指導教員 : 河野真治}
\date{}
\maketitle
\thispagestyle{fancy} 


\section{はじめに}

本研究室では、TreeVNCという画面配信システムを開発している。
ゼミや講義の質を高め、快適にプレゼンテーションを聴講でき、
参加者同士が充分なコミュニケーションを取れることを目的としている。
% どこまでできてて今回の研究でなにをするか

% TreeVNCの負荷分散の話
TreeVNCは、接続しに来たクライアントをバイナリツリー状に接続する。
バイナリツリーなら、各nodeに最大2台分のクライアントしか接続されない。
$N$台のクライアントが接続しに来た場合、
画面配信の画像データをコピーする回数は、
従来のVNCでは$N$回、TreeVNCでは$log N * 2$回となる。
TreeVNCは、rootへの負荷を各nodeに分散することにより、
処理性能が向上している。

% 画面共有ボタンの話
ゼミで画面配信を行う場合、発表者が頻繁に入れ替わる。
プロジェクタを使用している場合、
入れ替えの度にケーブルを挿し直す必要がある。
TreeVNCには、画面配信ボタンが付いており、
発表者はそれを押すことによって、画面を切り替えをスムーズに行える。

既に、クライアントがツリー状に接続する設計や画面切り替え等の、
基本機能はできていた。

しかし、画面切り替えのプロトコルに不備があり、
リファクタリングをすると共に、port番号の割り当てや、
その他のプロトコルの見直しを行ってきた。
今研究では、更にTreeVNCに新しい機能を実装していく。



\begin{figure}[htpb]
  \begin{center}
    \includegraphics[width=70mm]{pic/TreeVNC.eps}
  \end{center}
  \label{fig:treeVNC}
  \caption{TreeVNCの図}
\end{figure}

\section{VNC}
VNC(Virtual Network Computing)は、
RFBプロトコルを使用し遠隔操作を行うリモートデスクトップソフトである。
VNCはサーバ側とクライアント(ビューア)側に分かれていて、
サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能にする。


\section{TreeVNC}
TreeVNCは、TightVNCのjava版のビューアを元に
作成された画面配信システムである。
接続しにきたクライアントは図\ref{fig:treeVNC}の様に、
ツリー状に構成される。



\section{動的なport番号の指定}
TreeVNCは複雑な分散アルゴリズムを用いたシステムであり、
デバッグを行う環境を整える必要がある。

従来のTreeVNCでは、固定長portを複数利用していた。
port番号は一意なので、1台で複数のTreeVNCを立ち上げることができない。

動的にport番号を割り当てることで、
1つのnodeに対して複数のTreeVNCを起動することを可能にした。
最低限のソケットポートを開けることによって、
メモリの使用量を抑えることにも繋がる。

%  messageの説明にportにどんな関係があるのかあとから
以前は固定長portを使用しmessageの通信を行っていたが、
一意なportを割り当てられているnodeが通信を行うことによって、
どのport番号が使用されているかを意識する必要がなくなった。
通信しているmessageの一覧を表1に示す。

%\begin{description}
%    \setlength{\parskip}{0cm} % 段落間
%  \setlength{\itemsep}{0cm} % 項目間
%  \item[CONNECT\_TO\_AS\_LEADER、CONNECT\_TO]\mbox{}\\
%    node間の接続を行うmessage
%  \item[WHERE\_TO\_CONNECT]\mbox{}\\
%    どのnodeと接続するかを知らせるmessage
%  \item[LOST\_PARENT]\mbox{}\\
%    親nodeとの接続が切れてしまった場合のmessage
%  \item[NEW\_NODE]\mbox{}\\
%    新しいnodeが接続した場合のmessage
%  \item[SERVER\_CHANGE\_REQUEST]\mbox{}\\
%    クライアントが画面共有ボタンを押した際のmessage
%  \item[CHECK\_DELAY\_REPLY]\mbox{}\\
%    rootとnode間の通信における遅延を計測するためのmessage
%\end{description}

messageの通信経路一覧は以下である。
\begin{description}
    \setlength{\parskip}{0cm} % 段落間
  \setlength{\itemsep}{0cm} % 項目間
  \item[send direct message]\mbox{}\\
    直接メッセージを送信する
  \item[message down tree]\mbox{}\\
    ツリー状に下りながらメッセージを送信する
  \item[message up tree]\mbox{}\\
    ツリー状に上りながらメッセージを送信する
  \item[send message]\mbox{}\\
    メッセージを送信する
\end{description}


\begin{table*}[htb]
  \small
  \begin{tabular}{|l|l|l|} \hline
    通信経路            & message                    & 説明 \\ \hline \hline
                        & FIND\_ROOT                 & 子node接続時にrootを探す。 \\ \cline{2-3}
    send direct message & WHERE\_TO\_CONNECT         & どのnodeに接続すれば良いかを聞く。 \\ \cline{2-3}
    (child to root)     & LOST\_PARENT               & 親nodeの接続が切れた時にrootに知らせる。 \\ \hline

                        & FIND\_ROOT\_REPLY          & FIND\_ROOTへの返信。 \\ \cline{2-3}
    send direct message & CONNECT\_TO                & nodeとnodeの接続をする。 \\ \cline{2-3}
    (root to child)     & CONNECT\_TO\_AS\_LEADER    & 左子nodeとして、nodeとnodeの接続をする。 \\ \hline

    message down tree   & FRAMEBUFFER\_UPDATE        & TreeVNC用に圧縮されている、画面の差分の画像データ。\\ \cline{2-3}
    (root to child)     & CHECK\_DELAY               & 通信の遅延を測定するmessage。 \\ \hline

    message up tree     & CHECK\_DELAY\_REPLY        & CHECK\_DELAYへの返信。 \\ \cline{2-3}
    (child to root)     & SERVER\_CHANGE\_REQUEST    & 画面切り替えのリクエスト。 \\ \hline

                        & FRAMEBUFFER\_UPDATE\_REPLY & FRAMEBUFFER\_UPDATEのリクエスト。 \\ \cline{2-3}
    send message        & SET\_PIXEL\_FORMAT         & pixel値の設定。 \\ \cline{2-3}
    (root to VNCServer) & SET\_ENCODINGS             & pixelデータのencodeTypeの設定。 \\ \cline{2-3}
                        & KEY\_EVENT                 & キーボードからのイベント。 \\ \cline{2-3}
                        & POINTER\_EVENT             & ポインタからのイベント。 \\ \cline{2-3}
                        & CLIENT\_CUT\_TEXT          & テキストのカットバッファを持った際のmessage。 \\ \hline

                        & FRAMEBUFFER\_UPDATE        & 画面の差分の画像データ。 \\ \cline{2-3}
    send message        & SET\_COLOR\_MAP\_ENTRIES   & 指定されているpixel値にマップするRGB値。 \\ \cline{2-3}
    (VNCServer to root) & BELL                       & ビープ音を鳴らす。 \\ \cline{2-3}
                        & SERVER\_CUT\_TEXT          & サーバがテキストのカットバッファを持った際のmessage。 \\ \hline

  \end{tabular}
  \label{tb:message}
  \caption{通信経路とmessage一覧}
\end{table*}




\section{Treeの構成の変更}

従来のTreeVNCは、クライアントの接続する木構造が単一であった。
そのため、ネットワークインターフェースが違うクライアントが
同じ木に混在している状況が生じた。

速度の遅いクライアントが木に存在すると、
そのクライアント以下の通信速度が遅くなってしまう。

この問題を解決するために、
図2の様に、ネットワークインターフェース別に
木構造を形成するように設計した。

TreeVNCは、rootがnodeListというリストを保持し、木構造を管理している。
複数のネットワークインターフェースで木構造を形成する場合、
このnodeListをネットワークインターフェース毎に作成しておく。
新しいnodeを接続する際、nodeのネットワークインターフェースを取得し、
どのnodeListに登録されるかが決まる。
こうすることによって、TreeVNCを複数のネットワークインターフェイス別に
木構造を構成することができる。

\begin{figure}[!h]
  \begin{center}
    \includegraphics[width=80mm]{pic/MultiNetworkTree.eps}
  \end{center}
  \caption{マルチネットワークに対応したTreeVNCの図}
  \label{fig:figure2}
\end{figure}



\section{ホスト切り替え時の挙動の修正}
画面の切り替えを行う際、新しいホスト側の画面に生じた
ビデオフィードバックが他のユーザに配信されてしまう問題があった。

ホストの切り替えの際、
新しいホスト側のviewerを閉じることで問題を解決した。



\section{まとめ}
TreeVNCにリファクタリングを行うことによって、
開発環境を整え、
複数のネットワークインターフェイスでの通信が遅い問題を解消し、
これは開発環境を整えることや、利便性の向上に繋がる。




\section{画像データの遅延}
現在のTreeVNCでは、
全画像データの書き換えが立て続けに起こってしまった場合、
データの受け渡し処理で遅延が発生する。

送られてきた全てのデータを画面に出力するのではなく、
VNCServerから立て続けに大きい画像データが送信されたことを検知し、
最新のデータのみを取得し出力するといった実装を行う。

\newpage

\section{クライアントのエラーメッセージの通知}
クライアントが画面の切替を行う際、
接続が確立する前に、通信の段階でエラーが生じた場合、
そのエラーメッセージがrootに出力されるという問題がある。

クライアントのエラーを検出した際にそのクライアントのIDを取得する。
木構造を下に辿って、
エラーメッセージを含むデータを
クライアントに送信する。
下へと降る際、各nodeでIDの確認をし、
一致した箇所でエラーメッセージを出力するような実装を行う。



\section{音声データの配信}
現在TreeVNCが配信しているのは画面のデータのみである。
遠隔からプレゼンテーションや授業を聴講したい場合、
画面のデータに加えて音声データが欲しい。

TreeVNCに、画像データと共に音声データを追加する。



\section{画面の大きさの制御}
現在のTreeVNCは、ホスト側の画面全体を送信している。
マルチディスプレイを持っているホストだと、
2つの画面が配信されてしまう。
配信する画面をホスト側で指定できる様にする。

ホスト側にviewerの代わりに枠を用意し、
その枠内のデータのみを配信するといった機能を追加する。
この機能を追加することによって、



\begin{thebibliography}{9}

  \bibitem{1}
    TightVNC: VNC-Compatible Free Remote Control / Remote Desktop Software\\
    \verb|http://www.tightvnc.com/|
  \bibitem{2}
    RFB Protocol - rfbproto.pdf\\
    \verb|http://www.realvnc.com/docs/rfbproto.pdf|
  \bibitem{3}
    谷成雄, 河野真治, 授業やゼミ向けの画面共有システムTreeVNCの設計と実装 A Screen Sharing System using Tree Structure for Seminar and Classwork 平成25年度 学位論文(修士)
  \bibitem{4}
    谷成雄, 大城信康, 河野真治. VNCを用いた授業用画面共有システムの設計・開発 Design and implementation of Screen Sharing System with VNC for lecture 情報処理学会論文誌 Vol.53 No.2 (Feb. 2012)
  \bibitem{5}
    谷成雄, 大城信康, 河野真治. VNC を用いた授業用画面共有システムの設計と実装. 日本ソフトウェア科学会第 28 会大会(2011 年度) 講演論文集


\end{thebibliography}
\end{document}