技術情報に関して更新します。(月1更新予定)

2017年11月1日水曜日

~非同期会話と同期会話~
IBM i のSNA通信 (APPCプログラミング編)

0 件のコメント :
APPC通信に限らず、ブロック単位でのプログラム同志の会話は基本的に「非同期」で行われます。つまり、送信側プログラムが送信操作を行っても、通常はその送信データはバッファに溜められ、通信プロトコルやバッファの大きさにによって異なりますが、次の送信データがバッファに到着する、バッファが一杯になる、明示的なバッファ内のデータの送信コマンドが出されるなどした時に、送信データは通信相手プログラムに送られ、相手側の受信用バッファに入れられます。
通信プログラムは、送信データをバッファに溜めずに、強制的に相手に送ることもできますが、通信相手がそのデータを受信バッファから受け取るかどうか(データ受信待ちでデータを受け取るタイミングにあるか)は、相手プログラムによります。また、送信データをバッファ内に溜めることなく強制的に相手に送ったとしても、送信側プログラムは送信操作が終了すると、停止することなく次の処理を行います。(受信側プログラムの受診バッファが一杯になった時は、送信できずに送信操作で停止します。)このように、プログラム同志の会話は非同期で行われています。

APPC通信プロトコルでは、「同期会話」を使用することができます。これは、送信側のプログラムのデータ送信操作を、受信側のプログラムのデータ受信、受信側プログラムからの肯定・否定応答の受け取りまで完了させず、実行を抑止して待機させる機能です。これによって、送信側プログラムと受信側プログラムのデータ送受信操作を1つの動作として同期させることができるようになります。

「同期会話」は、起動側プログラムが遠隔システム開始要求を送るときに、「この通信会話では同期会話を使用する」ことをオプションで宣言し、データの送信操作を行うときに、「これは確認を要求する送信操作」を明示することで行います。たとえ同期会話で通信会話を行うと指定しても、データ送信時に「確認要求」を指定しなければ、その送信操作は非同期でおこなわれます。

実際に「同期会話」を使用するためには、ICFファイル用のDDSで必要なキーワードを指定します。起動側プログラムでは、遠隔プログラムの開始要求である「EVOKE」キーワードと一緒に「SYNLVL(*CONFIRM)」キーワードを指定してあげます。受動側のプログラムが、この遠隔プログラム開始要求を受け入れれば「同期会話」は使用可能になりますので、起動側/受動側を問わす、送信操作の段階で「CONFIRM」キーワードを付けて送信操作を行うと、それまでバッファに入っていた送信データとともに送信操作でのデータが相手に送られ、その送信操作は相手からの肯定/否定応答が返ってくるまで完了が抑止されることになります。

0 件のコメント :

コメントを投稿