トリクル・メッセージの実装 |
Last modified 5:33 PM UTC, March 10 2005 |
クライアントでは、boinc_send_trickle_up()
という関数が 'trickle_up'というファイルをそのスロット訳注1
のディレクトリに作ります。
そして、コア・クライアントに共有メモリ経由で通知します。
コア・クライアントがこの通知を受け取るか、
あるいは、アプリケーションがexitすると、
コア・クライアントはこのファイルを 'slot/trickle' から
'project/trickle_up_resultid_time' に移動します。
コア・クライアントはサーバにRPCをかけるとき、 そのプロジェクトのディレクトリに 前述の trickle-up ファイルが あるか見て、あれば[RPCの]要求に含ませます。 そのとき、同時にそれらのファイル名の末尾に、'.sent' を追加します。 RPCが成功完了すると、コア・クライアントは その trickle-up ファイルを削除します。
サーバ側では、メッセージは 'trickle_up' と 'trickle_down'. というデータベーステーブルに蓄積されます。 スケジューリング・サーバは、要求メッセージの中からトリクルメッセージを 取り出し、trickle_up テーブルに追加します。 もし、'trickle_down'フラグが構成定義ファイル[config.xml] でセット されていれば、スケジューリング・サーバはデータベースから、 このホスト宛の trickle_down メッセージを探し出します。 それを応答メッセージの中に含ませ、データベースレコードの 「処理済み('handled')」フラグをセットします。
クライアントは、スケジューラからの応答の中にある trickle-down メッセージを構文解析します。 そして、対応する slot ディレクトリに、trickle_down_createtime_id という形の名前で ファイルを作り、アプリケーションへは共有メモリを通じて、 届いたメッセージを読めるようにしたことを伝えます。