RPC が提供するサービスには、さまざまなレベルのアプリケーションインタフェースがあります。レベルごとに制御の度合いが異なるため、インタフェースのコーディング量との兼ね合いで適当なレベルを使用してください。この節では、制御の度合いとプログラムの複雑さの順に、各レベルで利用できるルーチンについて要約します。
単純インタフェースは、使用するトランスポートタイプだけを指定して、他のマシン上のルーチンをリモートプロシージャ呼び出しにより実行します。ほとんどのアプリケーションで、このレベルのルーチンを使用します。この説明とコード例は、単純インタフェースを参照してください。
表 2–1 RPC ルーチン - 単純レベル
ルーチン |
機能 |
---|---|
手続きを RPC プログラムとして、指定したタイプのトランスポートすべてに登録する |
|
rpc_call () |
指定したリモートホスト上の指定した手続きをリモート呼び出しする |
指定したタイプのトランスポートすべてに呼び出しメッセージをブロードキャストする |
標準インタフェースはトップレベル、中間レベル、エキスパートレベル、ボトムレベルの 4 つのレベルに分けられます。プログラマはこれらのインタフェースを使用して、トランスポートの選択、エラーへの応答または要求の再送まで待つ時間の指定などのパラメータをかなり詳細に制御できます。
トップレベルのインタフェースも簡単に使用できますが、RPC 呼び出しを行う前にクライアントハンドルを作成し、RPC 呼び出しを受ける前にサーバーハンドルを作成しなければなりません。アプリケーションをすべてのトランスポート上で実行したい場合は、このインタフェースを使用してください。このルーチンの使用方法とコード例は、トップレベルのインタフェースを参照してください。
表 2–2 RPC ルーチン—トップレベル
ルーチン |
説明 |
---|---|
汎用のクライアント作成ルーチン。このルーチンは、サーバーの位置と、使用するトランスポートのタイプを指定して呼び出す |
|
clnt_create() に似ているが、クライアントの作成を試みる間、各トランスポートタイプに許される最長時間を指定できる |
|
指定したタイプのトランスポートすべてに対しサーバーハンドルを作成する。このルーチンは、使用するディスパッチ関数を svc_create() に指定して呼び出す |
|
clnt_call() () |
要求をサーバーに送信するための手続きをクライアント側から呼び出す |
RPC の中間レベルのインタフェースを使用すると、通信を詳細に制御できます。このような下位レベルのインタフェースを使用すると、プログラムは複雑になりますが、効率はよくなります。中間レベルでは特定のトランスポートを指定できます。このルーチンの使用方法とコード例は、中間レベルのインタフェースを参照してください。
表 2–3 RPC ルーチン—中間レベル
ルーチン |
説明 |
---|---|
指定したトランスポートに対するクライアントハンドルを作成する |
|
clnt_tp_create() に似ているが、許される最長時間を指定できる |
|
指定したトランスポートに対するサーバーハンドルを作成する |
|
clnt_call() () |
要求をサーバーに送信するための手続きをクライアント側から呼び出す |
エキスパートレベルには、トランスポートに関連するパラメータを指定するさまざまなルーチンがあります。このルーチンの使用方法とコード例は、エキスパートレベルのインタフェースを参照してください。
表 2–4 RPC ルーチン—エキスパートレベル
ルーチン |
説明 |
---|---|
指定したトランスポートに対するクライアントハンドルを作成する |
|
svc_tli_create () |
指定したトランスポートに対するサーバーハンドルを作成する |
rpcbind デーモンを呼び出して、RPC サービスとネットワークアドレスとのマップを作成する |
|
rpcb_set() で作成したマップを削除する |
|
rpcbind() デーモンを呼び出して、指定した RPC サービスのトランスポートアドレスを取り出す |
|
svc_reg () |
指定したプログラム番号とバージョン番号のペアを、指定したディスパッチルーチンに関連付ける |
svc_reg() で設定した関連付けを解除する |
|
clnt_call() () |
要求をサーバーに送信するための手続きをクライアント側から呼び出す |
ボトムレベルには、トランスポートを完全に制御することができるルーチンがあります。これらのルーチンについては、ボトムレベルのインタフェースを参照してください。
表 2–5 RPC ルーチン—ボトムレベル
ルーチン |
説明 |
---|---|
非接続型トランスポートを使用して、指定したリモートプログラムに対する RPC クライアントハンドルを作成する |
|
非接続型トランスポートを使用して、RPC サーバーハンドルを作成する |
|
接続型トランスポートを使用して、指定したリモートプログラムに対する RPC クライアントハンドルを作成する |
|
接続型トランスポートを使用して、RPC サーバーハンドルを作成する |
|
clnt_call() () |
要求をサーバーに送信するための手続きをクライアント側から呼び出す |