# HG changeset patch # User Shinji KONO # Date 1620244994 -32400 # Node ID 6db1ce63c1402b2931798d0190a0aae06b305dea # Parent dc14b5cc512b2de796b3604c547684915c2a0a40 add intro diff -r dc14b5cc512b -r 6db1ce63c140 Paper/riono-sigos.pdf Binary file Paper/riono-sigos.pdf has changed diff -r dc14b5cc512b -r 6db1ce63c140 Paper/riono-sigos.tex --- a/Paper/riono-sigos.tex Thu May 06 01:36:43 2021 +0900 +++ b/Paper/riono-sigos.tex Thu May 06 05:03:14 2021 +0900 @@ -94,7 +94,35 @@ \section{オンラインゲームにおけるデータ通信} +オンラインゲームはさまざまな回線を通じて複数のプレイヤーが関与する分散プログラムである。通信形態はクラウド上のサーバを +中心とした形態が多い。分散プログラムを正しく書くことは難しく、また、ゲームの場合はさまざまな攻撃が行われることが多い。 +ネットワーク上のパケットを用いた攻撃やウイルスもそうだが、ゲームのルールにそっていても、プレイヤーのデバイス上で +プログラムを用いたチートが行われる場合もある。 +TCP/IPが現状のインターネットの標準的なプロトコルであり、その上に、信頼性はないがコネクションなしにデータを転送できる +Datagram と、信頼性を保証する通信路である TCP の二種類のトランスポート層が用意されている。しかし、 +より高いレベルの通信ライブラリにより、攻撃に強く、柔軟にゲームの通信プロトコルを拡張できるフレームワークが +望まれている。例えば、Windows 上のDirect Xなどにはそのようなもの搭載されている。Unity ゲームフレームワークでも +さまざまな通信ライブラリが存在する。 + +当研究室では初代PlayStation用に作成した Federated Linda を拡張して、CodeGear / DataGear を用いた分散フレームワークを +開発中である。これは Java でかかれており、Unity 上で直接動かすことはできない。そこで、C\# で再実装することにより +Unity 上のゲームの通信ライブラリとして使用できるようにする。 + +従来の通信ライブラリと異なり、型のあるDataGear をタプル空間(DataGearManger/DGM)に Key を持つストリームとして +格納する方式をとっている。DGM は自ノードには local なものがあり、自ノードのスレッド間での通信に用いられる。 +他のノードは、このDGMの proxy を持ち、proxy に書き込むことで自ノードとの通信を行う。 + +DGMの構成はトポロジーマネージャーにより自動的に構成される。ゲームノードは、まず、トポロジーマネージャと通信し、 +自分が接続するべきノードを知らされる。自分が指示されたノードに接続し、DGMを持つ。ゲームプログラム自体は、 +複数の名前のついたDGMを知っていればよく、IP addressなどを知る必要はない。 + +DGMは proxy であり、DataGearのコピーをそこに持っている。なので、ネットワーク接続の切断があっても、 +ゲームの動きを止めることなく対応が可能となっている。ゲームノードは直接接続される対象が何かを +直接知ることはできないので、チートに対する耐性がある。例えば、まず、チートがあるかどうかを調べる +ノードに接続するなどの工夫が可能となっている。 + +本論文では Java で書かれた Chirstie と C\# で書かれたものの説明し、その機能と実装の差について考察する。 \section{Christie のC\#への書き換えについて} Christie はAlice というプロジェクトで開発が行われていた。しかしAlice には様々な問題点があった。データを管理しているlocalDataGear をシングルトンで設計してしまい、local で接続を行う際には複数のアプリケーションを立ち上げる必要がある。また、データを受け取る際にObject 型で受け取っている影響で何の方が送信されるか不明瞭である点などがあり、再設計を行う必要性が発生した。それらの問題点を解消するためにAlice を再構築したものがChristie である。 @@ -136,9 +164,9 @@ \lstinputlisting[caption=ring.dot, label=code:ring]{src/ring.dot} -\begin{figure}[htp] %PDF +\begin{figure}[h] %PDF \begin{center} -\includegraphics[width=8cm]{fig/ring.pdf} +\includegraphics[width=6cm]{fig/ring.pdf} \caption{Code \ref{code:ring} の図示} \label{fig:ring} \end{center}