設計仕様
入出力ポート
入出力ポートの構成は以下の通り。(この下に図があればうれしいな。)
- データ入力ポート (入力専用)
- ファイル入出力ポート
- データ出力ポート (入出力可)(最大8ポートのコネクション
を想定しています。)
これらはすべてソケット通信を用います。
(この概要はいらん)
概要
入力専用ポートから取得したソケット通信データを、このハブに接続された
各々のプロセスに流します。またこのデータはファイルに記録することもできます。
動作
入力専用ポートからのデータは一時的にバッファに記録されます。
(このバッファサイズは可変です。下流のプロセスの様子等をみて
決定してください。)
また、同時にこのデータはすべて漏らすことなくファイルに記録されます。
入出力ポートにコネクトされたプロセスはソケットを通して、後に記すような
リクエストを送ることで、バッファ内から必要に応じてデータを取り出す
ことができます。
また、エミュレーション機能も備えており、ファイルに記録されたデータを
あたかも入力ポートから来たかのようにして下流へと流すことができます。
リソース
今回は1スピル分のデータが貯めておけるだけの
メモリーを確保したいと思っています。
(注意)入力データはまとまってくるため、バッファサイズが
小さいと、読み出す前に上書きされてしまいます。
ネームスペース
KonoeDataHubはその機能上、複数起動される可能性があります。
そこでネームスペース内での識別子の衝突を防ぐため、
以下の文字列 "DATAHUB" には各データハブ固有の名前(一意に設定される)
を入れる事にします。
構想としては ./DataHub [name] で名前を設定しようと思っています。
- "DATAHUB"_STORAGE_FILE_NAME
データ保存用のファイル名
- "DATAHUB"_INPUT_PORT
入力ポート
- "DATAHUB"_OUTPUT_PORT
出力ポートのリスト
- "DATAHUB"_BUFFER_SIZE
内部バッファのサイズ(未定)
コマンド及びリクエスト セット
ハブのコントロールに関係するコマンド群です。
- DATAHUB_CMD_FILE_CLOSE
ファイルの明示的クローズ。(いらんかも?)
- DATAHUB_CMD_NEW_FILE
別の新しいファイルに書き込みます。ファイル名はネームスペースの
DATAHUB_STORAGE_FILE_NAME を参照するので、そこを前もって
書き換えておく必要があります。
ファイルを複数個使いたい時を想定。
- DATAHUB_CMD_DUMMY_FILE
データをファイルに残さないことを意味します。
(記録を必要としないケースに用いられる。
ハードディスクに依存しない速度が得られる?)
- DATAHUB_CMD_CHANGE_BUFFER_SIZE
バッファサイズの変更を促します。
ネームスペースの値を読みにいきます。
- DATAHUB_CMD_LOCK_BUFFER_OVERWRITE
読みだしポインター以降のデータを書き換えないことを保証。
バッファがいっぱいになるとひたすら読み出しが来るまで
待つしかない。(これもいらん?)
- DATAHUB_CMD_READ_FROM_FILE
ファイルからの読み出しモードです。
- DATAHUB_CMD_MINIMUM_MODE
不安定時等に使う縮小モード。だたファイルに記録する
のみ、すべてのソケットを無視(閉鎖)。
バッファリングも行わない?
- DATAHUB_CMD_CLEAR_BUFFER
バッファを空にします。
各ポートに接続されたプロセスが、利用するリクエスト群です。
- DATAHUB_REQ_MODE_THROUGH
いわゆる垂れ流しモードを想定しています。
- DATAHUB_REQ_MODE_HANDSHAKE
ハンドシェイクモードです。
デフォルトなので最初からこちらを使う時は、
特にこのリクエストを送る必要は有りません。
以下はハンドシェークモードで有効なリクエスト
- DATAHUB_REQ_HEAD
バッファの先頭のデータを要求する時に使います。
- DATAHUB_REQ_TAIL
バッファの末尾のデータを要求する時に使います。
- DATAHUB_REQ_CURRENT
現在ポインターのあるデータを要求する時に使います。
(これを主に使う。)
- DATAHUB_REQ_SEEK_"POS"
ポインターの位置をPOSに動かします。
- DATAHUB_REQ_BLOCK
1回のリクエストでバッファ全体を要求します。
(ブロック転送??? この辺はあまり必要性を感じていません。)
(注意)ここに載せた幾つかのリクエストは、提案であり必ず実装する
と言うわけではありません。
今現在の構想では、普段は、DATAHUB_REQ_CURRENT を使用し、
ランが変るときに、ファイルを変えたいから DATAHUB_CMD_NEW_FILE を使い、
オフライン解析で DATAHUB_CMD_READ_FROM_FILE が使われるのではないか
と思っています。
[ File = konoe/examples/t473/DataHub/urd.html ] last modified = 2-Oct-2000
KONOEラボレーション
konoe-req@konoe.kek.jp