以下、本発明を実施するための最良の形態を図面に基づいて説明する。なお、以下に説明する第1〜9の実施の形態は、特許請求の範囲に係る発明を限定するものではなく、また、第1〜9の実施の形態に係る特徴事項の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
[第1の実施の形態]
図1は、本発明の第1〜3,7の実施の形態に係るセッション管理システムを適用したクライアント/サーバシステムのソフトウェアの構成を示す図である。
図1において、クライアントPC(クライアント端末)100とサーバPC105は、ネットワーク106を介して接続されている。本実施の形態では、ネットワーク106としては、LANやWANを想定しているが、これ以外のネットワークを用いることも可能である。また、クライアントPC100とサーバPC105は、ネットワーク106を介して接続されることなく、IEEE1394、IEEE1284などの規格に係るインタフェース(ケーブル)で接続することも可能である。
また、第1〜7の実施の形態では、クライアントPC100としては、プリンタ、MFP(マルチファンクション・プリフェラル)を想定している。だだし、ネットワーク通信機能を有する携帯型情報端末、スキャナ装置、ファクシミリ装置等の各種の機器にも第1〜8の実施の形態に係る特徴事項を適用することが可能である。
クライアントPC100には、クライアントアプリケーション101,101aが搭載されている。ただし、1つ又は3つ以上のクライアントアプリケーションが搭載されている場合にも第1の実施の形態を適用することができる(第2〜7の実施の形態も同様)。
クライアントアプリケーション101,101aは、それぞれ対応するスタブオブジェクト102,102aを利用して通信を行う。この際、実際の通信処理は、クライアントプロセス間通信部103によって行われる。
クライアントプロセス間通信部103は、オペレーティングシステムの通信ライブラリ104aを用いてサーバPC105と通信を行う。なお、通信ライブラリ104aには、ソケット(IPアドレス+ポート番号)通信以外に、RPC(Remote Procedure Call)やLPC(Local Procedure Call)、Webサービス等による通信も含まれている。
サーバPC105では、サーバアプリケーション108が動作している。サーバアプリケーション108は、サーバプロセス間通信部107を用いて通信を行う。サーバプロセス間通信部107は、通信ライブラリ104bに基づいて、ネットワーク106を介してクライアントPC100と通信を行う。なお、サーバアプリケーション108は、1つであっても複数であってもよい。
上記のように、クライアントアプリケーション101,101aとサーバアプリケーション108との間の実際の通信処理は、クライアントプロセス間通信部103とサーバプロセス間通信部107により行なわれる。この実際の通信処理には、一連の要求/応答に係るセッション管理処理も含まれる。換言すれば、クライアントプロセス間通信部103、サーバプロセス間通信部107により、本発明に特有なセッション管理処理が行われる。
なお、図1のクライアント/サーバシステムは、クライアントとサーバが共にPC(コンピュータ)で構成されている。しかし、他のネットワークデバイス、通信機能を有する情報処理装置、周辺装置等で構成されたクライアント/サーバシステムに第1〜第3の実施の形態を適用してもよい。この場合、クライアントPC100又はサーバPC105でのプログラムの動作を、これ以外のネットワークデバイス等のCPU、ROM、RAM等を用いて実行するように構成すればよい。
クライアントPC100、サーバPC105は、図2に示したようなハードウェアで構成のコンピュータ2000により実現される。
このコンピュータ2000は、本体制御部200と、その周辺機器としてのキーボード209、表示装置210、外部メモリ211を有している。本体制御部200は、CPU201、RAM202、ROM203、キーボード制御部205、表示制御部206、ディスク制御部207、及びネットワーク制御部208を有している。
CPU201は、システムバス204に接続された各デバイスを統括的に制御する。このCPU201は、ROM203のプログラム用ROM203b、或いは外部メモリ(HD)210に記憶されたアプリケーション(文書処理プログラム又はサービス提供プログラム等)に基づいて、文書処理又はサービス提供処理等の各種処理を実行する。
なお、文書処理プログラムは、図形、イメージ、文字、表(表計算等を含む)等が混在した文書処理を行うものである。また、クライアントPC100における外部メモリ210には、文書処理に係るアプリケーションだけでなく、静止画や動画に係る画像情報、音楽情報、音情報を含む映像情報等の各種の情報を取得・処理するためのアプリケーションを格納してもよい。
また、CPU201は、例えばRAM202上に設定された表示RAMへのアウトラインフォントの展開(ラスタライズ)処理を実行し、表示制御部206を介して文字列を表示装置210に表示する。更に、CPU201は、この表示装置210上のマウスカーソル(図示略)等で指示されたコマンドに基づいて、種々のウインドウを開いて種々のデータ処理等又はサービス提供処理等を実行する。ユーザは、クライアントアプリケーション101,101aやサーバアプリケーション108を使用する際、そのアプリケーションの設定操作等に関するウインドウを開き、このウインドウ上で各種の設定を行うことができる。なお、表示装置210としては、CRT表示装置、液晶表示装置、プラズマ表示装置等を用いることができる。
RAM202は、CPU201の主メモリ、ワークエリア等として利用される。ROM203は、フォント用ROM203a、プログラム用ROM203b、データ用ROM203cにより構成されている。
フォント用ROM203a、外部メモリ211は、文書処理又はサービス提供処理等を行う際に使用するフォントデータ等を記憶している。プログラム用ROM203b、外部メモリ211は、CPU201の制御プログラムであるオペレーティングシステム等を記憶している。データ用ROM203c、外部メモリ211は、文書処理又はサービス提供処理等を行う際に使用する各種データ(プログラムを含む)を記憶している。なお、外部メモリ211に記憶されているプログラムは、実行時にはRAM202に展開される。
キーボード制御部205は、キーボード209やポインティングデバイス(不図示)からの入力データ、コマンドを制御する。表示制御部206は、表示装置210の表示動作を制御する。ディスク制御部207は、外部メモリ211に対するアクセスを制御する。
ネットワーク制御部208は、双方向性インタフェース212を介してネットワーク106に接続されている。このネットワーク制御部208は、図1に示したクライアントプロセス間通信部103又は107、通信ライブラリ104a又は104bに基づいてネットワークやセッションの接続、切断処理等を行う。
キーボード209は、各種のデータ、コマンド等を入力するためのキーを備えている。表示装置210は、文書処理又はサービス提供処理等に係る各種の情報等を表示する。外部メモリ211は、ハードディスク(HD)、フレキシブルディスク(FD)等により構成されている。この外部メモリ211は、ブートプログラム、各種のアプリケーション、フォントデータ、ユーザファイル、編集ファイル等を記憶している。なお、外部メモリ211は、アプリケーションとして、後述する図6〜図13に係るフローチャート、シーケンスチャートに係る制御プログラムも記憶している。
図3は、サーバPC105のサーバプロセス間通信部107の詳細なソフトウェア構成を示すブロック図である。
サーバプロセス間通信部107は、サーバプロセス間通信制御部301、サーバ識別子返信部302を有し、クライアントPC100からの通信リクエストに応答する。即ち、サーバプロセス間通信制御部301は、クライアントPC100からのリクエストに応じて、サーバ識別子返信部302によりサーバ識別子504(図5参照)を返信したり、サーバアプリケーション108で作成された返信データを返信したりする。このサーバ識別子504の返信処理の詳細は、後述する。
図4は、クライアントPC100のクライアントプロセス間通信部103の詳細なソフトウェア構成を示すブロック図である。なお、図4では、図1で説明したスタブオブジェクト102及び102aの記載は省略している(図15、図24も同趣旨)。図4に示したように、クライアントプロセス間通信部103は、プロセス間通信制御部401、サーバ識別子取得部402、セッション管理部403、DB(データベース)管理部405、セッション切断管理部407、セッション再接続管理部409を有している。さらに、クライアントプロセス間通信部103は、セッション判定部404、セッション管理情報DB406、接続リファレンスカウント記憶部408を有している。
クライアントプロセス間通信部103は、プロセス間通信制御部401の制御の下にセッションの管理を行い、クライアントアプリケーション101,101aとサーバアプリケーション108との間の通信動作を制御する。サーバ識別子取得部402は、サーバPC105のサーバ識別子返信部302により返信されたサーバ識別子504を取得する。このサーバ識別子504は、使用するセッションを選択するために利用される。
セッション管理部403は、セッション情報の作成処理を行ったり、セッション管理情報DB406の中から一部の管理情報を削除するか否かを判断したりする。セッション判定部404は、接続要求時に指定された宛先アドレスと異なる宛先アドレスに係る既存セッションの中で、サーバ識別子504(サーバ特定用情報)で特定されるサーバが一致するものが存在するか否かを判定する。換言すれば、セッション判定部404は、新たにセッショションを確立して通信を行うか、或いは既存セッションを利用して通信を行うかを判定する。
DB管理405は、セッション管理情報DB406(図5参照)に対するアクセスを制御する。セッション切断管理部407は、接続リファレンスカウントに基づいてセッションの切断管理を行う。接続リファレンスカウント記憶部408は、接続リファレンスカウントを記憶する。この接続リファレンスカウントは、セッションをクローズするタイミングを決定するために利用される。セッション再接続管理部409は、通信エラーが発生したセッションで行っていた通信を、別のアドレス(ソケット)で再接続して行うための制御を行う。
図5は、セッション管理情報DB406に登録されているセッション管理情報を例示した図である。アプリケーション識別子501は、接続(コネクト)を要求したクライアントアプリケーション101,101aを識別する識別子(インスタンスハンドル)である。
要求アドレス情報502は、クライアントアプリケーション101,101aが接続を要求する際に宛先として指定した宛先アドレスである。この宛先アドレスは、IPアドレス502aとポート番号502bを含んでいる。通信アドレス情報503は、上記の宛先アドレスに基づいて既存セッションの利用可能性を判断した結果、実際に通信を行うものとして選択されたセッションに係る接続先(サーバPC105)のアドレスである。この通信アドレスは、IPアドレス503aとポート番号503bを含んでいる。
なお、通信アドレス情報503には、IPアドレス503a、ポート番号503b以外に、ポート番号503bの代替情報としてのエンドポイント、或いはIPアドレス503a及びポート番号503bの代替情報としてのチャネル情報を含んでいてもよい。
サーバ識別子504は、接続要求元のクライアントアプリケーション101,101aが宛先(アドレス、ポート番号等)に基づいてサーバPC105に要求して取得したサーバ識別子(インスタンスハンドル)である。セッション番号505は、接続要求元のクライアントアプリケーション101,101aと、接続先のサーバアプリケーション108との間で行なわれる一連の要求/応答(データ転送)に係るセッションを互いに識別するために付与される識別番号である。
次に、サーバPC105のサーバプロセス間通信部107が行うセッション管理処理を、図6のフローチャートに基づいて説明する。
サーバプロセス間通信部107のサーバプロセス間通信制御部301は、クライアントPC100から接続要求を受けると、サーバ識別子返信部302により、サーバ識別子504を作成させる(ステップS601)。このサーバ識別子504としては、UUID(Universally Unique Identifier)など、一意に特定できる識別子を用いる。これ以後、サーバPC105のサーバプロセス間通信部107は、パケットを受信したソケットのIPアドレスやポート番号の如何を問わず、同一のサーバ識別子504を返信する。
次に、サーバプロセス間通信制御部301は、クライアントPC100からのパケットを通信ライブラリ104bを介して受信する(ステップS602)。そして、サーバプロセス間通信制御部301は、クライアントPC100から受信したパケットが、サーバ識別子504の取得要求に係るパケットであるか否かを判別する(ステップS603)。
その結果、サーバ識別子504の取得要求に係るパケットであれば、サーバプロセス間通信制御部301は、ステップS601でサーバ識別子返信部302により生成されたサーバ識別子504を、サーバ識別子504の取得要求元のクライアントPCに返信する。この処理は、ステップS604で行われる。この場合、サーバ識別子504は、返信パケットとして、通信ライブラリ104bを利用してネットワーク106経由でクライアントPC100に返信される。
次に、サーバプロセス間通信制御部301は、サービス終了の指示の有無を判別し(ステップS608)、サービス終了の指示が無ければ、ステップS602に戻ることにより、サービス提供を続行する。
一方、受信パケットがサーバ識別子504の取得要求に係るパケットでない場合は、サーバプロセス間通信制御部301は、受信パケットが新規データの受信要求(取得要求)に係るパケットであるか否かを判別する(ステップS605)。
その結果、新規データの取得要求に係るパケットであれば、サーバプロセス間通信制御部301は、クライアントPC100にデータ転送を行なうためのソケットを作成する(ステップS606)。このソケット作成処理は、通信ライブラリ104bを利用して、通信プロトコルとしてのTCPプロトコルのaccept処理により行われる。
サーバプロセス間通信制御部301は、ステップS606の処理の後は、ステップS607に進む。一方、新規データの受信要求(取得要求)に係るパケットでなければ、サーバプロセス間通信制御部301は、ステップS606のソケット作成処理をスキップして、ステップS607に進む。
ステップS607では、サーバプロセス間通信制御部301は、ステップS602で受信したパケットに係るサービス処理を、サーバアプリケーション108により実行させる。即ち、サーバプロセス間通信制御部301は、クライアントPC100からの受信データをサーバアプリケーション108に転送し、サーバアプリケーション108は、クライアントPC100からの要求に従って返信データを作成する。さらに、サーバアプリケーション108は、作成した返信データをサーバプロセス間通信制御部301に転送する。サーバプロセス間通信制御部301は、通信ライブラリ104bを利用して、ネットワーク106を経由してクライアントPC100に返信データを返信する。そして、サーバプロセス間通信制御部301は、上記のステップS608の処理を行う。
次に、クライアントPC100のクライアントプロセス間通信部103が行うセッション管理処理を、図7のフローチャートに基づいて説明する。なお、本フローチャートの処理は、直接には、プロセス間通信制御部401が行う(図10、図12、図18、図20、図21、図26も同様)。
クライアントプロセス間通信部103のプロセス間通信制御部401は、サーバPC105のサーバアプリケーション108に対する接続要求を受け付ける(ステップS701)。この接続要求は、クライアントアプリケーション101,101aから行われるものである。
次に、プロセス間通信制御部401は、上記の宛先アドレスに応じてサーバPC105から返信されて来るサーバ識別子504を、サーバ識別子取得部402を介して取得する(ステップS702)。即ち、サーバ識別子取得部402は、プロセス間通信制御部401の制御の下に、通信ライブラリ104aを利用し、ネットワーク106経由でサーバPC105にサーバ識別子504の取得要求情報を送信する。また、サーバ識別子取得部402は、プロセス間通信制御部401の制御の下に、サーバPC105からのサーバ識別子504を取得する。
次に、セッション管理部403は、プロセス間通信制御部401の制御の下に、ステップS702で取得したサーバ識別子504と同一のサーバ識別子504に係る既存のセッションが存在するか否かを判別する(ステップS703)。
この場合、セッション管理部403は、DB管理部405により、セッション管理情報DB406からセッション管理情報を取得する。そして、セッション管理部403は、取得したセッション管理情報について、別のアドレスで通信中の既存セッションの中に、今回の接続要求時に取得したサーバ識別子504と同一のサーバ識別子504に係る既存セッションが存在するか否かを判定する。この判定処理は、実際には、セッション判定部404が行う。
図5のセッション管理情報の例では、管理番号「1」と管理番号「2」の通信は、クライアントアプリケーション101,101aからの異なるアドレスに対する接続要求である。しかしながら、これらの通信のそれぞれは同一のサーバPC105との間で実行される。従って、同一のサーバPC105と通信を行うにも拘わらず、複数のセッションを作成することは効率的ではないため、ここでは1つのセッションを用いて管理番号「1」と管理番号「2」のそれぞれの通信を実行するようにする。
つまり、例えば先に管理番号「1」の通信が開始された状態で管理番号「2」の通信を開始しようとする場合は、プロセス間通信制御部401は、新規のセッションを作成しない。その代わり、プロセス間通信制御部401は、管理番号「1」の既存セッションを管理番号「2」の通信のデータ転送用のセッションとして選択する(ステップS707)。そして、プロセス間通信制御部401は、後述するステップS708に進む。
なお、既存セッションを選択した場合は、UDPプロトコル(非コネクション型プロトコル)通信においては当該セッションを切断する必要はないが、TCP(コネクション型プロトコル)通信においては当該セッションを切断する必要がある。これは、図10、図12のステップS707においても同様である。
今回取得したサーバ識別子504と同一のサーバ識別子504に係る既存セッションが存在しない場合は、セッション管理部403は、新規セッションを確立するために新規ソケットを作成する(ステップS704)。この場合、セッション管理部403は、通信ライブラリ104aを利用して、クライアントアプリケーション101,101aからの宛先アドレスで新規ソケットを作成する。
次に、セッション管理部403は、新規ソケットを含む新規セッションの情報を、DB管理部405により、セッション管理情報DB406に登録させる(ステップS705)。そして、プロセス間通信制御部401は、クライアントアプリケーション101,101aからの宛先アドレスに基づく新規セッションを、今回のデータ転送用のセッションとして選択する(ステップS706)。
次に、プロセス間通信制御部401は、ステップS706、又はステップS707で選択されたセッションにより、クライアントアプリケーション101,101aからのデータをサーバアプリケーション108に転送する(ステップ708)。
なお、データ転送用のセッションとして新規セッションが選択された場合は、ステップS704〜S708では、クライアントアプリケーション101,101aからの宛先アドレスと、実際に通信を行う通信アドレスが同一になる。このように新規セッションで通信を行う処理は、従来からのプロセス間通信技術であるRPC(Remote Procedure Call)などの通信処理と同じである。
一方、既存セッションが選択された場合は、クライアントアプリケーション101,101aからの宛先アドレスと、実際に通信を行う通信アドレスが異なる。しかし、今回の接続要求時にステップS702で取得したサーバ識別子504と、既存セッションのサーバ識別子504とは一致している。従って、当該クライアントPC100のクライアントプロセス間通信部103は、同一のサーバPC105のサーバプロセス間通信部107と通信を行うことが可能である。
そこで、本実施の形態では、ステップS707の処理では、今回の接続要求時に取得したサーバ識別子504と同一のサーバ識別子504に係る既存セッションを今回のデータ通信用のセッションとして選択している。この場合、クライアントアプリケーション101,101aからの宛先アドレスに基づいてデータ通信用に新規にソケット(セッション)が作成されることはない。
このように、新規にソケットを作成することなく、既存セッションで通信を行うことにより、クライアントPC100、サーバPC105は、通信ソケット数を低減できるなど、ネットワークリソースを節約することが可能となる。
次に、プロセス間通信制御部401は、クライアントアプリケーション101,101aからのクローズ要求、通信ライブラリ104aからの接続切断要求などの有無を判断する(ステップS709)。その結果、上記のクローズ要求、又は切断要求が無い場合は、プロセス間通信制御部401は、ステップS701に戻ることにより、ステップS701〜S709の処理を続行する。
一方、クローズ要求、切断要求の何れかが有る場合は、セッション管理部403は、通信ライブラリ104aにより、クローズ(切断)要求に係るアドレスのセッション、ソケットのクローズ処理などを行う(ステップS710)。そして、セッション管理部403は、ステップS710での処理結果に基づいて、DB管理部405により、セッション管理情報DB406上のセッション管理情報を更新する(ステップS711)。
次に、図6、図7の処理の具体例を、図8、図9のシーケンス図に基づいて説明する。図8は、上記の既存セッションが存在しない場合の処理シーケンスを示している。
図8のプロセスP801では、サーバプロセス間通信部107は、サーバアプリケーション108がサービスを開始すると、クライアントPC100からのパケット受信を行うListen処理を行う。また、サーバプロセス間通信部107は、ステップS601において、サーバ識別子504として用いるUUIDの生成処理を行う。
また、サーバプロセス間通信部107は、プロセスP801において、Listen処理でIPv4アドレス[10.0.0.10]、ポート番号[1025]での受信処理を行うべく受信ソケットを作成する。サーバプロセス間通信部107は、同様に、IPv6アドレス[2001::10]、ポート番号[1025]に係る受信ソケットも作成する。
プロセスP802では、クライアントアプリケーション101,101aは、クライアントプロセス間通信部103に対して、IPv4アドレス[10.0.0.10]、ポート番号[1025]への接続を要求する。プロセスP803では、この接続要求を受けて、クライアントプロセス間通信部103は、ステップS702のサーバ識別子504の取得処理を行う。プロセスP804では、サーバプロセス間通信部107は、ステップS604のサーバ識別子504の返信処理を行う。
なお、プロセスP803,P804のネゴシエーションにおいては、TCP通信に比べて信頼性は多少劣るが、高速通信が行えるUDP通信により行うのが望ましい。ただし、TCP通信でネゴシエーションを行っても良い。これは、後述する図9、図11、図13におけるネゴシエーションの場合も同趣旨である。
プロセスP805では、クライアントプロセス間通信部103は、ステップS703の処理、即ち、セッション管理情報に基づいて同一のサーバ識別子504に係る既存セッションの有無を判定する処理を行う。図8のシーケンス例では、この判定処理において既存セッションが無いと判定される。このため、プロセスP806では、ステップS704からステップS706の新規セッションの作成処理が行われる。
プロセスP807では、サーバプロセス間通信部107は、TCPのaccept処理により新規セッション用のソケットを作成する。プロセスP808では、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aに対して、プロセスP802での接続要求に係る接続処理の結果を返信する。
プロセスP809では、ステップS708の処理が行われる。すなわち、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aが指定したIPv4アドレス[10.0.0.10]、ポート番号[1025]に向けてデータ送信処理を行う。
この送信処理を受けて、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aからのデータ量に応じて、プロセスP810−1〜プロセスP810−nで、サーバPC105に向けてデータを転送する。
プロセスP811では、サーバプロセス間通信部107は、クライアントアプリケーション101,101aからデータを受信すると、サーバアプリケーション108に対してデータを転送する。プロセスP812では、クライアントプロセス間通信部103は、データ転送が完了した時点でクライアントアプリケーション101,101aに対してデータ転送の結果を通知する。
なお、プロセスP809〜P810−nにおける実際のデータ通信は、UDP通信に比べて低速ではあるが信頼性の高いTCP通信により行うのが望ましい。ただし、実際のデータ通信をUDP通信で行っても良い。これは、後述する図9、図11、図13におけるネゴシエーションの場合も同趣旨である。
プロセスP813では、クライアントアプリケーション101,101aからクライアントプロセス間通信部103に対して、IPv4アドレス[10.0.0.10]、ポート番号[1025]の切断(クローズ)を要求する。この切断要求を受けて、クライアントプロセス間通信部103は、ステップS710の切断処理を行う。
プロセスP814では、サーバプロセス間通信部107は、クライアントプロセス間通信部103からIPv4アドレス[10.0.0.10]、ポート番号[1025]の切断指示を受けて、セッションの切断処理を行う。プロセスP815では、クライアントプロセス間通信部103は、ステップS711の処理を行い、クライアントアプリケーション101,101aに対して当該セッションを切断した旨を通知する。
図9は、第1の実施の形態に係る既存セッションが存在する場合の処理シーケンスである。図9のプロセスP901では、サーバプロセス間通信部107は、サーバアプリケーション108がサービスを開始すると、クライアントからのパケットを受信すべく、Listen処理、及びステップS601のサーバ識別子(UUID)504の生成処理を行う。
また、サーバプロセス間通信部107は、プロセスP901では、Listen処理により、IPv4アドレス[10.0.0.10]、ポート番号[1025]での受信処理を行うべく受信ソケットを作成する。サーバプロセス間通信部107は、同様に、IPv6アドレス[2001::10]、ポート番号[1025]に係る受信ソケットも作成する。
プロセスP902では、クライアントアプリケーション101,101aは、クライアントプロセス間通信部103に対して、IPv4アドレス[10.0.0.10]、ポート番号[1025]への接続を要求する。プロセスP903では、この接続要求を受けて、クライアントプロセス間通信部103は、ステップS702のサーバ識別子504の取得処理を行う。プロセスP904では、サーバプロセス間通信部107は、ステップS604のサーバ識別子504の返信処理を行う。
プロセスP905では、クライアントプロセス間通信部103は、ステップS703の処理、即ち、セッション管理情報に基づいて、接続要求時のものと同一のサーバ識別子504に係る既存セッションの有無を判定する処理を行う。図9のシーケンス例では、プロセスP905の判定処理において既存セッションが無いと判定される。このため、プロセスP906では、ステップS704からステップS706の新規セッションの作成処理が行われる。
プロセスP907では、サーバプロセス間通信部107は、TCPのaccept処理により新規セッション用のソケットを作成する。プロセスP908では、クライアントプロセス間通信部103は、プロセスP802での接続要求に係る接続処理の結果を、クライアントアプリケーション101,101aに返信する。
プロセスP909では、ステップS708の処理が行われる。即ち、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aが指定したIPv4アドレス[10.0.0.10]、ポート番号[1025]に向けてデータ送信処理を行う。この送信処理を受けて、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aからのデータ量に応じて、プロセスP910−1〜プロセスP910−nで、サーバPC105に向けてデータを転送する。
プロセスP911では、サーバプロセス間通信部107は、クライアントアプリケーション101,101aから受信したデータを、サーバアプリケーション108に転送する。プロセスP912では、クライアントプロセス間通信部103は、データ転送が完了すると、その旨をクライアントアプリケーション101,101aに通知する。
プロセスP913では、クライアントアプリケーション101,101aは、クライアントプロセス間通信部103に対して、IPv6アドレス[2001::10]、ポート番号[1025]に対する接続を要求する。プロセスP914では、サーバプロセス間通信部107は、この接続要求をクライアントプロセス間通信部103から受けて、ステップS604のサーバ識別子504の返信処理を行う。この場合、クライアントアプリケーション101,101aは、IPv6アドレス[2001::10]、ポート番号[1025]に係るサーバ識別子504を取得することとなる。
プロセスP915では、クライアントプロセス間通信部103は、ステップS703の処理、即ち、セッション管理情報に基づいて、接続要求時のものと同一のサーバ識別子504に係る既存セッションの有無を判定する処理を行う。
図9のシーケンス例では、IPv6アドレス[2001::10]、ポート番号[1025]で取得したサーバ識別子「10」と同一の識別子が、既にセッションを確立しているIPv4アドレス[10.0.0.10]、ポート番号[1025]から返信される。従って、クライアントプロセス間通信部103は、同一の識別子に係る既存セッション[10.0.0.10]、ポート番号[1025]が有ると判定し、IPv6アドレス[2001::10]、ポート番号[1025]に対してセッションを確立しない。
以後、クライアントプロセス間通信部103は、IPv6アドレス[2001::10]、ポート番号[1025]に係るデータ転送処理は、IPv4アドレス[10.0.0.10]、ポート番号[1025]に対して行う。
即ち、プロセスP916では、クライアントアプリケーション101,101aは、クライアントプロセス間通信部103に対して、IPv6アドレス[2001::10]、ポート番号[1025]に対してデータ転送を要求する。
このデータ転送要求を受けて、クライアントプロセス間通信部103は、プロセスP917において、データ伝送要求時に指定されたIPv6アドレス[2001::10]、ポート番号[1025]と異なるアドレスである、既存セッションに係るIPv4アドレス[10.0.0.10]、ポート番号[1025]に対して要求に係るデータを転送する。
プロセスP918では、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aからのデータ量に応じて、データ転送が完了するまで必要な転送処理を既存のセッションで繰り返す。
プロセスP919では、サーバプロセス間通信部107は、クライアントアプリケーション101,101aから発送された受信データを、サーバアプリケーション108に転送する。プロセスP920では、クライアントアプリケーション101,101aは、クライアントプロセス間通信部103に対して、IPv4アドレス[10.0.0.10]、ポート番号[1025]の切断(クローズ)を指示する。この切断指示を受けて、クライアントプロセス間通信部103は、ステップS710の切断処理を行う。
プロセスP921では、サーバプロセス間通信部107は、クライアントプロセス間通信部103からの切断指示を受けて、IPv4アドレス[10.0.0.10]、ポート番号[1025]に係るセッションの切断処理を行う。
このように、第1の実施の形態では、クライアントアプリケーション101,101aから指示された宛先アドレスと異なるアドレスでサーバ識別子504が一致する既存セッションを、データ通信用のセッションとして用いる。
従って、ソケット等のネットワークリソースを効率的に使用したり、低減したりすることが可能となる。なお、この効果は、第2,第3の実施の形態においても同様に奏することができる。
[第2の実施の形態]
第1の実施の形態では、例えばクライアントアプリケーション101が、第1のセッションを切断した場合、第1のセッションを既存セッションとしてデータ通信に使用しているクライアントアプリケーション101aは、データ通信を行うことができなくなる。
しかし、例えば、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aからの接続要求、クローズ要求に対して、セッションの参照カウンタのみを増減するようにする。そして、クライアントプロセス間通信部103は、参照カウンタが「0」になったときに実際にセッションを切断するようにすれば、セッションを共有したとしても、セッションの切断時に問題が発生じることはない。
そこで、第2の実施の形態では、宛先アドレスとは異なるアドレスで確立された既存セッションでデータ送信を行う場合にも、既存セッションによる通信が他のアプリケーション101,101aからの切断指示で意に反して切断されないようにしている。
図10は、本発明の第2の実施の形態においてクライアントプロセス間通信103が行うセッション管理処理を示すフローチャートである。なお、第2の実施の形態に係るセッション管理システムの構成等は第1の実施の形態の場合と同様であるため、その説明は省略する(第3の実施の形態も同様)。また、図10において、ステップS701〜S711の処理は、図7のフローチャートにおけるステップS701〜S711の処理と同じであるため、その説明は必要に応じて行うに留める。
図10において、プロセス間通信制御部401は、ステップS1001では、ステップS706、又はステップS707で選択されたセッションのクローズ・リファレンス・カウンタの値を「+1」する。なお、このクローズ・リファレンス・カウンタは、上記の参照カウンタ、及び図4の接続リファレンスカウンタに相当するカウンタであり、切断要求数をカウントするものである。また、クライアントPC100のセッション切断管理部407は、各セッションのクローズ・リファレンス・カウンタの値を接続リファレンスカウント記憶部408に保存し、このクローズ・リファレンス・カウンタの値に基づいて各セッションの切断を判断する。
次に、プロセス間通信制御部401は、ステップS706、又はステップS707で選択されたセッションにより、クライアントアプリケーション101,101aからのデータをサーバアプリケーション108に転送する(ステップ708)。なお、ステップS707にて、宛先アドレスと異なるアドレスで確立された既存セッションが選択された場合は、データ転送を行う既存セッションのクローズ・リファレンス・カウンタの値を「+1」するだけで、新規セッションの作成は行われない。
次に、プロセス間通信制御部401は、クライアントアプリケーション101,101aからのクローズ要求、通信ライブラリ104aからの接続切断要求などの有無を判断する(ステップS709)。その結果、上記のクローズ要求、又は切断要求が無い場合は、プロセス間通信制御部401は、ステップS701に戻ることにより、ステップS701〜S709の処理を続行する。
一方、クローズ要求、切断要求の何れかが有る場合は、プロセス間通信制御部401は、セッション管理部403により、セッション切断管理部407に対してクローズ要求、切断要求に係るアドレスの当該セッションのクローズを要求させる(ステップS1002)。この場合、セッション切断管理部407は、接続リファレンスカウント記憶部408内の当該セッションのクローズ・リファレンス・カウンタの値を「−1」する(ステップS1002)。
次に、プロセス間通信制御部401は、クローズ・リファレンス・カウンタの値が「−1」されることにより、「0」になったか否かを判断する(ステップS1003)。その結果、「0」になっていなければ、プロセス間通信制御部401は、ステップS701に戻る。
一方、クローズ・リファレンス・カウンタの値が「0」になった場合は、プロセス間通信制御部401は、次のような処理を行う。すなわち、プロセス間通信制御部401は、セッション管理部403、及び通信ライブラリ104aにより、クローズ(切断)要求に係るアドレスのセッション、ソケットのクローズ処理などを行う(ステップS710)。そして、セッション管理部403は、ステップS710での処理結果に基づいて、DB管理部405により、セッション管理情報DB406上のセッション管理情報を更新する(ステップS711)。
次に、図10の処理の具体例を、図11のシーケンス図に基づいて説明する。なお、図11のシーケンスは、宛先アドレスと異なるアドレスで確立された既存のセッションでデータ送信を行う場合を示している。この場合、下記のようなシーケンスで、既存セッションによる通信が意に反して不能にならないように、既存セッションの切断を適切に行う場合を示している。
すなわち、プロセスP1101において、クライアントプロセス間通信部103は、ステップS706にて新規のセッションを確立したことにより、ステップS1001のクローズ・リファレンス・カウンタの値を「+1」する。このクローズ・リファレンス・カウンタは、接続要求に係る宛先アドレス毎に、その接続要求数及び切断要求数を係数するカウンタとして機能する。
プロセスP1102では、クライアントプロセス間通信部103は、ステップS707にて宛先アドレスと異なるアドレスで確立された既存のセッションを利用するために、新規セッションの作成は行わない。ただし、クライアントプロセス間通信部103は、ステップS1001のクローズ・リファレンス・カウンタの値を「+1」する処理を行う。
この時点で、接続リファレンスカウント記憶部408に記憶されているクローズ・リファレンス・カウンタの値は、サーバ識別子504が「10」のサーバPC105に対して「2」となる。実際の通信アドレスは、IPv4アドレスの[10.0.0.10]、ポート番号[1025]である。
また、宛先アドレスとしては、IPv4アドレス[10.0.0.10]、ポート番号[1025]の他に、IPv6アドレス[2001::10]、ポート番号[1025]があり、これらアドレスは、それぞれ接続状態で存在している。
プロセスP1103では、クライアントプロセス間通信部103は、IPv4アドレスの[10.0.0.10]、ポート番号[1025]に対するクローズ処理を行う。この際、ステップS1002の処理により、接続リファレンスカウント記憶部408内の該当セッションのクローズ・リファレンス・カウンタの値が「−1」される。
このクローズ処理により、接続リファレンスカウント記憶部408内のクローズ・リファレンス・カウンタの値は、サーバ接続子が「10」のサーバPC105に対して「1」個となる。実際の通信アドレスは、IPv4アドレス[10.0.0.10]、ポート番号[1025]の1つである。また、宛先アドレスとしては、IPv6アドレス[2001::10]、ポート番号[1025]があり、このアドレスは接続状態で存在する。
プロセスP1104では、クライアントプロセス間通信部103は、IPv6アドレス[2001::10]、ポート番号[1025]に対するクローズ処理を行う。この際、ステップS1002の処理により、接続リファレンスカウント記憶部408内の該当セッションのクローズ・リファレンス・カウンタの値が「−1」される。
このクローズ処理により、接続リファレンスカウント記憶部408内のクローズ・リファレンス・カウンタ(その値)は、サーバ接続子が「10」のサーバPC105に対して「0」個となる。クライアントプロセス間通信部103は、クローズ・リファレンス・カウンタの値が「0」個となったので、プロセスP1105において、ステップS710のセッションクローズ処理を行う。本処理例では、クライアントアプリケーション101,101aは、クライアントプロセス間通信部103に対して、IPv6アドレスの[2001::10]、ポート番号[1025]に対する切断指示を行う。
しかし、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aからのセッション切断指示を受けて、実際の通信アドレスであるIPv4アドレス[10.0.0.10]、ポート番号[1025]に対して切断処理を行う。この切断処理は、ステップS710、及びステップS711の処理で行われる。
次に、プロセスP1106において、サーバプロセス間通信部107は、次のような処理を行う。即ち、サーバプロセス間通信部107は、クライアントプロセス間通信部103からのIPv4アドレス[10.0.0.10]、ポート番号[1025]に対する切断指示に応答して、通信ライブラリ104bにより、当該セッションの切断処理を行う。
これは、次のことを意味する。即ち、宛先アドレスと異なるアドレスで確立された既存セッションで通信を行っている際に、当該既存セッションに対する切断指示が他のアプリケーションからなされたとする。この場合は、その切断指示とは異なるアドレスの同一のサーバ識別子504に係るセッションが切断され、当該既存セッションが切断されることはない。
換言すれば、第2の実施の形態では、宛先アドレスとは異なるアドレスで確立された既存セッションでデータ送信を行う場合にも、既存セッションによる通信が他のアプリケーションからの切断指示で意に反して切断されることはない。
例えばクライアントアプリケーション101が、第1のセッションを切断した場合、第1のセッションを既存セッションとしてデータ通信に使用しているクライアントアプリケーション101aは、データ通信を行うことができなくなる。
しかし、例えば、クライアントプロセス間通信部103は、クライアントアプリケーション101,101aからのコネクト(接続)要求、クローズ(切断)要求に対して、セッションの参照カウンタのみを増減するようにする。そして、クライアントプロセス間通信部103は、参照カウンタが「0」になったときに実際にセッションを切断するようにすれば、セッションを共有したとしても、セッションの切断時に問題が発生じることはない。
[第3の実施の形態]
第1の実施の形態では、クライアントアプリケーション101とクライアントアプリケーション101aが異なる宛先アドレスを指定した場合でも、同一のセッションを利用する場合がある。この際、実際に通信に利用する通信アドレスは、最初にセッションを作成した際の宛先アドレスとなる。
しかし、最初にセッションを作成した際の宛先アドレスでの通信で通信障害が発生した場合は、他の宛先アドレスでの通信が可能なときでも、同一セッションで通信を行っている他のクライアントアプリケーションも通信ができなくなる。
そこで、第3の実施の形態では、そのような通信障害が発生した場合でも、通信可能な宛先アドレスが存在するときは、該当セッションでの通信を可能とするようにしている。
図12は、本発明の第3の実施の形態においてサーバPC105とクライアントPCの間で行われるセッション管理処理を示すシーケンス図である。なお、図12において、ステップS701〜S711は、図7のフローチャートにおけるステップS701〜S711と同じであるため、その全てを説明することなく、第3の実施の形態に特有なステップの説明に必要なステップだけを説明する。
図12において、プロセス間通信制御部401は、ステップS706、又はステップS707で選択されたセッションにより、クライアントアプリケーション101,101aからのデータをサーバアプリケーション108に転送する(ステップS708)。
次に、プロセス間通信制御部401は、データ転送に成功したか否かを判断する(ステップS1201)。その結果、データ転送に成功している合は、プロセス間通信制御部401は、クライアントアプリケーション101,101aからのクローズ要求や、通信ライブラリ104aからの接続切断要求などの有無を判断する(ステップS709)。
一方、データ転送に失敗した場合は、プロセス間通信制御部401は、セッション管理部403により、サーバ識別子504が同一の他の宛先アドレスの存在、又は通信可能な他の宛先アドレスの存在の有無を判断する(ステップS1202)。
その結果、サーバ識別子504が同一の他の宛先アドレスが存在しない場合、プロセス間通信制御部401は、データ転送のエラー処理を行って(ステップS1206)、上記のステップS709に進む。このエラー処理は、通信可能な他の宛先アドレスが存在する或いは場合にも同様に行われる。
一方、サーバ識別子504が同一の他の宛先アドレスが存在する場合は、プロセス間通信制御部401は、セッション再接続管理部409により、サーバ識別子504が同一の他の宛先アドレスに再接続セッションを確立する。この場合、通信に失敗した通信アドレスとは別の宛先アドレスで新規ソケットが作成される。
次に、プロセス間通信制御部401は、DB管理部405により、再接続セッションをセッション管理情報DB406に登録する(ステップS1204)。そして、プロセス間通信制御部401は、再接続セッションをデータ転送セッションに選択し(ステップS1205)、ステップS708に戻り、再接続セッションでデータ転送を行う。
図13は、本発明の第3の実施の形態においてサーバPC105とクライアントPCの間で行われるセッション管理処理を示すシーケンス図である。このシーケンスでは、宛先アドレスと異なるアドレスで確立された既存のセッションでデータ送信を行う場合に、セッション再接続処理を可能にしている。なお、図13において図9の処理シーケンスと同様である処理については、その説明を省略する。
プロセスP1301では、プロセス間通信制御部401は、ステップS1201のデータ転送成功の確認処理を行う。この時点で、接続リファレンスカウント記憶部408が記憶しているクローズ・リファレンス・カウンタは、サーバ識別子504が「10」のサーバPC105に対して2個となる。この2個のサーバ識別子504の実際の通信アドレスは、IPv4アドレス[10.0.0.10]、ポート番号[1025]である。
また、この時点での宛先アドレスは、IPv4アドレス[10.0.0.10]、ポート番号[1025]、及びIPv6アドレスの[2001::10]、ポート番号[1025]の2つが接続状態で存在する。
本シーケンス例では、プロセスP1301において、プロセス間通信制御部401は、実際の通信アドレスであるIPv4アドレス[10.0.0.10]、ポート番号[1025]でのデータ転送がエラーであると判断する。
プロセスP1302では、プロセス間通信制御部401は、セッション再接続管理部409により、ステップS1202でのサーバ識別子504が同一の他の宛先アドレスが存在するか否か判定処理を行う。
本シーケンス例では、セッション再接続管理部409は、サーバ識別子504が同一である他の宛先アドレスがあると判定し、再接続セッションの確立を行う。(プロセスP1303)。セッション再接続管理部409は、DB管理部405により、再接続セッションをセッション管理情報DB406に登録する。
この時点では、接続リファレンスカウント記憶部408が記憶しているクローズ・リファレンス・カウンタは、サーバ接続子が「10」のサーバPC105に対して2個である。
実際の通信アドレスは、IPv6アドレス[2001::10]、ポート番号[1025]である。また、宛先アドレスは、IPv4アドレスの[10.0.0.10]、ポート番号[1025]およびIPv6アドレスの[2001::10]、ポート番号[1025]が接続状態で存在する。
プロセスP1304では、プロセス間通信制御部401は、クライアントアプリケーション101,101aから指定されたデータを、IPv6アドレス[2001::10]、ポート番号[1025]でデータ送信を行う。
このため、サーバ識別子が同一のセッションの中に接続可能な宛先アドレスが1つ以上ある場合は、接続要求を行ったクライアントアプリケーション101,101aは、通信障害を意識することなく通信を継続することが可能となる。
[第4の実施の形態]
第1〜3の実施の形態では、クライアントPC100は、サーバPC105から取得したサーバ識別子、すなわち、サーバ識別情報に基づいて既存セッションの有無を判定していた。
しかし、このためには、サーバPC105側にサーバ識別子(サーバ識別情報)を返信する構成、すなわち、サーバプロセス間通信制御部301の制御の下にサーバ識別子を返信するサーバ識別子返信部302を備える必要がある。このため、多数のクライアントPCと通信するサーバPC105の処理負担が増えると共に、ネットワークリソースの有効利用を阻害する要因ともなる。
そこで、第4の実施の形態では、クライアントPC100は、サーバPC105から取得したサーバ識別子に基づいて既存セッションの有無を判定するのではなく、サーバPC105と協働することなく既存セッションの有無を判定することとしている。
図14は、本発明の第4〜6の実施の形態に係るセッション管理システムを適用したクライアント/サーバシステムのソフトウェアの構成等を示す図である。
第1〜3の実施の形態に係る図1との相違点は、DNS(Domain Name System)サーバ1401がネットワーク106に接続されている点である。
第4の実施の形態では、DNSサーバ1401等を利用することにより、クライアントPC100は、サーバPC105と協働することなく、既存セッションの有無を判定する。
なお、DNSサーバ1401で動作しているDNSサービスの仕様は、IETF(Internet Engineering Task Force)に係る技術仕様となっている。具体的には、DNSサーバ1401は、RFC(Request for Comments)1034やRFC1035等で規定されている仕様でアドレス問題解決サービスを行っている。
RFC1034、RFC1035等では、IPv4アドレスに対応したAレコードの仕様や応答の実装について記述されている。また、RFC1886等では、IPv6に対応したAAAAレコードの仕様や応答の実装について記述されている。RFCは、http://www.ietf.org/rfc.htmlで参照することができる。
図15は、第4の実施の形態に係るクライアントPC100のクライアントプロセス間通信部103の詳細なソフトウェア構成を示すブロック図である。
クライアントPC100は、クライアントアプリケーション101からのリクエストにより、スタブオブジェクト(図省略)を介して、クライアントプロセス間通信部103および、通信ライブラリ104aを介してサーバPC105と通信を行う。
クライアントプロセス間通信部103は、第1〜3の実施の形態と同様に、プロセス間通信制御部401、セッション管理部403、セッション管理情報DB406、セッション判定部404を有している。
また、クライアントプロセス間通信部103は、第1〜3の実施の形態と同様に、セッション切断管理部407、セッション再接続管理部409を有している。さらに、クライアントプロセス間通信部103は、第4の実施の形態に特有なソフトウェアとして、アドレスリスト取得部1501、及びアドレスリスト記憶部1502を有している。
プロセス間通信制御部401は、セッションの管理を行いながら、クライアントアプリケーション101,101aとサーバアプリケーション108の間で行う通信を統括的に制御する。アドレスリスト取得部302は、クライアントアプリケーション101,101aから指定された宛先アドレスに係る1つまたは複数のアドレスをDNSサーバ1401から取得し、アドレスリスト記憶部1502に順次記憶する。このアドレスリスト記憶部1502の記憶情報であるアドレスリスト情報については、後で図16、図23に基づいて詳細に説明する。
セッション管理部403は、セッション管理情報DB406に登録するセッション管理情報を管理する。この第4の実施の形態におけるセッション管理情報については、後で図17に基づいて詳細に説明する。セッション判定部404は、アドレスリスト、及びセッション管理情報に基づいて、新規セッションの作成処理や既存セッションの利用可能性を判断する。
セッション切断管理部407、接続リファレンスカウント記憶部408、及びセッション再接続管理部409の処理内容等は、第1〜3の実施の形態と同様である。
次に、アドレスリスト記憶部1502に記憶されているアドレスリスト情報を図16に基づいて詳細に説明する。アドレスリスト記憶部1502には、DNSサーバ1401から取得した宛先(サーバ)のアドレスリスト情報が順次格納されて、データベース化されていく。
サーバ識別子1601は、接続要求元のクライアントアプリケーション101,101aが要求する宛先(接続先)に係るサーバ(サーバPC105)のサーバ識別子(サーバ識別情報)である。このサーバ識別子1601としては、例えば、ホスト名やNetBIOS名、コンピュータ名、完全修飾ドメイン名(FQDN:Fully Qualified Domain Name)等がある。
ただし、後述するように、第4の実施の形態では、アドレスリスト取得部1501は、クライアントアプリケーション101,101aが異なる形式のサーバ識別情報で接続要求を行った場合に、異なる形式のサーバ識別情報をホスト名に統一している。そして、アドレスリスト取得部1501は、このホスト名に係るアドレスリストをDNSサーバ1401から取得している。
従って、図16のアドレスリスト情報にけるサーバ識別子1601は、実際には「ホスト名」となっている。同様に理由で、図17のセッション管理情報におけるサーバ識別子504も、実際には「ホスト名」となっている。ただし、図23のアドレスリスト情報にけるサーバ識別子1601は、実際には「ホスト名」であるところを、説明の便宜上、クライアントアプリケーション101,101aが実際に指定したサーバ識別子(サーバ識別情報)を示している。
アドレス取得方法1602は、宛先(サーバ)のアドレスリストをDNSサーバ1401から取得する際に用いたプロトコルやその取得方法を示す情報である。アドレス種別1603は、DNSサーバ1401から実際に取得したアドレスの種別を示す情報である。IPアドレス1604は、DNSサーバ1401から実際に取得したアドレス(IPアドレス)それ自体を示す情報である。
図16の例では、サーバ識別子1601が「AppServer:ホスト名」のサーバについては、リスト番号「1」と「4」に係る通信時にはIPv4アドレス[10.0.0.10]を取得している。また、サーバ識別子1601が「AppServer」のサーバについては、リスト番号「2」に係る通信時にはIPv6アドレス[2001::10]を取得し、リスト番号「3」に係る通信時にはIPv6アドレス[fe80::10]を取得している。
また、サーバ識別子1601が「AppServer2:ホスト名」のサーバについては、リスト番号「5」に係る通信時にはIPv4アドレス[10.0.0.20]を取得し、リスト番号「6」に係る通信時にはIPv6アドレス[2001::20]を取得している。
図17は、セッション管理情報を例示した図である。アプリケーション識別子501は、接続を要求したクライアントアプリケーション101,101aを識別する識別子(インスタンスハンドル)である。要求アドレス情報502は、クライアントアプリケーション101,101aが接続を要求する際に接続先(宛先)として指定した宛先アドレスである。この宛先アドレス502は、サーバ識別情報(ホスト名、FQDN等)、IPv4アドレス、IPv6アドレス等のIPアドレス502aと、ポート番号502bを含んでいる。
通信アドレス情報503は、上記の宛先アドレスに基づいて既存セッションの利用可能性を判断した結果、実際に通信を行うものとして選択されたセッションに係る接続先のアドレスである。この通信アドレス情報503は、IPアドレス503aとポート番号503bを含んでいる。
サーバ識別子504は、接続要求元のクライアントアプリケーション101,101aがDNSサーバ1401に対して接続先のアドレスリストを要求した当該接続先のサーバのサーバ識別子(ここでは、ホスト名)である。セッション番号505は、通信を実際に行うセッションの管理番号(セッション識別インスタンスハンドル)である。
次に、クライアントプロセス間通信部103のプロセス間通信制御部401が行う第4の実施の形態に係るセッション管理処理を、図18のフローチャートに基づいて説明する。なお、図18では、図7と同一の処理については、同一のステップ番号を付している(図20、図21、図22、図26、図27も同様)。
クライアントプロセス間通信部103のプロセス間通信制御部401は、サーバPC105のサーバアプリケーション108に対する接続要求を受け付ける(ステップS701)。この接続要求は、クライアントアプリケーション101,101aから行われるものである。
次に、プロセス間通信制御部401は、アドレスリスト取得部1501により、上記の宛先アドレスに係るアドレスリストを取得する(ステップS1801)。
この場合、アドレスリスト取得部1501は、通信ライブラリ104aを利用して、ネットワーク106経由でDNSサーバ1401に対して、上記のアドレスリストに係るAレコードやAAAAレコード等の取得要求を行う。DNSサーバ1401は、アドレスリスト取得部1501からのアドレスリスト取得要求に応じて、該当するアドレスリストを返信する。
なお、アドレスリスト取得部1501は、ステップS1801では、DNSサーバ1401以外に、各種のアドレス問題解決サービスを利用してアドレスリスト取得処理を行う。DNSサーバ1401以外のアドレス問題解決サービスとしては、例えば、LLMNR(Link Local Multicast Name Resolution)やNetBIOSのブロードキャスト探索等が挙げられる。
アドレスリスト取得部1501は、宛先アドレスの中でサーバ識別情報として「Numeric host address」が指定された場合は、その「Numeric host address」をホスト名に変換してアドレスリスト取得処理を行う。
このステップS1801におけるアドレスリスト取得処理の詳細を、図19のフローチャートに基づいて説明する。
アドレスリスト取得部1501は、クライアントアプリケーション101,101aから指定された宛先情報の中で、ホスト名、アドレスの何れの形式のサーバ識別情報でサーバが指定されているのかを判別する(ステップS1901)。ここで言う「アドレス」とは、「Numeric host address」を指す。
アドレス形式のサーバ識別情報でサーバが指定されている場合は、アドレスリスト取得部1501は、当該アドレスに係るホスト名をDNSサーバ1401上で検索する(ステップS1902)。この場合、アドレスリスト取得部1501は、例えば、C/C++のソケットプログラミングにおいては、getnameinfo()関数により、当該指定アドレスに対応付けられたホスト名を検索する。
次に、アドレスリスト取得部1501は、アドレス取得関数に基づいて検索したホスト名を指定することにより、当該ホスト名に係るサーバのアドレスリストをDNSサーバ1401から取得する(ステップS1903)。この場合、例えば、C/C++のソケットプログラミングにおいては、getaddrinfo()関数のai_family に 値AF_UNSPEC を設定して呼出しを行うことにより、ホスト名に対応するアドレスリストを取得する。
一方、最初からホスト名の形式のサーバ識別情報でサーバが指定されている場合は、アドレスリスト取得部1501は、ステップS1902をスキップしてステップS1903に進む。ステップS1903の処理が終了すると、アドレスリスト取得部1501は、上記のホスト名、及び当該ホスト名に対応するアドレスリストをアドレスリスト記憶部1502に登録し(ステップS1904)、図18のフローにリターンする。
そして、セッション判定部404は、プロセス間通信制御部401の制御の下に、ステップS1801で取得されたアドレスリストとセッション管理情報DB406の情報に基づいて、既存セッションの利用可能性を判定する(ステップS1802)。
この場合、セッション判定部404は、取得したアドレスリストに係るアドレスの中で、同一ホスト名のホスト(サーバ)に係る既存セッションとしてセッション管理情報DB406に登録されている既存セッションについては、利用できると判定する。
即ち、セッション判定部404は、取得したアドレス(1つのアドレスの場合もある)に係るアドレスとは別のアドレスで通信を行っている既存セッションの中で、当該取得アドレスに係るサーバと同一のサーバに係る既存セッションが存在するか否かを判断する。その結果、上記の同一のサーバに係る既存セッションが存在する場合には、セッション判定部404は、当該既存セッションを利用可能であると判定する。
この場合、前述のように、アドレスリストは、サーバ識別情報をホスト名に統一した状態で取得されている。従って、セッション判定部404は、ホスト名に基づいてサーバの同一性を認定する。
このことは、実質的に、クライアントアプリケーション101,101aが接続要求時に指定した宛先アドレスにおけるサーバ識別情報が異なっていても、同一のサーバに係るサーバ識別情報であれば、同一のサーバに係るサーバ識別情報として取り扱うことを意味する。
これにより、たとえ異なるサーバ識別情報でサーバが指定されたとしても、既存セッションの利用可能性を適切に判定することができ、より一層、ネットワークリソースを効率的に使用することが可能となる。この点については、後で、図23に基づいて詳細に説明する。
そして、プロセス間通信制御部401は、既存セッションを利用可能である場合には、その既存セッションを今回のデータ転送用のセッションとして選択する(ステップS1803)。
例えば、図17のセッション管理情報例では、管理番号「1」と「2」のセッションは、クライアントアプリケーション(1)からの異なる宛先アドレスに係るセッションである。しかし、既に確立された既存セッションとして、同一のサーバ識別子「AppServer」に係る既存セッションが存在する。このような場合、プロセス間通信制御部401は、新規のセッションを作成せずに、当該既存セッションをデータ転送用のセッションとして選択する。
なお、図16のアドレスリストの例では、IPアドレス[10.0.0.10]と[2001::10]は、同一のサーバ識別子「AppServer」に対応付けられているため、上記のように、同一のサーバ識別子の既存セッションが存在すると判定できる。
図16,17の例では、リスト番号「2」のアドレス[2001::10]への接続要求に係る通信は、サーバ識別子「AppServer」が同一である管理番号「1」に係るアドレス[10.0.0.10]の既存セッションを利用してデータ転送が行われる。
このように、既存セッションを利用することにより、クライアントPC100、サーバPC105は、宛先アドレスに係る通信ソケットを新たに作成する必要はなくなり、当該通信ソケットなどのネットワークリソースを節約することが可能となる。
図18におけるステップS704,S705,S708〜S711の処理は、図7の同一ステップ番号の処理と全く同様なので、ここでは、その説明を省略する。
次に、第1,第2のクライアントアプリケーションが別のサーバ識別情報(ホスト名、FQDN等)でサーバを指定した場合の取り扱いを説明する。
前述のように、第4の実施の形態では、宛先として指定されたサーバ識別情報は異なるが、同一サーバに係るサーバ識別情報については、同一のサーバ識別情報として取り扱うことにより、既存セッションの利用可能性を適切に判定できるようにしている。
図23は、このような場合のアドレスリスト情報を例示したものである。図23のアドレスリスト情報の情報項目それ自体は、図16のアドレスリスト情報の情報項目と全く同一なので、同一の情報項目に同一の符号を付しただけで、その説明は省略する。ただし、図23のアドレスリスト情報におけるサーバ識別子1601は、異なる形式で指定されたサーバ識別情報をホスト名に統一した結果としてのホスト名ではなく、説明の便宜上、その統一前の指定に係るサーバ識別情報それ自体を示している。
図23の例では、サーバ識別子「AppServer.foo.test」に係るサーバと、サーバ識別子「AppServer」に係るサーバが、同一のIPアドレス「fe80::10」に対応付けられている(リスト番号2,3参照)。
このような場合には、前述のホスト名への統一処理により、サーバ識別子「AppServer.foo.test」に係るサーバと、サーバ識別子「AppServer」に係るサーバが、同一のサーバであるものとして取り扱われる。そして、セッション判定部404は、実質的に、これら両方のサーバ識別子に係るアドレスリスト情報に基づいて、既存セッションの利用可能性を判定することとなる。
例えば、接続要求時の宛先情報の中でサーバ識別子「AppServer.foo.test」が指定されているが、当該サーバ識別子に係るIPアドレスに係る既存セッションが無いものとする。この場合において、サーバ識別子「AppServer.foo.test」と同一のサーバに係るサーバ識別子「AppServer」の既存セッションとして、IPアドレス[2001::10]に係るものが有るものとする。
このような場合、セッション判定部404は、サーバ識別子「AppServer.foo.test」を用いた接続要求に対して、IPアドレス[2001::10]に係る既存セッションを利用可能であると判定する。
このようにして、サーバ識別子は異なるが、同一サーバに係るサーバ識別子については、同一のサーバ識別子として取り扱うことにより、異なるサーバ識別子を指定した場合にも、既存セッションを利用できるようにしている。これにより、一層、ソケット等のネットワークリソースを効率的に使用することが可能となる。
[第5の実施の形態]
第1〜4の実施の形態では、クライアントアプリケーション101とクライアントアプリケーション101aが異なる宛先アドレスを指定した場合でも、両者が同一のセッションを利用する場合がある。この場合、クライアントプロセス間通信部103は、最初に確立されたセッションに係る宛先アドレスで実際の通信を行う。
しかし、最初に確立されたセッションに係る宛先アドレスによる通信において、通信障害が発生した場合は、他のアドレスによる通信が可能であっても、同一セッションで通信を行っている他のクライアントアプリケーションも通信不能となる。
そこで、第5の実施の形態では、通信障害が発生しても、接続可能な他のアドレスが存在する場合は、当該接続可能な他のアドレスに係るセッションを確立して通信を行うようにしている。
次に、プロセス間通信制御部401が行う第5の実施の形態に係るセッション管理処理を、図20、図21のフローチャートに基づいて説明する。なお、第5の実施の形態は、第4の実施の形態を応用変形したものであり、図20,21のフローチャートは、図18のフローチャートと部分的に一致している。そこで、図20,21おいては、図18と同一の処理については、同一のステップ番号を付して、その説明は省略し、相違点だけを説明することとする。
プロセス間通信制御部401は、図21のステップS2001において、ステップS708で行った選択に係るセッションによるデータ転送に成功したか否かを判別する。その結果、データ転送に成功した場合は、前述のステップS709〜S711の処理を行う。
一方、データ転送に失敗した場合は、セッション判定部404は、プロセス間通信制御部401の制御の下に、セッション管理情報DB406上にサーバ識別情報(ホスト名等)が同一の他のアドレスが存在するか否かを判定する(ステップS2002)。その結果、サーバ識別情報が同一の他のアドレスが存在しない場合は、プロセス間通信制御部401は、データ転送のエラー処理を行って(ステップS2006)、ステップS709に進む。
一方、サーバ識別情報が同一の他のアドレスが存在する場合は、プロセス間通信制御部401は、サーバ識別情報(ホスト名)が同一の他のアドレスに再度接続するためのセッションを確立する(ステップS2003)。この場合、プロセス間通信制御部401は、サーバ識別情報(ホスト名)が同一の他のアドレスに係る新規ソケットを作成する。
この場合、プロセス間通信制御部401は、サーバ識別情報(ホスト名)が同一の他のアドレスが複数存在するときは、クライアントアプリケーション1−1,101aが指定した宛先アドレスに係るセッションを優先的に確立する。
次に、プロセス間通信制御部401は、セッション管理部403により、再接続に係る
セッションの情報をセッション管理情報DB406に登録する(ステップS2004)。そして、プロセス間通信制御部401は、再接続に係るセッションをデータ転送用のセッションとして選択し(ステップS2005)、ステップS708に戻る。
このように、第5の実施の形態では、複数のアプリケーションが同一のセッションでデータ送信を行っている際に或るアプリケーションに係る通信で障害が発生しても、他のアプリケーションは通信を続行することができる。従って、第5の実施の形態では、通信障害に強くてデータ転送の信頼性が高い通信システムを構築することが可能となる。
[第6の実施の形態]
第4,5の実施の形態では、例えばアプリケーション1101が第1のセッションを切断すると、当該第1のセッションを利用しているクライアントアプリケーション101aは通信を行えなくなってしまう。
そこで、第6の実施の形態では、この問題を次のようにして解決している。すなわち、プロセス間通信制御部401は、セッションのクローズ要求に応じて、その都度、セッションをクローズするのではなく、各セッションのクローズ・リファレンス・カウンタに基づいてセッションをクローズしている。第6の実施の形態では、接続リファレンスカウント記憶部408にクローズ・リファレンス・カウンタを記憶するものとする。
第6の実施の形態におけるセッション管理処理を、図22のフローチャートに基づいて説明する。なお、第6の実施の形態は、第4の実施の形態を応用変形したものであり、図22のフローチャートは、図7、図18のフローチャートと部分的に一致している。そこで、図22においては、図7、図18と同一の処理については、同一のステップ番号を付して、その説明は省略し、相違点だけを説明することとする。
セッション切断管理部407は、プロセス間通信制御部401の制御の下に、図22のステップS2201において、ステップS706又はS1803で選択されたセッションに係るクローズ・リファレンス・カウンタを「+1」する。この際、セッション切断管理部407は、「+1」した当該セッションのクローズ・リファレンス・カウンタの値を接続リファレンスカウント記憶部408に保存する。
そして、プロセス間通信制御部401は、ステップS706又はS707で選択されたセッションにより、データ転送を行う(ステップS708)。次に、プロセス間通信制御部401は、クライアントアプリケーション101,101aからのクローズ要求、通信ライブラリ104aからの通信切断要求などの有無を判断する(ステップS709)。その結果、上記のクローズ要求、又は切断要求が無い場合は、プロセス間通信制御部401は、ステップS701に戻る。
一方、上記のクローズ要求、切断要求の何れかが有る場合は、セッション切断管理部407は、その要求に係るアドレスのセッションのクローズ・リファレンス・カウンタを「−1」する(ステップS2202)。このように、セッション切断管理部407は、セッションに係る宛先アドレス毎に、当該宛先アドレスに対する接続要求時にはクローズ・リファレンス・カウンタを「1」だけカウントアップし、切断要求時には「1」だけカウントダウンする。
そして、プロセス間通信制御部401は、クローズ・リファレンス・カウンタの値が「−1」されることにより、「0」になったか否かを判断する(ステップS2203)。その結果、クローズ・リファレンス・カウンタの値が「0」になっていなければ、プロセス間通信制御部401は、ステップS701に戻る。
一方、クローズ・リファレンス・カウンタの値が「0」になっていれば、プロセス間通信制御部401は、ステップS710に進み、クローズ要求、切断要求に係るアドレスのセッション、ソケットのクローズ処理を行う。
このように、第6の実施の形態では、セッションのクローズ要求に応じて、その都度、セッションをクローズするのではなく、各セッションのクローズ・リファレンス・カウンタに基づいてセッションをクローズしている。
従って、異なるクライアントアプリケーションが同一のセッションを利用してデータ転送する場合に、一方のクライアントアプリケーションからの切断指示で、他方のクライアントアプリケーションがデータ転送不能となることはない。これにより、一層、ソケット等のネットワークリソースを効率的に使用することが可能となる。
[第7の実施の形態]
第1〜6の実施の形態では、既存セッションを利用できる場合は、必ずその既存セッションを用いて通信を行っていた。しかしながら、先に通信が開始された第1の通信により確立された既存セッションよりも、後から通信が開始される第2の通信により本来確立されるべき新規セッションの方が、通信速度、経由するルータの数等の関係で通信効率が良い場合がある。
そこで、第7の実施の形態では、たとえ利用可能な既存セッションが有ったとしても、今回の通信で確立されるべき新規セッションの方が既存セッションよりも通信効率が良い場合には、新規セッションを確立して通信を行うようにしている。
上記の通信効率を判定するために、第7の実施の形態では、図24に示したように、クライアントプロセス間通信部103は、プロセス間通信制御部401の制御の下に回線情報を取得する回線情報取得部2401を設けている。
クライアントPC100の他のソフトウェア構成は、図4に示した第1の実施の形態とほぼ同様なので、相違点だけを説明する。なお、図24では、図4に示したセッション切断管理部407、接続リファレンスカウント記憶部408、及びセッション再接続管理部409が図示省略されている。
回線情報取得部2401は、宛先アドレスに対応するネットワーク106上の通信ルートの回線情報を、通信ライブラリ104aから取得する。そして、回線情報取得部2401は、DB管理部405を介して、その回線情報をセッション管理情報としてセッション管理情報DB406に登録する。
回線情報取得部2401が取得する回線情報としては、IPv6ヘッダのTraffic Class、Flow Label、Hop LimitやIPv4ヘッダのService Type、Time To Live、更には、通信帯域がある。
回線情報取得部2401は、IPプロトコルのPath MTU(Maximum Transmission Unit) Discoveryを用いて、Path MTUを検出することができる。このPath MTU Discoveryは、1回のデータ転送で通信可能なデータグラムの最大値を自動的に検出するものである。Path MTU Discoveryに関しては、RFC (Request for Comments)で規定されている。
回線情報取得部2401は、RFC1981のPath MTU discovery for IP version 6 や、RFC1191のPath MTU Discovery等を、通信ライブラリ104aから取得する。
なお、回線情報取得部2401は、通信帯域に関しては、クライアントPC100に装着されたネットワークカードの帯域情報を取得することができる。また、回線情報取得部2401は、RFC2205で規定されているネットワーク制御プロトコルにより、クライアントアプリケーションの制御する帯域情報を取得することができる。
図25は、第7の実施の形態に係るセッション管理情報を提示した図である。このセッション管理情報は、セッション管理情報DB406にデータベースとして登録されている。
図25に示した第7の実施の形態に係るセッション管理情報では、図5に示した第1の実施の形態に係るセッション情報のデータ項目に対して、回線情報2501が付加されている。この回線情報2501は、クライアントアプリケーション101,101aが接続要求を行った際に宛先として指定した宛先アドレス、及びポート番号に対応する通信ルートの回線状態を示す情報である。
回線情報2501としては、例えば、帯域情報2501a、ルータ数2501b、Path MTU2501cがある。ただし、これら以外の回線情報を利用して通信効率を判定することも可能である。
次に、第7の実施の形態に係るセッション管理処理を、図26、図27のフローチャートに基づいて説明する。なお、本フローチャートは、第1の実施の形態に係る図7と共通する処理ステップが多数あるが、これら処理ステップについては、同一符号を付すだけで、その説明を省略する。
プロセス間通信制御部401は、ステップS702にてクライアントアプリケーション101からの宛先アドレスに対し、サーバPC105からサーバ識別子を取得する。さらに、プロセス間通信制御部401は、回線情報取得部2401により、クライアントアプリケーション101,101aからの宛先アドレスに対応する通信ルートに係る回線情報を取得する(ステップS2601)。
この場合、回線情報取得部2401は、getsockopt関数により、クライアントPC100のOS上のソケットライブラリから、上記の通信ルートに係る回線状態の情報を取得することができる。また、回線情報取得部2401は、上記OS上の通信ライブラリ104aからPath MTU Discoveryを取得し、このPath MTU Discoveryを用いて上記の通信ルートに係るPath MTU2501cを取得することもできる。さらに、回線情報取得部2401は、IPv4ヘッダのTTL(Time To Live)や、IPv6ヘッダのHop Limit情報を取得することも可能である。
次に、プロセス間通信制御部401は、セッション管理部403により、ステップS702で取得したサーバ識別子504と同一のサーバ識別子504に係る既存のセッションが存在するか否かを判別する(ステップS703)。
この場合、セッション管理部403は、DB管理部405により、セッション管理情報DB406からセッション管理情報を取得する。そして、セッション管理部403は、取得したセッション管理情報について、別のアドレスで通信中の既存セッションの中に、今回の接続要求時に取得したサーバ識別子504と同一のサーバ識別子504に係る既存セッションが存在するか否かを判定する。この判定処理は、実際には、セッション判定部404が行う。
ステップS702で取得したサーバ識別子504と同一のサーバ識別子504に係る既存のセッションが存在する場合は、プロセス間通信制御部401は、ステップS2602に進む。
このステップS2602では、プロセス間通信制御部401は、セッション判定部404により、接続済みの既存セッションに係る回線状態と、今回接続を要求された宛先アドレスに係る回線状態を比較し、後者の方が良好であるか否かを判別する。
図25のセッション管理情報の例では、管理番号「1」と管理番号「2」の通信は、クライアントアプリケーションからの異なる宛先アドレスではあるが、サーバ識別子が同一のサーバへの接続要求に係る通信である。これら通信についてPath MTU2501cで比較すると、管理番号「1」では「1500」、管理番号「2」では「9000」なので、Path MTPが大きい(通信オーバヘッドの少ない)管理番号「2」に係る回線状態の方が良好であると判別される。
また、ルータ数2501bで比較すると、管理番号「1」では「3」、管理番号「2」では「1」なので、経由するルータ数が少ない(通信オーバヘッドの少ない)管理番号「2」に係る回線状態の方が良好であると判別される。なお、帯域情報2501aの取得方法等については、後で詳細に説明する。
帯域情報2501a、ルータ数2501b、Path MTU2501cによる回線状態の良好性の判別結果が互いに矛盾する場合も想定されるが、このような場合は、これらの判別結果を総合してトータルの通信オーバヘッド等で判別すればよい。
また、帯域情報2501a、ルータ数2501b、Path MTU2501c以外の通信条件、例えば通信ルートのトラフィック量等の時々刻々変化する通信条件に回線状態の良好性を判別することも可能である。また、ユーザの指定により、帯域情報2501a、ルータ数2501b、Path MTU2501c等のパラメータについてそれぞれに重み付けをして、トータルの通信オーバヘッド等で回線状態の良好性を判別することも可能である。
今回接続を要求された宛先アドレスに係る回線状態の方が、接続済みの既存セッションに係る回線状態よりも良好である場合は、プロセス間通信制御部401は、セッション管理部403により、新規にセッションを確立する(ステップS2603)。この場合、セッション管理部403は、通信ライブラリ104aを利用して、クライアントアプリケーション101,101aからの宛先アドレスで新規ソケットを作成する。
次に、セッション管理部403は、新規ソケットを含む新規セッションの情報を、DB管理部405により、セッション管理情報DB406に登録させる(ステップS2604)。そして、プロセス間通信制御部401は、クライアントアプリケーション101,101aからの宛先アドレスに基づく新規セッションを、今回のデータ転送用のセッションとして選択する(ステップS2605)。
次に、プロセス間通信制御部401は、データ転送を行っていた通信の同一サーバに係る既存セッションを新規セッションに変更する(ステップS2606)。そして、プロセス間通信制御部401は、セッション管理情報DB406上の当該既存セッションを削除する(ステップS2607)。
図25のセッション管理情報の例では、管理番号「3」と管理番号「2」の通信については、管理番号「2」の通信の方が良好な回線状態となっている。この回線常態において、管理番号「3」、管理番号「2」の順にクライアントアプリケーション101からの接続要求がなされたと仮定する。
この場合、まず、管理番号「3」に係るセッションが新規に作成される。このセッションでは、クライアントアプリケーション101が実際にデータ転送を行う通信アドレスは、[2001::20]、ポート番号1025となる。
続いて、管理番号「2」の接続要求がクライアントアプリケーション101aからなされたとすると、当該管理番号「2」の回線状態の方が管理番号「3」の回線状態よりも良好なので、当該管理番号「2」に係る新規セッションが改めて作成される。
そして、ステップS2605〜S2607の処理により、その後のクライアントアプリケーション101,101aに係るデータ転送は、共に、管理番号「2」に係る新規セッションの通信アドレス[2001::10]、ポート番号1025で行われることとなる。
接続済みの既存セッションに係る回線状態の方が、新規に要求があった宛先アドレスに係る回線状態よりも良好である場合は、プロセス間通信制御部401は、ステップS707に進む。このステップS707では、プロセス間通信制御部401は、今回の接続要求時に取得したサーバ識別子504と同一のサーバ識別子504に係る上記接続済みの既存セッションを今回のデータ通信用のセッションとして選択する。
次に、回線状態情報2501における帯域情報2501aの取得方法について説明する。この帯域情報2501aは、図26のステップS2601において、回線情報取得部2401は、クライアントアプリケーション101,101aからの宛先アドレスに応じて取得する。
この場合、回線情報取得部2401はLinkSpeed取得関数により、送信元アドレスから宛先アドレスにリンクする際のクライアントPC100のネットワークアダプタのLinkSpeedを、クライアントPC100上のOS上のソケットライブラリから取得する。
なお、回線情報取得部2401は、ネットワーク機器のQoS(Quality of Service)を実現するネットワーク制御プロトコルを上記のOS上のソケットライブラリから取得して、帯域情報2501aを認識することができる。この場合、回線情報取得部2401は、ネットワーク制御プロトコルからRSVP(Resource Reservation Protocol)(RFC2205)の設定値を取得する。
回線情報取得部2401は、これらの設定値を確認することにより、クライアントPC100のネットワークアダプタのLinkSpeedや、通信経路上のネットワーク機器の利用帯域情報を取得することにより回線状態の良好性を判定する。
そして、クライアントプロセス間通信部103は、帯域情報2501a,ルータ数2501b,回線情報2501cを総合的に判断することにより、異なるアドレスで確立されたセッションでデータ転送を行う際のアドレスを選定する。そして、クライアントプロセス間通信部103は、選定したアドレスに係るセッションを実際のデータ転送で用いるセッションとして選択する。
なお、回線状態の良好性を判定する場合、必ずしも低帯域情報2501a,ルータ数2501b,回線情報2501cの全てを用いる必要はなく、これらの何れか1つ、又は2つを任意に組み合わせて回線状態の良好性を判定してもよい。
[他の実施の形態]
本発明は、複数の機器から構成されるシステムに適用しても良いし、また1つの機器からなる装置に適用しても良い。また、前述の各実施の形態では、主としてIPv6を通信プロトコルとして利用することを想定していたが、1つのノード等に複数のアドレスを割当てることが可能な他の通信プロトコルを利用する場合にも、当該各実施の形態に係る技術思想を適用可能である。
なお、本発明は、前述した各実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に直接或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムを読み出して実行することによっても達成され得る。その場合、プログラムの機能を有していれば、形態はプログラムである必要はない。
また、プログラムの実行環境は、パーソナルコンピュータやパーソナルコンピュータでのオペレーションシステムを仮想化した仮想PCやリモートPCを含む。さらに、画像形成装置、プリンタやMFP(マルチファンクションペリフェラル)等の組み込みコンピュータで実行される場合も含まれる。
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータにインストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明のクレームでは、本発明の機能処理を実現するためのコンピュータプログラム自体も含まれる。その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、OSに供給するスクリプトデータ等、プログラムの形態を問わない。
プログラムを供給するための記録媒体としては、様々なものが使用できる。例えば、フロッピー(登録商標)ディスク、ハードディスク、光ディスク、光磁気ディスク、MO、CD−ROM、CD−R、CD−RW、磁気テープ、不揮発性のメモリカード、ROM、DVD(DVD−ROM,DVD−R)などである。
その他、プログラムの供給方法としては、クライアントコンピュータのブラウザを用いてインターネットのホームページに接続し、該ホームページからハードディスク等の記録媒体にダウンロードすることによっても供給できる。その場合、ダウンロードされるのは、本発明のコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイルであってもよい。また、本発明のプログラムを構成するプログラムコードを複数のファイルに分割し、それぞれのファイルを異なるホームページからダウンロードすることによっても実現可能である。つまり、本発明の機能処理をコンピュータで実現するためのプログラムファイルを複数のユーザに対してダウンロードさせるWWWサーバも、本発明のクレームに含まれるものである。
また、本発明のプログラムを暗号化してCD−ROM等の記憶媒体に格納してユーザに配布する形態としても良い。その場合、所定の条件をクリアしたユーザに対し、インターネットを介してホームページから暗号化を解く鍵情報をダウンロードさせ、その鍵情報を使用することにより暗号化されたプログラムが実行可能な形式でコンピュータにインストールされるようにする。
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される形態以外の形態でも実現可能である。例えば、そのプログラムの指示に基づき、コンピュータ上で稼動しているOSなどが、実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
更に、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれるようにしてもよい。この場合、その後で、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される。