クラスSimpleStackを題材として、スレッドを用いたXMLRPCサーバ・クライアントのシステム
SimpleStackThreadXMLRPCserver
SimpleStackThreadXMLRPCclient
スレッド(C1)
スレッド(C2)
スレッド(S2)
”SimpleStack(3)”
①標準入力からスタック操作
要求を文字列として受け取
る。
②受け取ったスタック操作要
求を、通信データとしてサー
バに送る。 (ここで、通信機
構を実行する部分のデータ
送信機能が働く)
③サーバからの返信を結果
として得る。 (ここで、通信機
構を実行する部分のデータ
受信機能が働く)
④その結果を表示する。そし
て、再び、①から繰り返す。
通
信
機
構
を
実
行
す
る
部
分
”SimpleStack(3)=sid”
sidは、サーバ自身が保持して
いるスタックオブジェクトの実体
を表す識別子
”sid.push(a)”
”sid.push(a)=<ok>”
”sid.pop()”
”sid.pop()=a”
サーバに対して必要なサービス
を要求する部分
通
信
機
構
を
実
行
す
る
部
分
スレッド(S1)
①スタック操作要求を、通信
データとしてクライアントから
受け取る。
(ここで、通信機構を実行す
る部分のデータ受信機能が
働く)
②受け取ったスタック操作要
求を解析して、実際のスタッ
クオブジェクトをメソッド操作
し結果を得る。
(注:スタックオブジェクトの
実体は、サーバ自身が保持
しなければならない)
③その結果をクライアントに
返す。
(ここで、通信機構を実行す
る部分のデータ送信機能が
働く)
④そして、再び、①から繰り
返す。
クライアントから要求された必要
なサービスを実行する部分
スレッド(C1)
SimpleStackThreadXMLRPCclient.py(Serverに委託してスタックを操作する)
SimpleStack(3)
sid
sidは、サーバ自身が保持して
いるスタックオブジェクトの実体
を表す識別子
スレッド(C2)
ThreadXMLRPCクライアントの通信機構
(client.pyの通信機能の部分を再利用)
スタック操作を、Serverに
要求するメッセージ
スタック操作の結果を、Clientに
返信するメッセージ
スレッド(S2)
ThreadXMLRPCサーバの通信機構
(thread_server.pyの通信機能の部分を再利用)
SimpleStack(3)
resultをsidに変換
例外
result = SimpleStack(3)
SimpleStackThreadXMLRPCserver.py(Clientの要求に応じてスタックを操作する)
スレッド(S1)
スレッド(C1)
SimpleStackThreadXMLRPCclient.py
(Serverに委託してスタックを操作する)
スレッド(C2)
ThreadXMLRPCクライアントの通信機構
(client.pyの通信機能の部分を再利用)
スタック操作を、Serverに
要求するメッセージ
スタック操作の結果を、Clientに
返信するメッセージ
スレッド(S2)
ThreadXMLRPCサーバの通信機構
(thread_server.pyの通信機能の部分を再利用)
例外
クラス
変数:
SimpleStack
stack
A
B
push
C
クラス
クラス
変数:
変数:
SimpleStack
SimpleStack
pop
stack
stack
B
C
push
push
C
pop
例外
クラス
変数:
SimpleStack
stack
pop
push
SimpleStackThreadXMLRPCserver.py
(Clientの要求に応じてスタックを操作する)
スレッド(S1)
pop
SimpleStackThreadXMLRPCclient.py
(Serverに委託してスタックを操作する)
スレッド(C1)
ThraedXMLRPCクライアントの通信機構(Client.pyの通信機能の部分を再利用)
スレッド(C2)
スタック操作を、Serverに要求するメッセージ
スタック操作の結果を、Clientに返信するメッセージ
ThraedXMLRPCサーバの通信機構(thread-server.pyの通信機能の部分を再利用)
インスタンスX
SimpleStack
変数:
stack
インスタンスY
SimpleStack
変数:
stack
pop
インスタンスX
SimpleStack
変数:
stack
A
B
C
スレッド(S2)
インスタンスY
SimpleStack
変数:
stack
例外
push
push
インスタンスX
SimpleStack
変数:
stack
A
B
C
push
例外
pop
インスタンスY
SimpleStack
変数:
stack
pop
push
インスタンスX
SimpleStack
変数:
stack
SimpleStackThreadXMLRPCserver.py
(Clientの要求に応じてスタックを操作する)
インスタンスY
SimpleStack
変数:
stack
A
B
C
スレッド(S1)
スレッド(C1)
SimpleStackThreadXMLRPCclient.py
(Serverに委託してスタックを操作する)
ThreadXMLRPCクライアントの通信機構(Client.pyの通信機能の部分を再利用)
スレッド(C2)
スタック操作を、Serverに要求するメッセージ
スタック操作の結果を、Clientに返信するメッセージ
スレッド(S2)
ThreadXMLRPCサーバの通信機構(thread-server.pyの通信機能の部分を再利用)
インスタンスX
SimpleStack
インスタンスY
SimpleStack
変数:
stack
インスタンスY
SimpleStack
push
インスタンスX
SimpleStack
save
変数:
stack①
…
⑩
restore
①
…
⑩
pop
pop
変数:
stack
①
…
⑩
変数:
stack
①
…
⑤
比較
インスタンスZ
SimpleStack
インスタンスX
SimpleStack
変数:
stack
①
…
⑤
比較
変数:
stack①
push
例外
…
⑤
save
①
…
⑤
SimpleStackThreadXMLRPCserver.py
(Clientの要求に応じてスタックを操作する)
restore
スレッド(S1)
ダウンロード

スレッド(S2)