RPC サービスは、接続型と非接続型の両方のトランスポートでサポートされています。トランスポート選択は、アプリケーションの性質で決まります。
アプリケーションが次のすべてに当てはまる場合は、非接続型トランスポートの方が適当です。
手続きの呼び出しによってサーバー内部の状態や関連データが変更されない
引数と戻り値のサイズがトランスポートのパケットサイズより小さい
サーバーは非常に多くのクライアントを扱う必要がある。非接続型サーバーは各クライアントの状態データを保持する必要がないため、本質的に数多くのクライアントを処理することができる。これに対して、接続型サーバーではオープンしているクライアント接続すべての状態データを保持するため、処理できるクライアント数はホストの資源によって制限される
アプリケーションが次のどれかに当てはまる場合は、接続型トランスポートの方が適当です。
非接続型トランスポートと比較して、アプリケーションで接続の確立により多くの手間をかけることができる
手続きの呼び出しによってサーバー内部の状態や関連データが変更される可能性がある
引数または戻り値のサイズがデータグラムパケットの最大サイズより大きい
各トランスポートには固有の変換ルーチンがあり、汎用ネットワークアドレス (トランスポートアドレスを文字列で表現したもの) とローカルアドレスとの相互変換を行います。RPC システム内 (例えば、rpcbind とクライアントの間) では、汎用アドレスが使用されます。各トランスポートには、名前からアドレスへの変換ルーチンの入った実行時リンクライブラリがあります。表 2–7 に、主な変換ルーチンを示します。
上の各ルーチンについての詳細は、netdir(3NSL) のマニュアルページを参照してください。どのルーチンの場合も、netconfig 構造体が名前からアドレスへの変換のコンテキストを提供していることに注意してください。
表 2–7 名前からアドレスへの変換ルーチン
netdir_getbyname () |
ホストとサービスのペア(たとえば、server1、rpcbind) と netconfig 構造体から、netbuf アドレスのセットに変換する。netbuf は TLI 構造体で、実行時にトランスポート固有のアドレスが入る |
|
netbuf()アドレスと netconfig 構造体から、ホストとサービスのペアに変換する |
uaddr2taddr() |
汎用アドレスと netconfig() 構造体から、netbuf アドレスに変換する |
taddr2uaddr () |
netbuf アドレスと netconfig 構造体から、汎用アドレスに変換する |