Mercurial > hg > Papers > 2014 > oc
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}