[Glue!] Handshake between two software modules


二つのエージェントの間での情報交換は以下のような手順で行なう。

前提条件:
1:送信メッセージの書き込み
クライアントはサーバのアンカーの送信側の名前が unbound の場合にのみ、 送信メッセージを書き込み、サーバのアンカーの受信側の名前に変更通知要求を登録する。
2:送信メッセージ受領の変更通知メッセージ
Glue Logic は送信メッセージが書き込まれた事をサーバに通知する。
3:送信メッセージの読み出し
サーバは送信メッセージをアンカーの送信側から読み出す。
4:サーバの処理
サーバは送信メッセージに基づく処理を行なう。
5:返信メッセージの書き込み
サーバは処理の結果を自分のアンカーの受信側に書き込む。
6:返信メッセージ受領の変更通知メッセージ
Glue Logic は返信メッセージが書き込まれた事をクライアントに通知する。
7:返信メッセージの読み出し
クライアントは受信メッセージをサーバのアンカーの受信側から読み出す。
8:返信メッセージの解析
クライアントは得られた結果が要求通りのものであるかどうかを確認する。
9:サーバのリリース
クライアントはアンカーの送信側の内容を unbound にする。
10:送信メッセージ消去の変更通知メッセージ
Glue Logic は送信メッセージが消去された事をサーバに通知する。
11:送信メッセージ読み出し
サーバは送信メッセージを送信側から読み出す。
12:送信メッセージ消去の確認
サーバは自分のアンカーの送信側の内容が unbound になっている事を確認する。
13:返信メッセージの消去
サーバは自分のアンカーの返信側の内容を unbound にする。
14:返信メッセージ消去の変更通知メッセージ
Glue Logic は返信メッセージが消去された事をクライアントに通知する。
15:返信メッセージ読みだし
クライアントは返信メッセージを返信側から読み出す。
16:Handshake 完了の確認
クライアントは返信側の内容が unbound になっている事を確認し、 サーバのアンカーの受信側に対して出していた変更通知要求を取り下げる。
排他制御を行なう場合はもうひとつの名前を排他制御用に用意し、 handshake 開始前に lock を、 handshake 終了後に unlock を行なう。
また、サーバの状態表示のための値が必要な場合は、これもアンカーの中に用意する。

たとえば、アンカーとして用いる名前には、

foo.Request 送信側の名前 foo.Response 受信側の名前 foo.State 状態表示のための名前 foo.Lock 排他制御用の名前(クライアントの名前を入れる) を用いる。 また、送信メッセージや受信メッセージがいくつかのパラメータを必要とする場合は、 foo.Request.bar や foo.Response.bar などといった名前を使えば良い。

 [M.T. HomePage]  [written & copyrighted by Masayuki Takata]