3.1.10 TP1/EEまたはTP1/Server BaseとRPC通信をする場合
TP1/EEとTP1/Server Base,またはTP1/EE同士がRPC通信をする場合に設定する必要があるシステム定義または関数について説明します。
TP1/Server Baseのシステム定義についてはマニュアル「OpenTP1 システム定義」を,TP1/Server Baseの関数についてはマニュアル「OpenTP1 プログラム作成リファレンス C言語編」またはマニュアル「OpenTP1 プログラム作成リファレンス COBOL言語編」を参照してください。
(1) サービスの要求元とは別のノードにサービスがある場合
サービスの要求元とは別のノードにサービスがある場合,サービス要求をトランザクションにするかどうかを選択できます。
(a) TP1/EEがサーバUAPで,TP1/Server BaseがクライアントUAPの場合
TP1/EEがサーバUAPで,TP1/Server BaseがクライアントUAPの場合,TP1/Server Base側で次に示す項目を設定する必要があります。
■ dc_rpc_call関数を使用してサービス要求をする場合
dc_rpc_call関数を使用してサービス要求をする場合のflags引数を次の表に示します。
RPCの種類 |
サービス要求 |
flags引数 |
---|---|---|
同期応答型 |
トランザクションにする場合 |
DCNOFLAGS |
トランザクションにしない場合 |
DCRPC_TPNOTRAN |
|
非同期応答型 |
トランザクションにする場合 |
DCRPC_NOWAIT |
トランザクションにしない場合 |
DCRPC_NOWAIT|DCRPC_TPNOTRAN |
|
非応答型 |
トランザクションにする場合 |
DCRPC_NOREPLY |
トランザクションにしない場合 |
DCRPC_NOREPLY|DCRPC_TPNOTRAN |
サービス要求先のTP1/EEでネームサービスを使用したくない場合は,次に示す定義を指定してください。ネームサービスへサービス情報を問い合わせないため,ネットワークに掛かる負荷を軽減できます。
- ユーザサービス定義のrpc_destination_modeオペランド
-
特に指定する必要はありません。デフォルト値(definition)のままとしてください。
- ユーザサービスネットワーク定義のdcsvgdef定義コマンドの-hオプション
-
TP1/EEのサービスグループ情報関連定義のmysvgdef定義コマンドの-hオプションで指定したホスト名およびポート番号と同じ値を指定してください。
■ dc_rpc_call_to関数を使用してサービス要求をする場合
dc_rpc_call_to関数を使用してサービス要求をする場合のdirection引数およびflags引数を次に示します。
- direction
-
DCRPC_DIRECT_SCHEDULE関数を使用して作成したDCRPC_BINDING_TBL構造体のアドレスを指定してください。
- flags
-
次の表に従ってflags引数を指定してください。
表3‒5 dc_rpc_call_to関数のflags引数 RPCの種類
サービス要求
flags引数
同期応答型
トランザクションにする場合
DCNOFLAGS
トランザクションにしない場合
DCRPC_TPNOTRAN
非同期応答型
トランザクションにする場合
DCRPC_NOWAIT
トランザクションにしない場合
DCRPC_NOWAIT|DCRPC_TPNOTRAN
非応答型
トランザクションにする場合
DCRPC_NOREPLY
トランザクションにしない場合
DCRPC_NOREPLY|DCRPC_TPNOTRAN
- DCRPC_DIRECT_SCHEDULE関数の引数
-
DCRPC_DIRECT_SCHEDULE関数の引数の設定を次に示します。
- nid
-
TP1/Server Baseのシステム共通定義のnode_idオペランドで指定したノード識別子と同じ値を指定してください。
- hostnm
-
TP1/EEのサービスグループ情報関連定義のmysvgdef定義コマンドの-hオプションで指定したホスト名およびポート番号と同じ値を指定してください。
- scdport
-
TP1/EEのサービスグループ情報関連定義のmysvgdef定義コマンドの-hオプションで指定したホスト名およびポート番号と同じ値を指定してください。
(b) TP1/Server BaseがサーバUAPで,TP1/EEがクライアントUAPの場合
TP1/Server BaseがサーバUAPで,TP1/EEがクライアントUAPの場合,TP1/EE側で次に示す項目を設定する必要があります。
■ ee_rpc_call関数を使用してサービス要求をする場合
ee_rpc_call関数を使用してサービス要求をする場合のflags引数を次の表に示します。
RPCの種類 |
サービス要求 |
flags引数 |
---|---|---|
同期応答型 |
トランザクションにする場合 |
EENOFLAGS |
トランザクションにしない場合 |
EERPC_TPNOTRAN |
|
非同期応答型 |
トランザクションにする場合 |
EERPC_NOWAIT |
トランザクションにしない場合 |
EERPC_NOWAIT|EERPC_TPNOTRAN |
|
非応答型 |
トランザクションにする場合 |
EERPC_NOREPLY |
トランザクションにしない場合 |
EERPC_NOREPLY|EERPC_TPNOTRAN |
■ ee_rpc_call_to関数を使用してサービス要求をする場合
ee_rpc_call_to関数を使用してサービス要求する場合のdirection引数およびflags引数を次に示します。
- direction
-
EERPC_BINDING_TBL構造体のアドレスを指定してください。
- flags
-
次の表に従ってflags引数を指定してください。
表3‒7 ee_rpc_call_to関数のflags引数 RPCの種類
サービス要求
flags引数
同期応答型
トランザクションにする場合
EENOFLAGS
トランザクションにしない場合
EERPC_TPNOTRAN
非同期応答型
トランザクションにする場合
EERPC_NOWAIT
トランザクションにしない場合
EERPC_NOWAIT|EERPC_TPNOTRAN
非応答型
トランザクションにする場合
EERPC_NOREPLY
トランザクションにしない場合
EERPC_NOREPLY|EERPC_TPNOTRAN
- EERPC_BINDING_TBL構造体の引数
-
次の表に従ってEERPC_BINDING_TBL構造体の引数を設定してください。
表3‒8 EERPC_BINDING_TBL構造体の引数 サービス要求先の特定方法
EERPC_BINDING_TBL構造体の引数
nid
hostnm
portno
flags
ノード識別子を指定
TP1/Server Base(サーバ)側のサービス受信口となるノード識別子
NULL
0
EENOFLAGS
ネームサーバを指定
NULL
TP1/Server Base(サーバ)側のサービス受信口となるホスト名
TP1/Server Base(サーバ)側のネームサービスのポート番号
EERPC_NAMPORT
スケジュールサービスのポートを指定
NULL
TP1/Server Base(サーバ)側のサービス受信口となるホスト名
TP1/Server Base(サーバ)側のスケジュールサービスのポート番号
EERPC_SCDPORT
(2) 自ノード内でサービスを実行する場合
サービス要求先とサービス要求元が同じノード内にある場合に,RPC関連定義のrpc_connect_unixdomainオペランドの指定を省略するか,またはYを指定すると,サービス要求元はUNIXドメインプロトコルを通して,UNIXドメインソケットを使用してサービス要求をします。UNIXドメインを使用すると,通信性能が上がります。このため,通常はrpc_connect_unixdomainオペランドの指定を省略するか,またはYを指定してください。ただし通信性能が向上することで,TCP/IPのバッファが不足したり,バッファ不足に伴うリトライが多発したりして,全体の性能が低下するおそれがあります。そのような場合に,rpc_connect_unixdomainオペランドにNを指定すると,通信性能は低下しますが,全体の性能は良くなることがあります。
なお,TP1/EEでは,RPC関連定義のrpc_multi_tp1_in_same_hostオペランドの指定に従い,UNIXドメインソケット用のパス名を生成します。
(a) TP1/Server BaseとRPC通信する場合
TP1/EEがサーバUAPでTP1/Server BaseがクライアントUAPの場合,またはTP1/Server BaseがサーバUAPでTP1/EEがクライアントUAPの場合,次に示すオペランドの指定値を同一にしておく必要があります。
-
TP1/EEのRPC関連定義のrpc_multi_tp1_in_same_hostオペランド
-
TP1/Server Baseのシステム共通定義のrpc_multi_tp1_in_same_hostオペランド
(b) サーバUAPとクライアントUAPが共にTP1/EEの場合
サービス要求先とサービス要求元のRPC関連定義のrpc_multi_tp1_in_same_hostオペランドの指定値を同一にしておく必要があります。