GIOP
GIOP(General Inter-ORB Protocol)とは、分散コンピューティングにおけるObject Request Broker(ORB)間の抽象プロトコルである。このプロトコルに関する標準規格はObject Management Group(OMG)が管理している。
IIOP(Internet Inter-ORB Protocol)とは、TCP/IP上の GIOP の実装である。つまり、抽象プロトコルである GIOP を具現化したプロトコルである。
メッセージ型
編集Object Management Group は GIOP を以下の3つに分けて定義している:
- The Common Data Representation (CDR) - OMG IDL のデータ型を ORB 間などの低レベルな通信用表現にマッピングする規定
- The Interoperable Object Reference (IOR) - リモートオブジェクトへの参照の形式を規定。IOR はタグ付きプロファイルと各種情報を運ぶコンポーネントから構成される。典型的な IOR には、プロトコルのバージョン、サーバのアドレス、リモートオブジェクトを識別するバイト列(オブジェクトキー)からなる。
- The defined message formats - オブジェクト要求を行ったり、オブジェクト実装を確定したり、通信路を管理するなどの目的で、メッセージがエージェント間で交換される。メッセージには以下のようなものがある:
- Request - リモートメソッドの呼び出し
- Reply - Request への応答メッセージ。通常、リモートメソッドから返されるデータを含む。場合によっては、サーバ側へのリダイレクション指示や例外記述が含まれる。
- CancelRequest - 前に送った Request をキャンセルする(Replyを待たないことの宣言)。
- LocateRequest - そのサーバがあるリモートオブジェクトをサポートしているかを確認するメッセージ。サポートしていない場合は、そのオブジェクトへの要求を送るべきアドレスを尋ねる。
- LocateReply - LocateRequest への応答メッセージ。場合によってはそのリモートオブジェクトの新たなアドレスが含まれる。
- CloseConnection - サーバから送られ、今後応答しないことを示す。
- MessageError - 不正なメッセージへの応答として送られる。外部へのエラー通知には使われない(その場合は管理サーバからのRequestに対するReplyでエラーを通知する)。
- Fragment - 前のメッセージの続きを含むメッセージ。長いメッセージは分割して送られる。
バイナリ形式
編集バイナリ形式でGIOPメッセージをダンプ表示すると、ヘッダが独特であるために即座に判別できる:
- 4文字のASCII文字: G I O P
- 2バイトのバージョン番号(1バイト目がメジャーバージョンで現在は 1 のみ)
- 1バイトのメッセージフラグ。LSBでエンディアンを示す(0 - ビッグエンディアン、1 - リトルエンディアン)。
- 1バイトのメッセージ型(Reply、Request、Fragmentなどを示す)
- 4バイトのメッセージ長(ヘッダ部は含めない)
メッセージは整数タグ付きの任意のデータフラグメントの転送にも使われる。そのようなデータフラグメントはサービスコンテクストと呼ばれ、必要に応じて通信標準規格を拡張するのに使われる。例外を投げるサービスコンテキスト、文字コードを指定するサービスコンテキストなどが標準で用意されている。クライアントとサーバのインターセプターでメッセージにサービスコンテキストを付加してやり取りすることも可能である。
GIOP という略称の法的状態
編集CORBA、IIOP、OMG などの略称は Object Management Group の登録商標であり、利用には注意が必要である。しかし、GIOP は登録商標ではない(list of OMG marks参照)。したがって、場合によっては GIOP という用語を使った方がよい。