(57)【要約】      （修正有）【課題】クライアントサーバ型のアプリケーション開発において、実装に依存しないプログラム開発を可能とする。【解決手段】クライアントサーバ型システムにおいて、アプリケーションインタフェースを６つのインタフェース関数と４つの通信データで構築する。クライアントプロセスから処理要求データをサーバ親プロセスに送信し、サーバ親プロセスは、処理要求データを受信しサーバ子プロセスを生成し、処理要求データをサーバ子プロセスに送信する。サーバ子プロセスは処理要求データを受信し、クライアントブロセスは送信データをサーバ子プロセスに送信し、サーバ子プロセスは送信データを受信し、処理を行い、その処理結果の処理応答データと受信データとをクライアントプロセスに送信し、クライアントプロセスは処理応答データと受信データとを受信する。【選択図】図１
2006048595.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェア上のクライアントサーバ型システムにおいて、処理要求送信、処理要求受信、処理応答送信、処理応答受信、データ送信、データ受信の6つのインタフェース関数と、処理要求データ、処理応答データ、送信データ、受信データの4つの通信データから構築され、
クライアント・プロセスから処理要求データを処理要求送信関数にてサーバ・親プロセスに送信し、サーバ・親プロセスは、処理要求データを処理要求受信関数にて受信し、サーバ・子プロセスを生成し、処理要求データを処理要求送信関数にてサーバ・子プロセスに送信し、サーバ・子プロセスは処理要求データを処理要求受信関数にて受信し、クライアント・プロセスは送信データをデータ送信関数にてサーバ・子プロセスに送信し、サーバ・子プロセスは送信データをデータ受信関数にて受信し、処理を行い、その処理結果の処理応答データを処理応答送信関数、受信データをデータ送信関数にてクライアント・プロセスに送信し、クライアント・ブロセスは処理応答データを処理応答受信関数、受信データをデータ受信関数にて受信する、タスクプロトコルを適用したクライアントサーバ間で通信を行うためのアブリケーション・インタフェース。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア・プログラム、殊にクライアントサーバ間のインタフェースを規定したアプリケーション・プログラムの実装方法に関するものである。
【背景技術】
【０００２】
クライアントサーバ型アプリケーション・プログラムのソフトウェア開発において、一般に、アプリケーション・プログラム間のインタフェースは、直接には互いに通信し合うことはできず、システム・コールと呼ぱれる、オペレーション・システム（OS）の提供する機能を介して行われる。
システム・コールは、アプリケーション・プログラムからライブラリ関数を呼ぴ出すことにより、OSの機能であるカーネル関数を実行する。
例えば、UNlXオペレーション・システムでは、名前付きパイプ（FlFO）、共有メモリ、メッセージ・キューなどが用意されている。（尚，UNlXはエックス／オープン・カンパニー・リミテッドの登録商標である）
【０００３】
異なるアプリケーション・プログラム間のインタフェースには特別の規定はなく、アプリケーション開発者はOSにて提供される実装依存の機能を利用して実装毎に開発を行っている。特に、組み込み機器の開発等においては、標準的なオペレーション・システム機能が規定されておらず、実装毎にアプリケーション・プログラムを作り直す必要がある。
【０００４】
図４に示すようにタスクプロトコルは、異なるタスク間の情報のやりとりを、処理要求、処理応答、データ送受信の機能に分類し、処理要求送信関数、処理要求受信関数、処理応答送信関数、処理応答受信関数、デ−タ送信関数、データ受信関数の6つのタスクプロトコル・インタフェース関数と処理要求データ、処理応答データ、送信データ、受信データの4つの通信データから構築される。
【０００５】
ここで、データ送受信の方向には、クライアントからサーバ方向とサーバからクライアント方向の2方向がある。処理要求、処理応答、およぴ2方向のデータ送受信に実装依存の機能を適用することにより、6つのタスクプロトコル・インタフェース関数と実装依存の機能を使用してアプリケーション・インタフェースを実現する。
【０００６】
このように、アプリケーション・プログラムと実装依存の機能との間にタスクプロトコルを適用することにより、アプリケーション・ブログラム開発者は実装依存の機能を意織することなく開発を行うことができ、作成したソース・コードを改変することなぐ他の実装環境に移植することが可能となる。
【０００７】
これで、1対1の異なるアプリケーション間のインタフェースが実現するわけであるが、一般に、クライアントサーバ型システムは、複数クライアント対サーバのアプリケーション間インタフェースとなる。特に、複数のクライアントに対し、サーバが子プロセスを生成するモデルがある。
このように、サーバ・親プロセスはクライアントからの接続要求のみを監視し、実際の処理をサーバ・子プロセスに行わせることにより、処理負荷の分散を行う。
【特許文献１】特開平10-232788号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところが、従来のタスクプロトコルを適用したアブリケーション・インタフェースではこのようなクライアントサーバ型アプリケーションに対応していない。
本発明はクライアントサーバ間インタフェースにタスクプロトコルを適用することにより、実装に依存しないアプリケーション・プログラム開発を可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
上述の目的を達成するため本発明に係わるクライアントサーバ間で通信を行うためのアプリケーション・インタフェースは、
ソフトウェア上のクライアントサーバ型システムにおいて、処理要求送信、処理要求受信、処理応答送信、処理応答受信、データ送信、データ受信の6つのインタフェース関数と処理要求データ、処理応答データ、送信データ、受信データの4つの通信データから構築され、クライアント・プロセスから処理要求データを処理要求送信関数にてサーバ・親プロセスに送信し、サーバ・親プロセスは、処理要求データを処理要求受信関数にて受信し、サーバ・子プロセスを生成し、処理要求データを処理要求送信関数にてサーバ・子プロセスに送信し、サーバ・子プロセスは処理要求データを処理要求受信関数にて受信し、クライアント・ブロセスは送信データをデータ送信関数にてサーバ・子プロセスに送信し、サーバ・子プロセスは送信データをデータ受信関数にて受信し、処理を行い、その処理結果の処理応答データを処理応答送信関数、受信データをデータ送信関数にてクライアント・プロセスに送信し、クライアント・プロセスは処理応答データを処理応答受信関数、受信データをデータ受信関数にて受信する、タスクプロトコルを適用したものである。
【発明の効果】
【００１０】
本発明は、アプリケーションプログラム開発者が、実装に依存すること無くクライアント・サーバ型アプリケーションプログラムを開発する上で著しい効果を発揮する。
【発明を実施するための最良の形態】
【００１１】
以下、本発明を実施例に基づいて詳細に説明する。
図2およぴ図3に示すように、クライアント・アプリケーション・プログラムとサーバ・アプリケーション・プログラムがあり、クライアント・アプリケーション・プログラムは、サーバ・アプリケーション・プログラムにコマンド実行を要求し、実行結果を受け取るものとする。
【００１２】
最初に、クライアントサーバ型アプリケーション・インタフェースにタスクプロトコルを適用する。
図1に示すように、クライアント・プロセスに対し、クライアント要求の受付のみを行うサーバ・親プロセスと、それぞれのクライアント・プロセスに対応するサーバ・子プロセスから構成され、図４に示される6つのタスクプロトコル・インタフェ一ス関数と4つの通信データにより、クライアントサーバ型アプリケーション・インタフェースを実現する。
【００１３】
つぎに、アブリケーション・プログラムの処理関数にタスクプロトコルを適用する。
クライアント・アプリケーションのコマンド実行関数client( )を図５に示すタスクプロトコルの6つの関数で実装する。コマンドの送信をsend_request( )関数で、データの送信をsend−data( )関数で、実行結果の受信をrecv_result( )関数で、データの受信をrecv_data( )関数にて実装する。
【００１４】
図６に示すように、処理要求データrequestの内容には、コマンド名request.commandと送信データのサイズrequest.lengthを、処理応答データresultの内容には実行結果result.resultと受信データのサイズresult.lengthを含める。送信データおよぴ受信データは可変長の任意のデータとする。
【００１５】
サーバ・アプリケーションの親プロセスの処理関数parent( )を図５に示すタスクプロトコルの6つの関数で実装する。
処理要求データをrecv_result( )関数で、処理要求データの子プロセスへの送信をsend_request( )関数で実装する。
【００１６】
サーバ・アブリケーションの子ブロセスの処理関数child( )を図５に示すタスクプロトコルの6つの関数で実装する。
処埋要求データの受信をrecv_request( )関数で、データの受信をrecv_data( )関数で、実行結果の送信をsend_result( )関数で、データの送信をsend−data( )関数にて実装する。
最後に、タスクプロトコル・インタフェース関数を実装依存機能にて実装する。
【００１７】
この実施例では、OSのプロセス間通信機能としてUNlXオペレーション・システムの名前付きパイプ（FlFO）機能を利用するものとする。
タスクブロトコル・インタフェース関数の実装例を図７に示す。送信はFIFOへの書き込みを行うwrite( )関数、受信はFlFOからの読み出しを行うread( )関数にて実装する。これらの関数の引数のファイル記述子には、アクセスしたいFlFOのファイル記述子を指定する。FlFOはクライアント・プロセスからサーバ・親プロセス方向にSERVER_PlPE、サーバ・親プロセスからサーバ・子プロセス方向にCHlLD_PlPE、クライアント・プロセスからサーバ・子プロセス方向にSANDDAlA_PlPE、サーバ・子プロセスからクライアント・プロセス方向にCLIENT_PIPEおよび、RECVDATA_PlPEとする。
【００１８】
クライアント・アプリケーション・プログラムの実装例を図2に、サーバ・アプリケーション・プログラムの実装例を図3に示す。それぞれの図では、C言語に似た記述となっている。実装した結果、クライアントサーバ間アプリケーション・インタフェースがどのように動作するかを説明する。
【００１９】
サーバ・親ブロセスは、server( )関数を実行し、クライアントからの処理要求を監視する。実装レベルではSERVER_PlPEの読み取り待ちとなる。
クライアント・プロセスが、client( )関数を実行すると、処理要求データをサーバへ送信する。実装レベルでは、処理要求データをSERVER_PlPEへ書き込む。続いて、サーバヘ送信データを送信する。実装レベルではSENDDATA_PIPEに送信データを書き込む。その後、サーバからの処理応答データの受け取り待ちとなる。実装レベルでは、CLIENT_PlPEの読み取り待ちとなる。
【００２０】
サーバ・親プロセスはクライアントからの処理要求データを読み取ると、子プロセスを起動する。実装レベルではSERVER_PlPEより、処理要求データを読み出し、子プロセスを起動する。起動した子プロセスはchild( )関数を実行し、親プロセスからの処理要求待ちとなる。実装レベルでは、CHlLD_PIPEの読み取り待ちとなる。
続いてサーバ・親プロセスは、受信した処理要求データを子プロセスに送信する。実装レベルでは、処理要求データをCHlLD_PlPEに書き込む。サーバ・子プロセスは親プロセスから処理要求データを受信し、続いて、クライアントより送信データを受信する。実装レベルではCHlLD_PlPEより処理要求データを、SENDDATA_PIPEより送信でへ他をそれぞれ読み出す。
【００２１】
サーバ・子プロセスは処理要求で経たと送信データの内容から、任意の処理を実行する。処理完了後、実行結果を処理応答データとして受信データと共にクライアントへ送信する。実装レベルでは、処理応答データをCLIENT_PlPEに、続いて受信データをRECVDATA_PIPEにそれぞれ書き込む。
【００２２】
クライアント・プロセスは、サーバからの実行結果をもとに処理を続ける。実装レベルではCLIENT_PlPEから処理応答データを、続いてRECVDATA_PIPEより受信データを読み取り、client( )関数の応答とする。
【００２３】
尚、以上本発明をUNIXオペレーションシステム上の名前つきパイプ(FIFO)機能に適用したものを説明したが本発明はこれのみに限定されるものでは無く、他のアプリケーション間通信機能であってもよい。
【図面の簡単な説明】
【００２４】
【図１】アプリケーション・インターフェイスを示す図。
【図２】クライアントプログラムへのタスクプロトコル実装を説明する図。
【図３】サーバプログラムへのタスクプロトコル実装を説明する図。
【図４】タスクプロトコル・インターフェイス関数を示す表。
【図５】６つのタスクプロトコル・インターフェイス関数を示す表。
【図６】４つの通信データを示す表。
【図７】タスクプロトコルのFIFO実装を示す表。
【図１】
2006048595.tif 000003
【図２】
2006048595.tif 000004
【図３】
2006048595.tif 000005
【図４】
2006048595.tif 000006
【図５】
2006048595.tif 000007
【図６】
2006048595.tif 000008
【図７】
2006048595.tif 000009