Mercurial > hg > Papers > 2022 > riono-master
changeset 43:1402268d1eca
update comparison chapter
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 10 Feb 2022 02:39:17 +0900 |
parents | e81425a6bf6a |
children | 050081af1296 |
files | Paper/chapter/2-RewriteCS.tex Paper/chapter/3-ChristieSharp.tex Paper/chapter/5-LibraryComparison.tex Paper/master_paper.pdf Paper/master_paper.tex |
diffstat | 5 files changed, 77 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/chapter/2-RewriteCS.tex Wed Feb 09 21:55:36 2022 +0900 +++ b/Paper/chapter/2-RewriteCS.tex Thu Feb 10 02:39:17 2022 +0900 @@ -117,8 +117,22 @@ \section{ChristieをC\#に書き換える意義} +ChristieはJavaで実装されているが、Unity開発は基本的にC\#が使用される。 +ここで、ChrsiteをJavaのまま利用するか、C\#に書き換えるかという疑問が生じた。 +Unityはandroidの開発向けにJavaで書かれたメソッドをC\#で呼び出せる機能がある。 +JavaやJava VMを呼び出すためにJava Native Interface(JNI)を利用している。 +C\#側でJavaを呼び出すには、Unity APIが提供しているヘルパークラスを呼び出す必要があるが、stringを使用してリソースディレクトリから検索を行っているため、 +計算負荷が高い。 +そのため、ChristieをJavaから呼び出して使用するには不適合であると考える。 +また、C\#に書き換えた際にバージョン管理の問題がある。 +書き換えを行ったとして、ChristieにはJavaとC\#の2種類あることになり、機能の実装などそれぞれに対応する必要がある。 +しかしJavaとC\#それぞれの対応はそこまで難しくないと考える。 +Javaの記法とC\#の記法は非常によく似ており、APIもほとんど同じ機能を持ったものがそれぞれ実装されている。 +そのため、Chrisiteに機能追加をする際にはJavaとC\#両方に対応することでバージョン間のすり合わせを行えると考える。 + +以上の理由により、ChristieをUnityでサポートされているC\#への書き換えを行う意義を見いだすことができた。 \section{Christie Sharpの書き換えの基本方針} @@ -172,7 +186,6 @@ Javaでは独自にThreadPoolを実装する際にはThreadPoolExecutorを継承する。 またThreadの優先度を変更する機能が実装されており、CodeGear実行時に処理の優先度を設定することが可能となっている。 -\newpage \lstinputlisting[label=src:CSThreadPoolExecutor, caption=Christie SharpにおけるThreadPoolの実装]{src/cs/ThreadPoolExecutor.cs} @@ -217,7 +230,6 @@ C\#のMessagePackは複数存在しており、msgpack java 0.6.12とほぼ同様の記述方法を採っているMessagePack CSharp 2.3.85を選択した。 -\newpage \lstinputlisting[label=src:CSMspackExample, caption=C\#におけるMessagePackの使用例]{src/cs/MessagePackExample.cs} MessagePack CSharpではmsgpack javaと同様にクラスに対してSerializeを行うため、\ref{src:CSMspackExample}の1行目でMessagePackObject attributeを追加している。 @@ -256,3 +268,12 @@ MultiThreadにBreak pointを張った際には停止できないと言うことがわかった。 そのため非効率ではあるが、Debugを行いたい処理の箇所にPrint文を挟むことでDebugを行った。 + +\section{Christie Sharpの記述方法} +ソースコード\ref{src:CSStartCGExample}、\ref{src:CSCGExample}、\ref{src:CSCountExample}はソースコード\ref{src:StartCGExample}、\ref{src:CGExample}、\ref{src:CounteObj}をChrisite Sharpで書き換えたものである。 +JavaとC\#は大きく記述方法は変わらず、annotationがattributeになっている点が一番の違いである。 +そのためChristieとChrisite Sharptには互換性があると言える。 + +\lstinputlisting[label=src:CSStartCGExample, caption=Chrisite SharpにおけるStartCodeGearの記述例]{src/cs/StartCountUp.cs} +\lstinputlisting[label=src:CSCGExample, caption=Chrisite SharpにおけるCodeGearの記述例]{src/cs/CountUpper.cs} +\lstinputlisting[label=src:CSCountExample, caption=Chrisite SharpにおけるDGとして送信されるオブジェクトのクラス]{src/cs/CountObject.cs} \ No newline at end of file
--- a/Paper/chapter/3-ChristieSharp.tex Wed Feb 09 21:55:36 2022 +0900 +++ b/Paper/chapter/3-ChristieSharp.tex Thu Feb 10 02:39:17 2022 +0900 @@ -1,9 +1,1 @@ \chapter{Christie Sharp} -\section{Christie Sharpの記述方法} -ソースコード\ref{src:CSStartCGExample}、\ref{src:CSCGExample}、\ref{src:CSCountExample}はソースコード\ref{src:StartCGExample}、\ref{src:CGExample}、\ref{src:CounteObj}をChrisite Sharpで書き換えたものである。 -JavaとC\#は大きく記述方法は変わらず、annotationがattributeになっている点が一番の違いである。 -そのためChristieとChrisite Sharptには互換性があると言える。 - -\lstinputlisting[label=src:CSStartCGExample, caption=Chrisite SharpにおけるStartCodeGearの記述例]{src/cs/StartCountUp.cs} -\lstinputlisting[label=src:CSCGExample, caption=Chrisite SharpにおけるCodeGearの記述例]{src/cs/CountUpper.cs} -\lstinputlisting[label=src:CSCountExample, caption=Chrisite SharpにおけるDGとして送信されるオブジェクトのクラス]{src/cs/CountObject.cs} \ No newline at end of file
--- a/Paper/chapter/5-LibraryComparison.tex Wed Feb 09 21:55:36 2022 +0900 +++ b/Paper/chapter/5-LibraryComparison.tex Thu Feb 10 02:39:17 2022 +0900 @@ -4,9 +4,62 @@ 本章では、Unityで使用可能な通信ライブラリであるPhoton Unity Networking2、MirrorとChristie Sharpの比較を行い、 Unityで使用する場合のChristie Sharpの評価を行う。 -\section{Christie Sharpの利点} +\section{Christie Sharpと既存ライブラリの比較} + +既存の通信ライブラリとしては前述した、Photon Unity Network2とMirrorをChristie Sharpとの比較を行う。 +表\ref{tb:Libraryfeature}はChrisite Sharp、PUN2、Mirrorのそれぞれの特徴をまとめたものである。 + + +\begin{table}[htbp] + \begin{center} + \caption{各通信ライブラリの特徴} + \begin{tabular}{|c|c|c|c|} \hline %hlineで縦線 |c|で要素をくくる + & node間の通信方法 & Unity APIの対応 & 拡張可能か \\ \hline +Christie Sharp & p2p & 未対応 & 可能\\ \hline +PUN2 & Server Client & 対応 & 一部可能\\ \hline +Mirror & Server Client & 対応 & 可能\\ \hline + \end{tabular} + \label{tb:Libraryfeature} + \end{center} +\end{table} +PUN2やMirrorはnode間の通信方法としてクライアントサーバ方式を取っている。 +背景には、PUN2はPhoton Cloudを前提にServerへの接続が行われており、MirrorはMMOでの動作を前提に作成されているからである。 +一方Christie Sharpは、Topology Managerを利用して各nodeの接続を行っているためServerは無く、p2pでの接続となる。 + +Unity APIの対応に関しては、PUN2、MirrorがUnity APIで提供されている独自の型を簡単に同期できる機能があるが、 +Christie Sharpにはその機能が存在せず、データの同期にはC\#のプリミティブ型に変換して送信する必要がある。 + +拡張が可能かについては、Christie Sharp、Mirrorはユーザ自身が拡張可能である。 +Christie SharpはGitHubにて公開予定であり、MirrorはOSSなため、プロジェクトの状況に応じた機能の追加や変更などが可能となっている。 +一方PUN2はUnity上で動作するClient側のソースコードは公開されているが、Server側はPhoton Cloudを使用する必要があるため、拡張性は他の比較対象と比べ低い。 + + +PUN2ではPhoton Cloudがあるが、無料での使用には制限がかかり、制限を超えると別途Serverの料金が発生する。 +Mirrorは自前でServerを用意する必要があり、処理の大半はServerで行われるためServerのスペックを考えて開発する必要があある。 +Chrisite SharpはUnity APIへの対応が未対応が目立つ一方、p2pで通信を行うため、強力なServerを必要としない。 +またp2pの形式を取っているが、Topology ManagerのHostをServerで作動させることで、クライアントサーバ方式に変更することも可能である。 +\section{Christie Sharpの利点} +他の通信ライブラリと比較して、Chrisite Sharpを利用する利点として、以下が挙げられる。 +\begin{itemize} + \item 単体でも並列処理が可能 + \item 通信切断した際にゲームロジックが停止しない +\end{itemize} + +他の通信ライブラリでは、並列処理の外部ライブラリを導入する際に、ライブラリ同士の相性や処理方法について考える必要がある。 +並列処理や非同期処理のDebugは複雑であり、複数のライブラリで問題が起きていた際に特定と解決は困難である。 +Chrisite Sharpでは、CodeGear/DataGearを使用した待ち合わせ処理を基本として処理が行われる。 +この処理はMulti Threadで行われているため、ユーザは並列処理や非同期処理を必要以上に意識せずにプログラムが可能である。 +並列処理のライブラリを導入しなくても済むため、問題の特定は複数のライブラリを組み合わせた場合と比べ容易になる。 + + +node間の通信において、通信の切断は必ず発生する。 +通信が切断された際に、ゲームロジックが破綻しゲーム全体が続行不可能になる場合もある。 + +通常、切断時にゲームロジックが停止しないような例外処理を行う必要があるが、Chrisite Sharpでは常に参照すべき値をPeekで取得することによって、 +通信が切断されても参照データは消えずに参照可能である。 +また、Topology ManagerにはCookieの機能が備わっているため、改良することによって通信が切断された場合にでもゲームに復帰することが可能になると考える。
--- a/Paper/master_paper.tex Wed Feb 09 21:55:36 2022 +0900 +++ b/Paper/master_paper.tex Thu Feb 10 02:39:17 2022 +0900 @@ -101,7 +101,6 @@ \input{chapter/0-introduction.tex} \input{chapter/1-Christie.tex} \input{chapter/2-RewriteCS.tex} -\input{chapter/3-ChristieSharp.tex} \input{chapter/4-WorkingInUnity.tex} \input{chapter/5-LibraryComparison.tex} \input{chapter/conclusion.tex}