Mercurial > hg > Papers > 2022 > riono-master
changeset 25:3bf32fc6dab1
add images
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 02 Feb 2022 18:10:34 +0900 |
parents | 1323b7d93190 |
children | 905ebcf50755 |
files | Paper/chapter/1-Christie.tex Paper/chapter/2-RewriteCS.tex Paper/images/SendPackt.graffle Paper/images/SendPackt.pdf Paper/master_paper.pdf |
diffstat | 5 files changed, 26 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/Paper/chapter/1-Christie.tex Wed Feb 02 10:14:18 2022 +0900 +++ b/Paper/chapter/1-Christie.tex Wed Feb 02 18:10:34 2022 +0900 @@ -223,8 +223,4 @@ 送信されたTakeコマンドを受け取ったLocalDGMは、要求されたDGがあればReplyコマンドを生成して送り返す。 もしDGがなければ、Remoteから来たコマンドもLocalの場合と同様にLocalDGMのwaitListに格納される。 -Replyコマンドを受け取るとRemoteDGMhはwaitListに入っていたコマンドを解決し、待ち合わせが完了する。 - - -\section{TopologyManager} - +Replyコマンドを受け取るとRemoteDGMhはwaitListに入っていたコマンドを解決し、待ち合わせが完了する
--- a/Paper/chapter/2-RewriteCS.tex Wed Feb 02 10:14:18 2022 +0900 +++ b/Paper/chapter/2-RewriteCS.tex Wed Feb 02 18:10:34 2022 +0900 @@ -97,33 +97,46 @@ Christie SharpではCodeGearの処理で使用していたThreadPoolと同様にTaskへの書き換えを行った。 \section{MessagePackの変更} -Christieではデータを他Nodeに送信する際に、MessagePackを使用してデータを圧縮し、送信を行っている。 +Christieではデータを他Nodeに送信する際に、MessagePackを使用してデータをSerializeし、送信を行っている。 Chrisiteで使用しているMessagePackはmsgpack java 0.6.12を使用しており、現在はサポートされていない。 そのためJavaでサポート対象となっているmsgpack java 0.7.x以上のMEssagePakckとは記述方法が異なっている。 ソースコード\ref{src:JavaMspackExample}はChristieで使用してるmsgpack java 0.6.12の使用例である。 \lstinputlisting[label=src:JavaMspackExample, caption=JavaにおけるMessagePackの使用例]{src/java/MessagePackExample.java} -MessagePackを使用するには、圧縮を行うクラスに対して明示的に@Message annotationを付ける必要がある。 -これにより、クラス内で宣言したpublic変数が圧縮の対象となる。 -ソースコード\ref{src:JavaMspackExample}の14 - 18行目は圧縮解凍を行う例である。 -MessagePackインスタンスを作成後、writeメソッドを使用することで引数に渡したオブジェクトをbyte[]型に圧縮できる。 -解凍にはreadメソッドを使用し、引数として圧縮されたbyte[]型と解凍対象のクラスを渡すことで解凍できる。 +MessagePackを使用するには、Serializeを行うクラスに対して明示的に@Message annotationを付ける必要がある。 +これにより、クラス内で宣言したpublic変数がエンコードの対象となる。 +ソースコード\ref{src:JavaMspackExample}の14 - 18行目はSerialize/Deserializeを行う例である。 +MessagePackインスタンスを作成後、writeメソッドを使用することで引数に渡したオブジェクトをbyte[]型にSerializeできる。 +Deserializeにはreadメソッドを使用し、引数としてSerializeされたbyte[]型とDeserialize対象のクラスを渡すことでデコードできる。 -C\#のMessagePackは複数存在しており、msgpack java 0.6.12とほぼ同様の記述方法を採っているMessagePack CSharpを選択した。 +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と同様にクラスに対して圧縮を行うため、\ref{src:CSMspackExample}の1行目でMessageObject attributeを追加している。 -また、圧縮する変数に対してkeyを設定することができ、indexesとしてのintやstringをkeyとして指定することができる。 +MessagePack CSharpではmsgpack javaと同様にクラスに対してSerializeを行うため、\ref{src:CSMspackExample}の1行目でMessageObject attributeを追加している。 +また、Serializeする変数に対してkeyを設定することができ、indexesとしてのintやstringをkeyとして指定することができる。 -データの圧縮にはMessagePackSerializer.Serializeメソッドを使用し、引数として渡したオブジェクトをbyte[]型に圧縮変換する。 -解凍にはMessagePackSerializer.Deserializeメソッドを使用する。Deserializeメソッドはジェネリスク関数であるため、<>内に解凍対象のクラスを指定する。 +データのSerializeにはMessagePackSerializer.Serializeメソッドを使用し、引数として渡したオブジェクトをbyte[]型にSerializeする。 +DeserializeにはMessagePackSerializer.Deserializeメソッドを使用する。Deserializeメソッドはジェネリスク関数であるため、<>内にDeserialize対象のクラスを指定する。 ソースコード\ref{src:CSMspackExample}の22行目ではjson展開の例であり、変数それぞれにkeyを指定していることで展開可能となっている。 -\section{送信データの修正} +\section{送信パケットの修正} +MessagePackのバージョンを更新した影響により、Remote nodeにデータを送信するパケットの形式を変更する必要がある。 +図\ref{fig:SendPackt}はChristieと、Chrisite Sharpにおける送信パケットの構成である。 +msgpack javaではreadメソッドの引数にClass$<$T$>$を渡すことでデコード可能であり、RemoteMessageのDeserializeにデータ長を指定する必要はない。 +DGはジェネリスクで記述しており毎回デコードするクラスが異なるため、デコードの際にデータ長を必要としている。 +しかしMessagePack CSharpでは、DeserializeメソッドにClass$<$T$>$を渡してデコードすることができないため、データ長も付属させてデータを送信する。 +それぞれのSizeのデータ長はintで指定しているが、MessagePackでSerializeした際に最大で5byteになる。 +\begin{figure}[htb] + \begin{center} + \includegraphics[width=150mm]{images/SendPackt.pdf} + \end{center} + \caption{送信パケットの構成} + \label{fig:SendPackt} +\end{figure} \ No newline at end of file