サーバー及びデータ受信方法
【課題】アプリケーションプログラムがサポートするIPバージョンに依存せずにデータを受信する。
【解決手段】アプリケーションプログラム(APP)18の識別情報とAPP18がサポートするIPバージョンとをデータベース15に登録する。データベース15を参照し、APP18用のソケットであって、APP18がサポートするIPバージョンに対応したソケットを生成する。APP18は、生成されたソケットを介してデータを受信する。
【解決手段】アプリケーションプログラム(APP)18の識別情報とAPP18がサポートするIPバージョンとをデータベース15に登録する。データベース15を参照し、APP18用のソケットであって、APP18がサポートするIPバージョンに対応したソケットを生成する。APP18は、生成されたソケットを介してデータを受信する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アプリケーションプログラムがサポートするIPバージョンに依存せずにデータを受信するための技術に関する。
【背景技術】
【0002】
IP(Internet Protocol)のバージョンは、従来から利用されているIPv4(IPバージョン4)と、近年導入が進んでいるIPv6(IPバージョン6)とがある。IPv4からIPv6への移行期においては、IPv4とIPv6とが併存する。
【0003】
そこで、特許文献1には、IPv4パケット処理部とIPv6パケット処理部を共通化したネットワークデバイスが記載されている。
【0004】
また、アプリケーションプログラムには、IPv4のみサポートするもの、IPv6のみサポートするもの(以上、シングルスタック)、及びIPv4及びIPv6の両方をサポートするもの(デュアルスタック)が存在する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001−186184号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
各アプリケーションプログラムは、自らがサポートしているIPバージョンに対応したソケットを作成し、それぞれの受信処理を行う必要がある。つまり、デュアルスタックであれば、一つのアプリケーションが二つのソケットを作成し、それぞれの受信処理を行う必要がある。これらの処理は、それぞれのアプリケーションプログラムに実装されている。従って、あるアプリケーションプログラムにおいてサポートするIPバージョンを変更する場合には、プログラムの修正が必要となる。
【0007】
また、一般に、ソフトウェアを開発する際、利用するIPバージョンを意識しない、つまりIPバージョンに依存しない実装にすることが望ましい。一方で、デュアルスタックのアプリケーションプログラムでは、IPv4、IPv6でそれぞれ異なるモジュールにデータを受信させたい場合もある。
【0008】
そこで、本発明の目的は、アプリケーションプログラムがサポートするIPバージョンに依存せずにデータを受信することである。
【0009】
本発明の別の目的は、IPバージョンに依存してデータを受信するモジュールが異なるようなアプリケーションプログラムの場合には、IPバージョンを把握できるようにすることである。
【課題を解決するための手段】
【0010】
本発明の一つの実施態様に従う、アプリケーションプログラムが動作しているサーバーは、前記アプリケーションプログラムの識別情報と前記アプリケーションプログラムがサポートするIPバージョンとを対応付けて記憶したデータベースと、前記データベースを参照し、前記アプリケーションプログラム用のソケットであって前記IPバージョンに対応したソケットを生成するソケットユーティリティーと、を備え、前記アプリケーションプログラムは、前記生成されたソケットを介してデータを受信する。
【0011】
これにより、アプリケーションプログラムは、自らがサポートしているIPバージョンに依存することなくデータを受信できる。
【0012】
好適な実施形態では、前記生成されたソケットのソケットハンドルを取得し、前記ソケットハンドルに含まれている前記アプリケーションプログラムの識別情報により定まるアプリケーションプログラムを呼び出すディスパッチャーを、さらに備え、前記呼び出されたアプリケーションプログラムが前記生成されたソケットを介してデータを受信するようにしてもよい。
【0013】
これにより、ディスパッチャーが存在する場合であっても、アプリケーションプログラムは、自らがサポートしているIPバージョンに依存することなくデータを受信できる。
【0014】
好適な実施形態では、前記ディスパッチャーは、前記ソケットハンドルに含まれている、前記アプリケーションプログラムがサポートするIPバージョンに対応する前記アプリケーションプログラムのモジュールを呼び出すようにしてもよい。
【0015】
これにより、アプリケーションプログラムがIPバージョンに応じて異なるモジュールがデータを受信する場合でも、ディスパッチャーがIPバージョンを把握できるので、適切なモジュールがデータを受信できる。
【0016】
好適な実施形態では、前記IPバージョンは、IPv4またはIPv6であってもよい。
【0017】
好適な実施形態では、前記アプリケーションプログラムが、IPv4及びIPv6の双方をサポートするデュアルスタックである場合、前記データベースには、前記アプリケーションプログラムの識別情報に、IPv4を示す情報及びIPv6を示す情報が対応付けて登録されていて、前記ソケットユーティリティーは、IPv4に対応するソケット及びIPv6に対応するソケットを生成してもよい。
【0018】
これにより、デュアルスタックのアプリケーションプログラムは、IPv4に対応するソケット及びIPv6に対応するソケットがそれぞれ自動的に生成される。
【0019】
好適な実施形態では、前記ソケットユーティリティーは、前記アプリケーションプログラムに、前記IPv4に対応するソケット及び前記IPv6に対応するソケットを交互に利用させてデータを受信させるようにしてもよい。
【0020】
これにより、デュアルスタックのアプリケーションプログラムは、IPv4及びIPv6で、それぞれほぼ均等にデータを受信することができる。
【図面の簡単な説明】
【0021】
【図1】本発明の第1の実施形態に係るサーバーで機能する各プログラムのプロトコル階層図。
【図2】本発明の第2の実施形態に係るサーバーで機能する各プログラムのプロトコル階層図。
【図3】サーバーがネットワークを介して接続されたクライアントと通信を行うときの処理手順を示すフローチャート
【図4】受信ポートの登録処理の詳細な手順を示すフローチャート。
【図5】受信ソケットの選択処理の詳細な手順を示すフローチャート。
【図6】本発明の実施例におけるネットワークシステムの概略構成図。
【図7】クライアントの内部構成を示す説明図。
【図8】プリントサーバー装置の内部構成を示す説明図。
【図9】プリンターの内部構成を示す説明図。
【図10】登録テーブル125の具体例を概念的に示す説明図。
【図11】サーバー装置の起動処理の処理ルーチンを示すフローチャート。
【図12】HTTPリクエストに対する処理の処理ルーチンを示すフローチャート。
【図13】HTTPリクエストの一例を概念的に示す説明図。
【発明を実施するための形態】
【0022】
以下、本発明の一実施形態に係るサーバー及びネットワークシステムについて、図面を参照して説明する。
【0023】
本実施形態に係るサーバーは、例えば、CPU、メモリー及びネットワーク通信装置などを備えた汎用的なコンピュータシステムにより構成され、以下に説明する個々の構成要素または機能は、例えば、コンピュータプログラムを実行することにより実現される。
【0024】
図1は、本発明の第1の実施形態に係るサーバーで機能する各プログラムのプロトコル階層を示す図である。
【0025】
同図に示すように、サーバー1では、OS(Operating System)11と、ソケットユーティリティー12と、データベース15と、複数のアプリケーションプログラム(APP)18とが実行されている。
【0026】
OS11には、TCP/IPスタック11aが含まれている。TCP/IPスタック11aにおけるIPスタックには、IPv4スタックとIPv6スタックとが含まれる。
【0027】
各APP18は、それぞれ所定の処理を行う。各APP18は、IPv4またはIPv6のいずれか、または双方をサポートしている。すなわち、各APP18は、IPv4またはIPv6のみをサポートするシングルスタックか、またはv4及びv6の両方をサポートするデュアルスタックである。
【0028】
データベース15には、各APP18がサポートしているIPバージョンが、各APP18のサービス名(識別情報)と対応付けて登録されている。この登録は、例えば、各APP18の起動時に行うようにしても良い。
【0029】
ソケットユーティリティー12は、APP18がTCP/IPで通信を行うためのソケットを生成する。例えば、ソケットユーティリティー12は、APP18のサービス名とそのAPP18のためのポート番号を取得すると、データベース15を参照して、APP18のサービス名と対応付けられているIPバージョンを取得する。そして、ソケットユーティリティー12は、上記の取得した情報に基づいて、ソケットを生成する。例えば、デュアルスタックのAPP18aのサービス名を取得すると、ソケットユーティリティー12は、APP18a用のIPv4対応のソケットとIPv6対応のソケットを生成する。つまり、ソケットユーティリティー12は、APP18a向けのポート番号を確保しIPv4のIPアドレス及びこのポート番号に基づいてIPv4用ソケットを生成する。さらに、ソケットユーティリティー12は、IPv6のIPアドレス及びIPv4と同じポート番号でIPv6用ソケットを生成する。
【0030】
これにより、各APP18が自らソケット生成を行わなくても、ソケットユーティリティー12が全APP18に適したソケットを生成し、各APP18がそのソケットを利用して自在に通信を行うことができる。また、各APP18が、自らがサポートするIPバージョンをデータベース15に登録すれば、ソケットユーティリティー12によって、登録されているIPバージョンに対応するソケットを自動的に生成される。その結果、各APP18は、通信を行う際にはIPバージョンに依存せずに通信を行うことができる。
【0031】
次に、図2は、本発明の第2の実施形態に係るサーバーで機能する各プログラムのプロトコル階層を示す図である。
【0032】
本実施形態では、ソケットユーティリティー12上でディスパッチャーが動作する場合のプロトコル階層を示す。ディスパッチャーは、上位のアプリケーションへのデリバリー条件を判断するためにIPバージョンを必要とする場合がある。例えば、デュアルスタックのアプリケーションが、IPのバージョンに応じて異なる処理を用意しているときは、ディスパッチャーが、受信データが転送されてきたIPバージョンに対応する処理を呼び出す。そのために、本実施形態では、ソケットユーティリティー12からディスパッチャーへIPバージョンを通知する。ここでは、ディスパッチャーとしてHTTPサーバーを用いた場合を例にとって説明する。
【0033】
なお、本実施形態において、第1の実施形態と同じ構成については、同じ符号を付して詳細な説明を省略する場合がある。
【0034】
図2に示すように、サーバー1では、OS11と、ソケットユーティリティー12と、HTTPサーバー13と、WEBサーバー14と、データベース15と、複数のアプリケーションプログラム(APP)18とが実行されている。
【0035】
本実施形態では、データベース15には、HTTPサーバー13が、IPv4及びIPv6をサポートするデュアルスタックとして登録される。さらに、各APP18がサポートしているIPバージョンは、各APP18のサービス名と対応付けてHTTPサーバー13の管理下に登録される。デュアルスタックのAPP18については、それぞれのIPバージョンに対応するモジュール名などがHTTPサーバー13の管理下に登録される。これによって、各APP18に対するリクエスト及び各APP18が発行するリクエストは、すべてHTTPサーバー13を介して通信される。つまり、HTTPサーバー13は、ソケットユーティリティー12に対するインターフェースとなる。
【0036】
ソケットユーティリティー12は、第1の実施形態と同様に、データベース15を参照して、ソケットを生成する。ここでは、ソケットユーティリティー12は、各APP18のためのポート番号をそれぞれ取得して、各ポート番号に対して、HTTPサーバー13の向けのIPv4及びIPv6のソケットを生成する。ここで生成された各ソケットがデータを受信した際、そのソケットのソケットハンドルには、少なくとも、IPバージョン、送信元アドレス、送信元ポート、及び自らのサービス名が格納される。HTTPサーバー13は、このソケットハンドルを取得することにより、そのソケットが受信したデータの送信元を把握できるとともに、IPバージョンを把握することもできる。HTTPサーバー13は、ソケットハンドルに含まれる情報に対応するAPP18のモジュールを呼び出す。例えば、ソケットハンドルに含まれるサービス名(または受信ポート番号)によってAPP18が特定され、IPバージョンによってその特定されたAPP18のいずれのモジュールを呼び出すかが特定される。
【0037】
例えば、あるAPP18bがIPv4のみをサポートするシングルスタックであるときでも、そのAPP18bに対応する、HTTPサーバー13のソケットは2つ生成される(つまり、HTTPサーバー13としてはデュアルスタック)。そして、HTTPサーバー13が、例えば、IPv4でAPP18bに対するリクエストを受信すると、HTTPサーバー13はAPP18bを呼び出し、IPv6でAPP18bに対するリクエストを受信すると、HTTPサーバー13はAPP18bを呼び出さず、そのリクエストは無視される。
【0038】
また、あるAPP18cがIPv4及びIPv6をサポートするデュアルスタックであるときは、HTTPサーバー13にIPv4のときに呼び出すモジュール及びIPv6のときに呼び出すモジュールをそれぞれ登録しておくと、HTTPサーバー13は、受信したソケットに対応するモジュールを呼び出す。
【0039】
このようにすると、IPv4でデータを受信した場合とIPv6でデータを受信した場合で、異なるモジュールにデータを受信させることができる。これにより、同一のAPPであって、IPv4でデータを受信した場合とIPv6でデータを受信した場合で、別々の処理を実行することができる。
【0040】
次に、上述した第1及び第2の実施形態におけるデータ受信処理の処理手順を図3〜図5のフローチャートを参照して説明する。
【0041】
図3は、図1及び図2に示すプロトコル階層に従うプログラムが、ネットワークを介して接続されたクライアントと通信を行うときの処理手順を示すフローチャートである。
【0042】
まず、サーバー1の起動時に、ソケットユーティリティー12は初期化処理を行う(S10)。この初期化処理には、例えば、各APP18が自らのサービス名及びサポートするIPバージョンをデータベース15に登録する処理を含む。次に、ソケットユーティリティー12は、受信ポートごとにソケットを生成して、受信ポートの登録処理を行う(S12)。受信ポートの登録処理の詳細は後述する。ソケットユーティリティー12は、すべての受信ポートの登録処理が完了するまで、ステップS12を繰り返して行う(S14)。
【0043】
全受信ポートの登録が完了すると(S14:Yes)、ステップS12で生成したソケットでのデータ受信及び受信ソケットの選択処理を行う(S16)。受信ソケットの選択処理の詳細は後述する。
【0044】
ステップS16で選択されたソケットを使って、受信したデータに基づいてAPP18が通信処理を行う(S18)。ソケットユーティリティー12が終了するまでの間、ステップS16及びS18の処理が繰り返される(S20)。
【0045】
図4は、ステップS12の受信ポートの登録処理の詳細な手順を示すフローチャートである。
【0046】
まず、ソケットユーティリティー12は、サーバー1で動作しているAPP18のサービス名及びそのAPP18が使用する受信ポート番号を取得する(S120)。ソケットユーティリティー12は、データベース15を参照して、ステップS120で取得したサービス名のAPP18がサポートするIPバージョンを特定する(S122)。そして、ソケットユーティリティー12がソケットを生成し(S124)、生成したソケットの受信ポート番号及びIPバージョンに、それぞれステップS120,S122で取得した受信ポート番号及びIPバージョンを設定する(S126)。
【0047】
ソケットユーティリティー12は、ステップS122で取得したすべてのIPバージョンの設定が完了したか否かを判定する(S128)。未設定のIPバージョンがあれば(S128:No)、ステップS124以降を繰り返し、全IPバージョンについてソケットを生成する。たとえば、デュアルスタックのAPPであれば、それぞれのIPバージョンに対するソケットを生成する。
【0048】
最後に、ソケットユーティリティー12は、この処理で生成した全ソケットに関する情報を、所定の記憶部に登録する(S130)。
【0049】
図5は、ステップS16の受信ソケットの選択処理の詳細な手順を示すフローチャートである。
【0050】
まず、ソケットユーティリティー12は、ステップS12で登録されたソケットを、受信待ちソケットとして設定する(S160)。ここで、各ソケットは、データ受信待ち状態となる(S162、S164)。そして、いずれかのソケットにデータが到着すると(S164:Yes)、ソケットユーティリティー12は、受信したソケットが前回通信したソケットであるか否かを判定する(S166)。
【0051】
例えば、デュアルスタックのAPP18の場合、そのAPP18用のソケットは二つある。このとき、APP18が一方のソケットのみを連続して用いて通信を行うと、他方のソケットにデータが到着していても、APP18と通信が行われないということが起こりうる。そこで、本実施形態では、これを防止するために、二つのソケットに交互に通信を行わせる様に調整する。そのため、ステップS166では、デュアルスタックのAPP18について、今回データを受信したソケットが前回通信したソケットであるか否かを判定する。ここで、今回データを受信したソケットが前回通信をしたソケットでないときは(S166:No)、以降の処理をスキップし、当該ソケットが通信を行うソケットとして選択される。なお、シングルスタックの場合には、ステップS166の判定は常にNoである。
【0052】
一方、今回データを受信したソケットが前回通信をしたソケットであるときは(S166:Yes)、ソケットユーティリティー12は、前回通信をしたソケット以外の他のソケットにデータが到着しているか否かを判定する(S168)。他のソケットにデータが到着してれば(S168:Yes)、そのデータが到着している他のソケットを通信対象のソケットとして設定する(S170)。他のソケットにデータが到着していなければ(S168:No)、ステップS170をスキップし、データが到着しているソケットを通信対象のソケットとして選択する。
【0053】
これにより、デュアルスタックの場合に、一つのソケットだけが集中して通信を行い、他のソケットが通信できないということを防止できる。
【0054】
次に、上述の第2の実施形態で説明したプロトコル階層に基づく一つの実施例について説明する。
【0055】
図6は、本発明の実施例におけるネットワークシステムの概略構成図である。ネットワークシステム1000は、図6に示すように、クライアントコンピュータ(以下、単にクライアントという。)CL1、CL2と、サーバー装置100と、プリンターPRT1、PRT2を含む。クライアントCL1、CL2と、サーバー装置100とは、ローカルエリアネットワーク(LAN)に、それぞれ接続されている。プリンターPRT1、PRT2は、それぞれ、USB(Universal Serial Bus)ケーブルCVを用いてサーバー装置100に接続されている。サーバー装置100は、クライアントCL1、CL2から印刷要求を受け付け、プリンターPRT1、PRT2を用いて印刷を実行するプリントサーバーとして機能する。すなわち、プリンターPRT1、PRT2は、その印刷機能を、サーバー装置100を介して、クライアントCL1、CL2に提供する。
【0056】
図7〜図9を参照してネットワークシステム1000に含まれる各機器の構成について説明する。図7は、クライアントの内部構成を示す説明図である。図8は、プリントサーバー装置の内部構成を示す説明図である。図9は、プリンターの内部構成を示す説明図である。
【0057】
クライアントCL1、CL2は、周知の計算機であり、図7に示すように、中央演算装置(CPU)210と、メモリー220と、ネットワークインターフェースカード(NIC)230と、表示装置240を備えている。CPU210は、メモリー220に格納された各種プログラムを実行することによりクライアントとしての機能を実現する。NIC230は、ネットワークに接続するための通信インターフェースであり、具体的には、イーサネット(登録商標)の仕様に対応したケーブルを介して、LANと接続される。
【0058】
メモリー220には、種々のプログラムやデータが格納されており、図7においては、本実施例における処理に必要な構成を選択的に図示し、本明細書においては、図示された構成について説明する。メモリー220には、HTTPクライアントプログラム221が格納されている。HTTPクライアントプログラム221は、サーバー装置100からサービスの提供を受けるために用いられるプログラムであり、例えば、WEBサービスの提供を受けるためのブラウザ機能、プリントサービスの提供を受けるためのプリンタードライバ機能を実現する。HTTPクライアントプログラム221は、要求送信部2211と、応答受信部2212とを含んでいる。要求送信部2211は、LAN上に接続されたサーバー装置100に対してサービスの提供を要求するHTTPリクエストを送信する。HTTPリクエストは、HTTP(HyperText Transfer Protocol)に従って、作成される。応答受信部2212は、LAN上に接続されたサーバー装置100から上述したHTTPリクエストに対する応答であるHTTPレスポンスを受信する。HTTPリクエストの送信やHTTPレスポンスの受信は、HTTP、および、HTTPの下位プロトコルであるTCP/IPを用いて実行される。
【0059】
サーバー装置100は、図8に示すように、CPU110と、メモリー120と、NIC130と、USBホストI/F部140を備えている。CPU110は、メモリー120に格納されている各種プログラムを実行することにより、サーバー装置100の機能を実現する。NIC130は、LANを介して、クライアントCL1、CL2をはじめとするネットワーク上の機器と通信するためのインターフェースであり、具体的には、イーサネット(登録商標)の仕様に対応したケーブルを介して、LANと接続される。USBホストI/F部140は、USBケーブルCVを接続するためのUSBホストコネクタ141〜143を備え、USBケーブルCVを介して、USBデバイス(図6に示す例では、プリンターPRT1〜PRT3)と接続される。USBホストI/F部140は、USBデバイスと通信するためのインターフェースであり、USB規格に従ったデータ通信を、接続されたUSBデバイスとの間で実行する。
【0060】
メモリー120には、種々のプログラムやデータが格納されており、図8においては、本実施例における処理に必要な構成を選択的に図示し、本明細書においては、図示された構成について説明する。メモリー120には、複数種類のサービスプログラム、すなわち、WEBサービスプログラム121およびプリントサービスプログラム122と、HTTPサーバープログラム123と、登録テーブル125と、ソケットユーティリティープログラム127と、ソケットユーティリティープログラム127が参照するデータベース128とが、格納されている。
【0061】
WEBサービスプログラム121は、クライアントからのHTTPリクエストに応じて、クライアントに対してWEBサービスを提供するプログラムである。WEBサービスは、例えば、WEBページを介して、プリンターPRT1〜3あるいはサーバー装置100に関する情報の提供、プリンターPRT1〜3あるいはサーバー装置100に関する設定(例えば、サーバー装置100のIPアドレスの設定)を行うために用いられる。
【0062】
プリントサービスプログラム122は、クライアントからのHTTPリクエストに応じて、プリントサービスを提供する、すなわち、プリンターPRT1〜PRT3を用いて印刷を実行するプログラムである。このようなHTTPを使用した印刷は、例えば、IPP(Internet Printing Protocol)として標準化されている。
【0063】
WEBサービスプログラム121およびプリントサービスプログラム122は、それぞれ、情報登録実行部1211、1221を備えている。情報登録実行部1211、1221は、後述する登録情報を登録テーブル125及びデータベース128に登録する。登録テーブル125及びデータベース128への登録は、例えば、各サービスプログラム121、122が起動された時に、サービスプログラムごとに実行される。
【0064】
HTTPサーバープログラム123は、主として、クライアントCL1、CL2と、サービスプログラムとのデータのやり取り(リクエストやレスポンスのやり取り)を中継する。HTTPサーバープログラム123は、登録情報取得部1231と、要求中継部1232と、送受信部1233とを含んでいる。登録情報取得部1231は、登録テーブル125に登録されている登録情報を取得する。登録情報には、後述する選択条件および設定情報が含まれる。登録テーブル125の具体的な内容については後述する。送受信部1233は、クライアントからHTTPリクエストを受信すると共に、クライアントに対してHTTPレスポンスを送信する。送受信部1233は、HTTPリクエストの受信やHTTPレスポンスの送信を、HTTP、および、HTTPの下位プロトコルであるTCP/IPを用いて実行するが、これらのプロトコルの設定は、登録情報取得部1231により取得された登録情報に含まれる設定情報に従って実行される。要求中継部1232は、受信されたHTTPリクエストを与えるサービスプログラムを上述した複数種類のサービスプログラムの中から選択すると共に、選択されたサービスプログラムを呼び出す(コールする)。要求中継部1232は、選択されたサービスプログラムに、受信されたHTTPリクエストを与える。サービスプログラムの選択は、HTTPリクエストに含まれる情報と、登録情報取得部1231により取得された登録情報に含まれる選択条件とを比較することにより実行される。
【0065】
ソケットユーティリティープログラム127は、データベース128を参照して、WEBサービスプログラム121及びプリントサービスプログラム122がHTTPサーバープログラム123を介して通信を行うためのソケットを生成する。例えば、データベース128には、HTTPサーバープログラム123がデュアルスタックとして登録されている。また、WEBサービスプログラム121及びプリントサービスプログラム122のサービス名と、WEBサービスプログラム121及びプリントサービスプログラム122がそれぞれサポートしているIPバージョンとは、登録テーブル125に対応付けて登録されている。ソケットユーティリティープログラム127は、登録テーブル125及びデータベース128を参照して、登録テーブル125に登録されている各サービス宛のHTTPリクエストを、HTTPサーバープログラム123が受信するためのIPv4用ソケット及びIPv6用のソケットを生成し、各ソケットを受信可能状態とする。
【0066】
サーバー装置100と接続されるUSBデバイスであるプリンターPRT1〜PRT3について説明する。以下の説明において、各プリンターPRT1〜PRT3を区別する必要がない場合には、符号の末尾の数字を省略し、プリンターPRTと表記する。プリンターPRTは、図9に示すように、コントローラ310と、プリントエンジン320と、USBデバイスI/F部340とを備えている。コントローラ310は、プリンター全体を制御する計算機であり、CPU311と、メモリー312を備えている。メモリー312には、プリンターPRTの制御プログラム313が格納されており、CPU311は、制御プログラム313を実行することによりプリンターPRTを制御する。プリントエンジン320は、実際に印刷を行う機構部分であり、本実施例では、静電気によってトナー粉が付着する現象を利用して印刷用紙上に画像を形成するいわゆるレーザー式のプリントエンジンである。USBデバイスI/F部340は、サーバー装置100と接続するためのUSBデバイスコネクタ345を備え、USBケーブルCVを介して、サーバー装置100と接続される。USBデバイスI/F部340は、サーバー装置100と通信するためのインターフェースであり、USB(Universal Serial Bus)規格に従ったデータ通信を、サーバー装置100との間で実行する。
【0067】
図10を参照して、サーバー装置100のメモリー120に格納されている登録テーブル125について、説明する。図10は、登録テーブル125の具体例を概念的に示す説明図である。登録テーブル125は、各サービスプログラム121、122と、HTTPサーバープログラム123が、それぞれアクセス可能に構成されている。登録テーブル125には、登録情報が、上述したサービスプログラム121、122の各情報登録実行部1211、1221により、サービスプログラムごとに登録されている。図10において登録情報1の列に記述されている登録情報は、WEBサービスプログラム121について登録された情報であり、登録情報2の列に記述されている登録情報は、プリントサービスプログラム122について登録された情報である。登録情報は、呼び出すサービスプログラムを特定するサービス名(図10:1行目)と共に、上述した選択条件(図10:2〜7行目)と、上述した設定情報(図10:8〜13行目)とを含む。本実施例において、図10に示すように、選択条件の項目は、HTTPメソッド、リクエストURI、受信ポート番号、受信プロトコル、IPバージョン、URI判定条件を含んでおり、設定情報の項目は、使用スタックサイズ、受信タイムアウト、送信タイムアウト、コネクション保持時間、マルチキャストアドレス、ループバックを含んでいる。各項目については、HTTPサーバープログラム123の処理について説明する際に、後述する。
【0068】
図11を参照して、サーバー装置100が、起動時に実行する処理(起動処理)について説明する。図11は、サーバー装置の起動処理の処理ルーチンを示すフローチャートである。サーバー装置100が起動されると、メモリー120に格納された各プログラム、すなわち、WEBサービスプログラム121、プリントサービスプログラム122、HTTPサーバープログラム123、及びソケットユーティリティープログラム127が起動される(ステップS102)。
【0069】
続いて、起動された各サービスプログラム121、122の情報登録実行部1211、1221は、登録テーブル125に、図10において説明した登録情報を登録する。さらに、HTTPサーバープログラム123は、データベース128に、HTTPサーバープログラム123をIPv4及びIPv6の双方をサポートするデュアルスタックとして登録する(ステップS104)。例えば、WEBサービスプログラム121の情報登録実行部1211は、図10に示す登録情報1の列に記述された情報を登録する。また、プリントサービスプログラム122の情報登録実行部1221は、図10に示す登録情報2の列に記述された情報を登録する。
【0070】
ソケットユーティリティープログラム127は、上述したように、WEBサービスプログラム121及びプリントサービスプログラム122をサポートするHTTPサーバープログラム123のためのソケットを生成する(ステップS105)。このとき、ソケットユーティリティープログラム127は、登録テーブル125から、受信ポート番号(図10:4行目)を取得する。そして、図10の例では、ソケットユーティリティープログラム127は、受信ポート番号「80」及び「631」のそれぞれについて、IPv4及びIPv6のソケットを生成する。
【0071】
HTTPサーバープログラム123の送受信部1233は、ステップS105で生成したソケットで、HTTPリクエストの着信を待つ(ステップS106)。つまり、送受信部1233は、受信ポート番号「80」が割り当てられているIPv4及びIPv6のソケットと、受信ポート番号「631」のが割り当てられているIPv4及びIPv6のソケットで、HTTPリクエストの着信を待つ。
【0072】
登録されているソケットにデータが到着すると、HTTPサーバープログラム123の送受信部1233は、そのソケットから到着したデータを取得し、HTTPリクエストが着信する(ステップS108)。HTTPリクエストが着信すると(ステップS108:YES)、送受信部1233は、着信したHTTPリクエストに対する処理を呼び出し(ステップS110)、再びHTTPリクエストの着信を待つ。送受信部1233は、HTTPリクエストが着信しない場合には(ステップS110:NO)、HTTPリクエストの着信を待ち続ける。
【0073】
図12および図13を参照して、上述した起動処理におけるステップS110において呼び出されるHTTPリクエストに対する処理について説明する。図12は、HTTPリクエストに対する処理の処理ルーチンを示すフローチャートである。図13は、HTTPリクエストの一例を概念的に示す説明図である。
【0074】
着信したHTTPリクエストに対する処理は、HTTPサーバープログラム123によって実行される。本処理が開始されると、送受信部1233は、HTTPリクエストの先頭部分を受信する(ステップS202)。図13に示すように、HTTPリクエスト500は、先頭から順に、リクエストライン、ヘッダ、ボディを備えている。本ステップでは、少なくともリクエストラインを含むHTTPリクエスト500の先頭部分を受信する。
【0075】
続いて、HTTPサーバープログラム123の要求中継部1232は、登録テーブル125に登録された選択条件と、HTTPリクエスト500の備える属性と比較する(ステップS204)。ここで、選択条件と比較されるHTTPリクエスト500の属性(比較属性)は、HTTPメソッドと、リクエストURIと、受信ポート番号と、受信プロトコルと、IPバージョンである。HTTPメソッドと、リクエストURIは、ステップS202において受信されたHTTPリクエスト500の先頭部分に含まれるリクエストラインに記述されている(図13)。
【0076】
HTTPメソッドは、HTTPリクエスト500がサーバー装置100に実行を要求する処理を示すコマンドであり、例えば、「GET」「POST」などである。リクエストURIは、HTTPリクエスト500が処理の対象を指定する識別子であり、例えば、HTTPリクエストが送信を要求するデータを特定するために用いられる。リクエストURIは、スキーム名(例えば、http)、ホスト名(例えば、xxx.co.jp)、パス名(例えば、/aaa/bbb)を含む絶対パスと、パス名のみからなる相対パスとが使用されるが、本実施例において、選択条件との比較属性として使用されるのは、パス名の部分のみである。受信ポート番号は、HTTPリクエスト500の宛先とされたポート番号である。受信プロトコルは、HTTPリクエスト500の送信に用いられた通信プロトコルであり、本実施例ではトランスポート層の通信プロトコル(TCPあるいはUDP)が選択条件として用いられる。上述したようにIPv4用ソケット及びIPv6用ソケットが、それぞれ生成されているので、IPバージョンは受信ソケットにより定まる。
【0077】
具体的には、要求中継部1232は、登録テーブル125に登録された選択条件(図10:2〜6行目)と、処理対象のHTTPリクエスト500の比較属性を1つずつ比較して、一致する場合には、その選択条件は満足していると判断する。例えば、HTTPリクエスト500のリクエストラインに記述されたメソッドが、「POST」であれば、登録情報2(図10)について、HTTPメソッドに関する選択条件は満たされていると判断される。
【0078】
さらに、登録情報2のリクエストURIに関する選択条件は、「/IPP_printer」であり(図10:3行目)であり、URI判定条件は、「前方一致」となっている(図10:7行目)。かかる場合には、HTTPリクエスト500のリクエストラインに記述されたURIのパス名が、「/IPP_printer」と前方一致する場合に、登録情報2について、リクエストURIに関する選択条件は満たされていると判断される。さらに具体例を挙げて説明すると、HTTPリクエスト500のリクエストラインに記述されたリクエストURIが、「/IPP_printer/aaa」あるいは「/IPP_printer/bbb/ccc」である場合には、いずれも、登録情報2(図10)について、HTTPメソッドに関する選択条件は満たされていると判断される。一方、もし、URI判定条件が「完全一致」とされている場合には、HTTPリクエスト500のリクエストラインに記述されたURIのパス名が、「/IPP_printer」と完全一致する場合に限って、リクエストURIに関する選択条件は満たされていると判断される。例えば、HTTPリクエスト500のリクエストラインに記述されたリクエストURIが、「/IPP_printer」である場合に限って、登録情報2(図10)について、HTTPメソッドに関する選択条件は満たされていると判断され、リクエストURIが、「/IPP_printer」「/IPP_printer/aaa」あるいは「/IPP_printer/bbb/ccc」である場合には、いずれも、登録情報2について、HTTPメソッドに関する選択条件は満たされていないと判断される。
【0079】
ここで、図10において、登録情報1の列におけるHTTPメソッドおよびリクエストURIに関する選択条件は、「特別な条件」と記述されている。かかる場合は、HTTPリクエスト500の各比較属性が、他の登録情報についての選択条件を満足しない場合には、登録情報1について、HTTPメソッドおよびリクエストURIに関する選択条件は、満たされていると判断される。例えば、図10の例では、HTTPリクエスト500の比較属性のいずれかが、登録情報2について登録されている選択条件を満たさない場合に、登録情報1について、HTTPメソッドおよびリクエストURIに関する選択条件は満たされていると判断される。
【0080】
続いて、要求中継部1232は、登録テーブル125に登録された選択条件(図10:2〜6行目)と、HTTPリクエスト500の属性との比較結果に基づいて、選択条件と合致するサービスプログラムを選択する(ステップS206)。具体的には、先のステップS204において、処理対象のHTTPリクエスト500の属性が、図10の2〜6行目までの選択条件を全て満たしていると判断される登録情報がある場合には、その登録情報の1行目に記述されているサービスプログラムが選択される。具体例を挙げて説明すると、例えば、処理対象のHTTPリクエスト500のHTTPメソッド、リクエストURI、受信ポート番号、受信プロトコル、IPバージョンが、それぞれ、「POST」、「/IPP_printer/aaa」、「631」、「TCP」、「v6」である場合には、要求中継部1232は、プリントサービスプログラム122を選択する。一方、処理対象のHTTPリクエスト500のHTTPメソッド、リクエストURI、受信ポート番号、受信プロトコル、IPバージョンが、それぞれ、「GET」、「/config/ccc」、「80」、「TCP」、「v6」である場合には、要求中継部1232は、WEBサービスプログラム121を選択する。もし、選択条件と合致するサービスプログラムが登録テーブル125に登録されていない場合には、HTTPサーバープログラム123は、クライアントに対して、エラーを通知するHTTPレスポンスを送信することとしても良い。
【0081】
サービスプログラムが選択されると、登録情報取得部1231は、選択されたサービスプログラムに応じた設定情報(図10:8〜13行目)を、登録テーブル125から取得する(ステップS208)。本ステップで取得された設定情報は、以降の処理におけるサーバー装置100の動作設定に用いられる。
【0082】
設定情報が取得されると、要求中継部1232は、ステップS206において選択されたサービスプログラムを呼び出す(ステップS210)。ここで、要求中継部1232は、サービスプログラムを呼び出す際に、呼び出されたサービスプログラムが使用するスタック領域を、メモリー120上に割り当てる。割り当てられるスタック領域のサイズは、ステップS208において取得された設定情報に含まれる使用スタックサイズの値(図10:8行目)に設定される。スタック領域は、自動変数、関数の引数、戻り値、リターンアドレス等、サービスプログラムにより処理中に一時的に使用されるデータが格納されるメモリー領域である。要求中継部1232は、サービスプログラムを呼び出す際に、呼び出されたサービスプログラムに対して、処理中のHTTPリクエスト500のうち、ステップS202において受信済みの先頭部分を与える。この結果、サービスプログラムは、HTTPリクエスト500に応じてサービスを提供する処理、例えば、WEBサービスプログラム121であればWEBデータをクライアントに提供する処理、プリントサービスプログラム122であれば印刷を実行する処理を実行するこができる。
【0083】
HTTPサーバープログラム123の送受信部1233は、ステップS210において呼び出されたサービスプログラムの処理に応じて、データの送受信を実行する(ステップS212)。例えば、呼び出されたサービスプログラムは、与えられたHTTPリクエスト500の先頭部分に続くデータ、例えば、図8におけるHTTPボディのデータを受信する必要があるため、送受信部1233はサービスプログラムの要求に応じて、これらのデータをクライアントから受信する。また、呼び出されたサービスプログラムは、与えられたHTTPリクエスト500に対するHTTPレスポンスを作成すると、送受信部1233は、HTTPレスポンスを、クライアントに対して送信する。本ステップにおける送受信部1233によるデータの送受信に関する動作設定は、ステップS208において取得された設定情報に含まれる受信タイムアウト、送信タイムアウト、keep−aliveタイムアウト、マルチキャストアドレス、ループバックの有効または無効の各値(図10:9〜13行目)に設定される。
【0084】
なお、設定情報は、全てが登録される必要はなく、必要な情報だけ登録されれば良い。例えば、WEBサービスプログラム121とプリントサービスプログラム122についての設定情報は、図10に示すように、マルチキャストアドレスと、ループバックの有効または無効に関して、登録されていない。
【0085】
以上、説明した本実施例におけるサーバー装置100によれば、データベース128に登録されたIPバージョンのソケットが、ソケットユーティリティープログラム127により自動的に生成され、これによってHTTPサーバープログラム123の送受信部1233がHTTPリクエスト500を受信できる。この結果、データベース128にサービスプログラムごとのIPバージョンを登録するだけで、HTTPサーバープログラム123がHTTPリクエスト500を受信できるようになる。さらに、上述のサーバー装置100によれば、サービスプログラムごとに登録テーブル125に登録された選択条件と、HTTPリクエスト500の属性とを比較することにより、複数種類のサービスプログラムの中からHTTPリクエスト500について処理すべきサービスプログラムを呼び出す。この結果、登録テーブル125に選択条件を登録するだけで、HTTPサーバープログラム123は、HTTPリクエスト500を処理すべきサービスプログラムを容易に選択することができる。さらに、サービスプログラムごとに登録テーブル125に登録された設定情報を用いて、サービスプログラムごとに、HTTPサーバープログラム123の動作が設定される。この結果、HTTPサーバープログラム123の動作設定が容易になる。
【0086】
以上の説明から解るように、本実施例におけるサーバー装置100は、新たにサービスプログラムを追加する場合、新たなサービスプログラムをインストールして、データベース128及び登録テーブル125に必要な情報を登録するだけで良い。このため、新たなサービスプログラムの追加に伴い、HTTPサーバープログラム123に改造を加える必要がない。この結果、新たにサービスプログラムを追加することが容易になると共に、新たなサービスプログラムの開発が容易になる。
【0087】
さらに、各サービスプログラムは、起動時に自身に関するIPバージョンをデータベース128に、選択条件および設定情報を登録テーブル125にそれぞれ登録する情報登録実行部を備える。この結果、新たなサービスプログラムを追加した場合には、サービスプログラム自身がデータベース128及び登録テーブル125に、自身の動作に必要な情報を登録するので、ユーザの設定負担が軽減される。従って、新たにサービスプログラムを追加することが、さらに、容易になる。
【0088】
また、ソケットユーティリティープログラム127は、データベース128を参照することにより、新たに追加されたサービスプログラムがサポートするIPバージョンを認識できるので、プログラムを変更することなく、IPバージョンの変更に対応することができる。
【0089】
さらに、HTTPサーバープログラム123は、新たなサービス部が追加された場合、登録テーブル125を参照することにより、新たなサービス部の存在を認識して、新たなサービス部に関する送受信処理をサポートするので、新たなサービス部の追加に伴うHTTPサーバープログラム123の改造や、再設定を、ユーザ等が行う必要もない。
【0090】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【0091】
1 サーバー
11 OS
12 ソケットユーティリティー
13 HTTPサーバー
14 WEBサーバー
15 データベース
100 サーバー装置
121 WEBサービスプログラム
122 プリントサービスプログラム
123 HTTPサーバープログラム
125 登録テーブル
127 ソケットユーティリティープログラム
128 データベース
【技術分野】
【0001】
本発明は、アプリケーションプログラムがサポートするIPバージョンに依存せずにデータを受信するための技術に関する。
【背景技術】
【0002】
IP(Internet Protocol)のバージョンは、従来から利用されているIPv4(IPバージョン4)と、近年導入が進んでいるIPv6(IPバージョン6)とがある。IPv4からIPv6への移行期においては、IPv4とIPv6とが併存する。
【0003】
そこで、特許文献1には、IPv4パケット処理部とIPv6パケット処理部を共通化したネットワークデバイスが記載されている。
【0004】
また、アプリケーションプログラムには、IPv4のみサポートするもの、IPv6のみサポートするもの(以上、シングルスタック)、及びIPv4及びIPv6の両方をサポートするもの(デュアルスタック)が存在する。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2001−186184号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
各アプリケーションプログラムは、自らがサポートしているIPバージョンに対応したソケットを作成し、それぞれの受信処理を行う必要がある。つまり、デュアルスタックであれば、一つのアプリケーションが二つのソケットを作成し、それぞれの受信処理を行う必要がある。これらの処理は、それぞれのアプリケーションプログラムに実装されている。従って、あるアプリケーションプログラムにおいてサポートするIPバージョンを変更する場合には、プログラムの修正が必要となる。
【0007】
また、一般に、ソフトウェアを開発する際、利用するIPバージョンを意識しない、つまりIPバージョンに依存しない実装にすることが望ましい。一方で、デュアルスタックのアプリケーションプログラムでは、IPv4、IPv6でそれぞれ異なるモジュールにデータを受信させたい場合もある。
【0008】
そこで、本発明の目的は、アプリケーションプログラムがサポートするIPバージョンに依存せずにデータを受信することである。
【0009】
本発明の別の目的は、IPバージョンに依存してデータを受信するモジュールが異なるようなアプリケーションプログラムの場合には、IPバージョンを把握できるようにすることである。
【課題を解決するための手段】
【0010】
本発明の一つの実施態様に従う、アプリケーションプログラムが動作しているサーバーは、前記アプリケーションプログラムの識別情報と前記アプリケーションプログラムがサポートするIPバージョンとを対応付けて記憶したデータベースと、前記データベースを参照し、前記アプリケーションプログラム用のソケットであって前記IPバージョンに対応したソケットを生成するソケットユーティリティーと、を備え、前記アプリケーションプログラムは、前記生成されたソケットを介してデータを受信する。
【0011】
これにより、アプリケーションプログラムは、自らがサポートしているIPバージョンに依存することなくデータを受信できる。
【0012】
好適な実施形態では、前記生成されたソケットのソケットハンドルを取得し、前記ソケットハンドルに含まれている前記アプリケーションプログラムの識別情報により定まるアプリケーションプログラムを呼び出すディスパッチャーを、さらに備え、前記呼び出されたアプリケーションプログラムが前記生成されたソケットを介してデータを受信するようにしてもよい。
【0013】
これにより、ディスパッチャーが存在する場合であっても、アプリケーションプログラムは、自らがサポートしているIPバージョンに依存することなくデータを受信できる。
【0014】
好適な実施形態では、前記ディスパッチャーは、前記ソケットハンドルに含まれている、前記アプリケーションプログラムがサポートするIPバージョンに対応する前記アプリケーションプログラムのモジュールを呼び出すようにしてもよい。
【0015】
これにより、アプリケーションプログラムがIPバージョンに応じて異なるモジュールがデータを受信する場合でも、ディスパッチャーがIPバージョンを把握できるので、適切なモジュールがデータを受信できる。
【0016】
好適な実施形態では、前記IPバージョンは、IPv4またはIPv6であってもよい。
【0017】
好適な実施形態では、前記アプリケーションプログラムが、IPv4及びIPv6の双方をサポートするデュアルスタックである場合、前記データベースには、前記アプリケーションプログラムの識別情報に、IPv4を示す情報及びIPv6を示す情報が対応付けて登録されていて、前記ソケットユーティリティーは、IPv4に対応するソケット及びIPv6に対応するソケットを生成してもよい。
【0018】
これにより、デュアルスタックのアプリケーションプログラムは、IPv4に対応するソケット及びIPv6に対応するソケットがそれぞれ自動的に生成される。
【0019】
好適な実施形態では、前記ソケットユーティリティーは、前記アプリケーションプログラムに、前記IPv4に対応するソケット及び前記IPv6に対応するソケットを交互に利用させてデータを受信させるようにしてもよい。
【0020】
これにより、デュアルスタックのアプリケーションプログラムは、IPv4及びIPv6で、それぞれほぼ均等にデータを受信することができる。
【図面の簡単な説明】
【0021】
【図1】本発明の第1の実施形態に係るサーバーで機能する各プログラムのプロトコル階層図。
【図2】本発明の第2の実施形態に係るサーバーで機能する各プログラムのプロトコル階層図。
【図3】サーバーがネットワークを介して接続されたクライアントと通信を行うときの処理手順を示すフローチャート
【図4】受信ポートの登録処理の詳細な手順を示すフローチャート。
【図5】受信ソケットの選択処理の詳細な手順を示すフローチャート。
【図6】本発明の実施例におけるネットワークシステムの概略構成図。
【図7】クライアントの内部構成を示す説明図。
【図8】プリントサーバー装置の内部構成を示す説明図。
【図9】プリンターの内部構成を示す説明図。
【図10】登録テーブル125の具体例を概念的に示す説明図。
【図11】サーバー装置の起動処理の処理ルーチンを示すフローチャート。
【図12】HTTPリクエストに対する処理の処理ルーチンを示すフローチャート。
【図13】HTTPリクエストの一例を概念的に示す説明図。
【発明を実施するための形態】
【0022】
以下、本発明の一実施形態に係るサーバー及びネットワークシステムについて、図面を参照して説明する。
【0023】
本実施形態に係るサーバーは、例えば、CPU、メモリー及びネットワーク通信装置などを備えた汎用的なコンピュータシステムにより構成され、以下に説明する個々の構成要素または機能は、例えば、コンピュータプログラムを実行することにより実現される。
【0024】
図1は、本発明の第1の実施形態に係るサーバーで機能する各プログラムのプロトコル階層を示す図である。
【0025】
同図に示すように、サーバー1では、OS(Operating System)11と、ソケットユーティリティー12と、データベース15と、複数のアプリケーションプログラム(APP)18とが実行されている。
【0026】
OS11には、TCP/IPスタック11aが含まれている。TCP/IPスタック11aにおけるIPスタックには、IPv4スタックとIPv6スタックとが含まれる。
【0027】
各APP18は、それぞれ所定の処理を行う。各APP18は、IPv4またはIPv6のいずれか、または双方をサポートしている。すなわち、各APP18は、IPv4またはIPv6のみをサポートするシングルスタックか、またはv4及びv6の両方をサポートするデュアルスタックである。
【0028】
データベース15には、各APP18がサポートしているIPバージョンが、各APP18のサービス名(識別情報)と対応付けて登録されている。この登録は、例えば、各APP18の起動時に行うようにしても良い。
【0029】
ソケットユーティリティー12は、APP18がTCP/IPで通信を行うためのソケットを生成する。例えば、ソケットユーティリティー12は、APP18のサービス名とそのAPP18のためのポート番号を取得すると、データベース15を参照して、APP18のサービス名と対応付けられているIPバージョンを取得する。そして、ソケットユーティリティー12は、上記の取得した情報に基づいて、ソケットを生成する。例えば、デュアルスタックのAPP18aのサービス名を取得すると、ソケットユーティリティー12は、APP18a用のIPv4対応のソケットとIPv6対応のソケットを生成する。つまり、ソケットユーティリティー12は、APP18a向けのポート番号を確保しIPv4のIPアドレス及びこのポート番号に基づいてIPv4用ソケットを生成する。さらに、ソケットユーティリティー12は、IPv6のIPアドレス及びIPv4と同じポート番号でIPv6用ソケットを生成する。
【0030】
これにより、各APP18が自らソケット生成を行わなくても、ソケットユーティリティー12が全APP18に適したソケットを生成し、各APP18がそのソケットを利用して自在に通信を行うことができる。また、各APP18が、自らがサポートするIPバージョンをデータベース15に登録すれば、ソケットユーティリティー12によって、登録されているIPバージョンに対応するソケットを自動的に生成される。その結果、各APP18は、通信を行う際にはIPバージョンに依存せずに通信を行うことができる。
【0031】
次に、図2は、本発明の第2の実施形態に係るサーバーで機能する各プログラムのプロトコル階層を示す図である。
【0032】
本実施形態では、ソケットユーティリティー12上でディスパッチャーが動作する場合のプロトコル階層を示す。ディスパッチャーは、上位のアプリケーションへのデリバリー条件を判断するためにIPバージョンを必要とする場合がある。例えば、デュアルスタックのアプリケーションが、IPのバージョンに応じて異なる処理を用意しているときは、ディスパッチャーが、受信データが転送されてきたIPバージョンに対応する処理を呼び出す。そのために、本実施形態では、ソケットユーティリティー12からディスパッチャーへIPバージョンを通知する。ここでは、ディスパッチャーとしてHTTPサーバーを用いた場合を例にとって説明する。
【0033】
なお、本実施形態において、第1の実施形態と同じ構成については、同じ符号を付して詳細な説明を省略する場合がある。
【0034】
図2に示すように、サーバー1では、OS11と、ソケットユーティリティー12と、HTTPサーバー13と、WEBサーバー14と、データベース15と、複数のアプリケーションプログラム(APP)18とが実行されている。
【0035】
本実施形態では、データベース15には、HTTPサーバー13が、IPv4及びIPv6をサポートするデュアルスタックとして登録される。さらに、各APP18がサポートしているIPバージョンは、各APP18のサービス名と対応付けてHTTPサーバー13の管理下に登録される。デュアルスタックのAPP18については、それぞれのIPバージョンに対応するモジュール名などがHTTPサーバー13の管理下に登録される。これによって、各APP18に対するリクエスト及び各APP18が発行するリクエストは、すべてHTTPサーバー13を介して通信される。つまり、HTTPサーバー13は、ソケットユーティリティー12に対するインターフェースとなる。
【0036】
ソケットユーティリティー12は、第1の実施形態と同様に、データベース15を参照して、ソケットを生成する。ここでは、ソケットユーティリティー12は、各APP18のためのポート番号をそれぞれ取得して、各ポート番号に対して、HTTPサーバー13の向けのIPv4及びIPv6のソケットを生成する。ここで生成された各ソケットがデータを受信した際、そのソケットのソケットハンドルには、少なくとも、IPバージョン、送信元アドレス、送信元ポート、及び自らのサービス名が格納される。HTTPサーバー13は、このソケットハンドルを取得することにより、そのソケットが受信したデータの送信元を把握できるとともに、IPバージョンを把握することもできる。HTTPサーバー13は、ソケットハンドルに含まれる情報に対応するAPP18のモジュールを呼び出す。例えば、ソケットハンドルに含まれるサービス名(または受信ポート番号)によってAPP18が特定され、IPバージョンによってその特定されたAPP18のいずれのモジュールを呼び出すかが特定される。
【0037】
例えば、あるAPP18bがIPv4のみをサポートするシングルスタックであるときでも、そのAPP18bに対応する、HTTPサーバー13のソケットは2つ生成される(つまり、HTTPサーバー13としてはデュアルスタック)。そして、HTTPサーバー13が、例えば、IPv4でAPP18bに対するリクエストを受信すると、HTTPサーバー13はAPP18bを呼び出し、IPv6でAPP18bに対するリクエストを受信すると、HTTPサーバー13はAPP18bを呼び出さず、そのリクエストは無視される。
【0038】
また、あるAPP18cがIPv4及びIPv6をサポートするデュアルスタックであるときは、HTTPサーバー13にIPv4のときに呼び出すモジュール及びIPv6のときに呼び出すモジュールをそれぞれ登録しておくと、HTTPサーバー13は、受信したソケットに対応するモジュールを呼び出す。
【0039】
このようにすると、IPv4でデータを受信した場合とIPv6でデータを受信した場合で、異なるモジュールにデータを受信させることができる。これにより、同一のAPPであって、IPv4でデータを受信した場合とIPv6でデータを受信した場合で、別々の処理を実行することができる。
【0040】
次に、上述した第1及び第2の実施形態におけるデータ受信処理の処理手順を図3〜図5のフローチャートを参照して説明する。
【0041】
図3は、図1及び図2に示すプロトコル階層に従うプログラムが、ネットワークを介して接続されたクライアントと通信を行うときの処理手順を示すフローチャートである。
【0042】
まず、サーバー1の起動時に、ソケットユーティリティー12は初期化処理を行う(S10)。この初期化処理には、例えば、各APP18が自らのサービス名及びサポートするIPバージョンをデータベース15に登録する処理を含む。次に、ソケットユーティリティー12は、受信ポートごとにソケットを生成して、受信ポートの登録処理を行う(S12)。受信ポートの登録処理の詳細は後述する。ソケットユーティリティー12は、すべての受信ポートの登録処理が完了するまで、ステップS12を繰り返して行う(S14)。
【0043】
全受信ポートの登録が完了すると(S14:Yes)、ステップS12で生成したソケットでのデータ受信及び受信ソケットの選択処理を行う(S16)。受信ソケットの選択処理の詳細は後述する。
【0044】
ステップS16で選択されたソケットを使って、受信したデータに基づいてAPP18が通信処理を行う(S18)。ソケットユーティリティー12が終了するまでの間、ステップS16及びS18の処理が繰り返される(S20)。
【0045】
図4は、ステップS12の受信ポートの登録処理の詳細な手順を示すフローチャートである。
【0046】
まず、ソケットユーティリティー12は、サーバー1で動作しているAPP18のサービス名及びそのAPP18が使用する受信ポート番号を取得する(S120)。ソケットユーティリティー12は、データベース15を参照して、ステップS120で取得したサービス名のAPP18がサポートするIPバージョンを特定する(S122)。そして、ソケットユーティリティー12がソケットを生成し(S124)、生成したソケットの受信ポート番号及びIPバージョンに、それぞれステップS120,S122で取得した受信ポート番号及びIPバージョンを設定する(S126)。
【0047】
ソケットユーティリティー12は、ステップS122で取得したすべてのIPバージョンの設定が完了したか否かを判定する(S128)。未設定のIPバージョンがあれば(S128:No)、ステップS124以降を繰り返し、全IPバージョンについてソケットを生成する。たとえば、デュアルスタックのAPPであれば、それぞれのIPバージョンに対するソケットを生成する。
【0048】
最後に、ソケットユーティリティー12は、この処理で生成した全ソケットに関する情報を、所定の記憶部に登録する(S130)。
【0049】
図5は、ステップS16の受信ソケットの選択処理の詳細な手順を示すフローチャートである。
【0050】
まず、ソケットユーティリティー12は、ステップS12で登録されたソケットを、受信待ちソケットとして設定する(S160)。ここで、各ソケットは、データ受信待ち状態となる(S162、S164)。そして、いずれかのソケットにデータが到着すると(S164:Yes)、ソケットユーティリティー12は、受信したソケットが前回通信したソケットであるか否かを判定する(S166)。
【0051】
例えば、デュアルスタックのAPP18の場合、そのAPP18用のソケットは二つある。このとき、APP18が一方のソケットのみを連続して用いて通信を行うと、他方のソケットにデータが到着していても、APP18と通信が行われないということが起こりうる。そこで、本実施形態では、これを防止するために、二つのソケットに交互に通信を行わせる様に調整する。そのため、ステップS166では、デュアルスタックのAPP18について、今回データを受信したソケットが前回通信したソケットであるか否かを判定する。ここで、今回データを受信したソケットが前回通信をしたソケットでないときは(S166:No)、以降の処理をスキップし、当該ソケットが通信を行うソケットとして選択される。なお、シングルスタックの場合には、ステップS166の判定は常にNoである。
【0052】
一方、今回データを受信したソケットが前回通信をしたソケットであるときは(S166:Yes)、ソケットユーティリティー12は、前回通信をしたソケット以外の他のソケットにデータが到着しているか否かを判定する(S168)。他のソケットにデータが到着してれば(S168:Yes)、そのデータが到着している他のソケットを通信対象のソケットとして設定する(S170)。他のソケットにデータが到着していなければ(S168:No)、ステップS170をスキップし、データが到着しているソケットを通信対象のソケットとして選択する。
【0053】
これにより、デュアルスタックの場合に、一つのソケットだけが集中して通信を行い、他のソケットが通信できないということを防止できる。
【0054】
次に、上述の第2の実施形態で説明したプロトコル階層に基づく一つの実施例について説明する。
【0055】
図6は、本発明の実施例におけるネットワークシステムの概略構成図である。ネットワークシステム1000は、図6に示すように、クライアントコンピュータ(以下、単にクライアントという。)CL1、CL2と、サーバー装置100と、プリンターPRT1、PRT2を含む。クライアントCL1、CL2と、サーバー装置100とは、ローカルエリアネットワーク(LAN)に、それぞれ接続されている。プリンターPRT1、PRT2は、それぞれ、USB(Universal Serial Bus)ケーブルCVを用いてサーバー装置100に接続されている。サーバー装置100は、クライアントCL1、CL2から印刷要求を受け付け、プリンターPRT1、PRT2を用いて印刷を実行するプリントサーバーとして機能する。すなわち、プリンターPRT1、PRT2は、その印刷機能を、サーバー装置100を介して、クライアントCL1、CL2に提供する。
【0056】
図7〜図9を参照してネットワークシステム1000に含まれる各機器の構成について説明する。図7は、クライアントの内部構成を示す説明図である。図8は、プリントサーバー装置の内部構成を示す説明図である。図9は、プリンターの内部構成を示す説明図である。
【0057】
クライアントCL1、CL2は、周知の計算機であり、図7に示すように、中央演算装置(CPU)210と、メモリー220と、ネットワークインターフェースカード(NIC)230と、表示装置240を備えている。CPU210は、メモリー220に格納された各種プログラムを実行することによりクライアントとしての機能を実現する。NIC230は、ネットワークに接続するための通信インターフェースであり、具体的には、イーサネット(登録商標)の仕様に対応したケーブルを介して、LANと接続される。
【0058】
メモリー220には、種々のプログラムやデータが格納されており、図7においては、本実施例における処理に必要な構成を選択的に図示し、本明細書においては、図示された構成について説明する。メモリー220には、HTTPクライアントプログラム221が格納されている。HTTPクライアントプログラム221は、サーバー装置100からサービスの提供を受けるために用いられるプログラムであり、例えば、WEBサービスの提供を受けるためのブラウザ機能、プリントサービスの提供を受けるためのプリンタードライバ機能を実現する。HTTPクライアントプログラム221は、要求送信部2211と、応答受信部2212とを含んでいる。要求送信部2211は、LAN上に接続されたサーバー装置100に対してサービスの提供を要求するHTTPリクエストを送信する。HTTPリクエストは、HTTP(HyperText Transfer Protocol)に従って、作成される。応答受信部2212は、LAN上に接続されたサーバー装置100から上述したHTTPリクエストに対する応答であるHTTPレスポンスを受信する。HTTPリクエストの送信やHTTPレスポンスの受信は、HTTP、および、HTTPの下位プロトコルであるTCP/IPを用いて実行される。
【0059】
サーバー装置100は、図8に示すように、CPU110と、メモリー120と、NIC130と、USBホストI/F部140を備えている。CPU110は、メモリー120に格納されている各種プログラムを実行することにより、サーバー装置100の機能を実現する。NIC130は、LANを介して、クライアントCL1、CL2をはじめとするネットワーク上の機器と通信するためのインターフェースであり、具体的には、イーサネット(登録商標)の仕様に対応したケーブルを介して、LANと接続される。USBホストI/F部140は、USBケーブルCVを接続するためのUSBホストコネクタ141〜143を備え、USBケーブルCVを介して、USBデバイス(図6に示す例では、プリンターPRT1〜PRT3)と接続される。USBホストI/F部140は、USBデバイスと通信するためのインターフェースであり、USB規格に従ったデータ通信を、接続されたUSBデバイスとの間で実行する。
【0060】
メモリー120には、種々のプログラムやデータが格納されており、図8においては、本実施例における処理に必要な構成を選択的に図示し、本明細書においては、図示された構成について説明する。メモリー120には、複数種類のサービスプログラム、すなわち、WEBサービスプログラム121およびプリントサービスプログラム122と、HTTPサーバープログラム123と、登録テーブル125と、ソケットユーティリティープログラム127と、ソケットユーティリティープログラム127が参照するデータベース128とが、格納されている。
【0061】
WEBサービスプログラム121は、クライアントからのHTTPリクエストに応じて、クライアントに対してWEBサービスを提供するプログラムである。WEBサービスは、例えば、WEBページを介して、プリンターPRT1〜3あるいはサーバー装置100に関する情報の提供、プリンターPRT1〜3あるいはサーバー装置100に関する設定(例えば、サーバー装置100のIPアドレスの設定)を行うために用いられる。
【0062】
プリントサービスプログラム122は、クライアントからのHTTPリクエストに応じて、プリントサービスを提供する、すなわち、プリンターPRT1〜PRT3を用いて印刷を実行するプログラムである。このようなHTTPを使用した印刷は、例えば、IPP(Internet Printing Protocol)として標準化されている。
【0063】
WEBサービスプログラム121およびプリントサービスプログラム122は、それぞれ、情報登録実行部1211、1221を備えている。情報登録実行部1211、1221は、後述する登録情報を登録テーブル125及びデータベース128に登録する。登録テーブル125及びデータベース128への登録は、例えば、各サービスプログラム121、122が起動された時に、サービスプログラムごとに実行される。
【0064】
HTTPサーバープログラム123は、主として、クライアントCL1、CL2と、サービスプログラムとのデータのやり取り(リクエストやレスポンスのやり取り)を中継する。HTTPサーバープログラム123は、登録情報取得部1231と、要求中継部1232と、送受信部1233とを含んでいる。登録情報取得部1231は、登録テーブル125に登録されている登録情報を取得する。登録情報には、後述する選択条件および設定情報が含まれる。登録テーブル125の具体的な内容については後述する。送受信部1233は、クライアントからHTTPリクエストを受信すると共に、クライアントに対してHTTPレスポンスを送信する。送受信部1233は、HTTPリクエストの受信やHTTPレスポンスの送信を、HTTP、および、HTTPの下位プロトコルであるTCP/IPを用いて実行するが、これらのプロトコルの設定は、登録情報取得部1231により取得された登録情報に含まれる設定情報に従って実行される。要求中継部1232は、受信されたHTTPリクエストを与えるサービスプログラムを上述した複数種類のサービスプログラムの中から選択すると共に、選択されたサービスプログラムを呼び出す(コールする)。要求中継部1232は、選択されたサービスプログラムに、受信されたHTTPリクエストを与える。サービスプログラムの選択は、HTTPリクエストに含まれる情報と、登録情報取得部1231により取得された登録情報に含まれる選択条件とを比較することにより実行される。
【0065】
ソケットユーティリティープログラム127は、データベース128を参照して、WEBサービスプログラム121及びプリントサービスプログラム122がHTTPサーバープログラム123を介して通信を行うためのソケットを生成する。例えば、データベース128には、HTTPサーバープログラム123がデュアルスタックとして登録されている。また、WEBサービスプログラム121及びプリントサービスプログラム122のサービス名と、WEBサービスプログラム121及びプリントサービスプログラム122がそれぞれサポートしているIPバージョンとは、登録テーブル125に対応付けて登録されている。ソケットユーティリティープログラム127は、登録テーブル125及びデータベース128を参照して、登録テーブル125に登録されている各サービス宛のHTTPリクエストを、HTTPサーバープログラム123が受信するためのIPv4用ソケット及びIPv6用のソケットを生成し、各ソケットを受信可能状態とする。
【0066】
サーバー装置100と接続されるUSBデバイスであるプリンターPRT1〜PRT3について説明する。以下の説明において、各プリンターPRT1〜PRT3を区別する必要がない場合には、符号の末尾の数字を省略し、プリンターPRTと表記する。プリンターPRTは、図9に示すように、コントローラ310と、プリントエンジン320と、USBデバイスI/F部340とを備えている。コントローラ310は、プリンター全体を制御する計算機であり、CPU311と、メモリー312を備えている。メモリー312には、プリンターPRTの制御プログラム313が格納されており、CPU311は、制御プログラム313を実行することによりプリンターPRTを制御する。プリントエンジン320は、実際に印刷を行う機構部分であり、本実施例では、静電気によってトナー粉が付着する現象を利用して印刷用紙上に画像を形成するいわゆるレーザー式のプリントエンジンである。USBデバイスI/F部340は、サーバー装置100と接続するためのUSBデバイスコネクタ345を備え、USBケーブルCVを介して、サーバー装置100と接続される。USBデバイスI/F部340は、サーバー装置100と通信するためのインターフェースであり、USB(Universal Serial Bus)規格に従ったデータ通信を、サーバー装置100との間で実行する。
【0067】
図10を参照して、サーバー装置100のメモリー120に格納されている登録テーブル125について、説明する。図10は、登録テーブル125の具体例を概念的に示す説明図である。登録テーブル125は、各サービスプログラム121、122と、HTTPサーバープログラム123が、それぞれアクセス可能に構成されている。登録テーブル125には、登録情報が、上述したサービスプログラム121、122の各情報登録実行部1211、1221により、サービスプログラムごとに登録されている。図10において登録情報1の列に記述されている登録情報は、WEBサービスプログラム121について登録された情報であり、登録情報2の列に記述されている登録情報は、プリントサービスプログラム122について登録された情報である。登録情報は、呼び出すサービスプログラムを特定するサービス名(図10:1行目)と共に、上述した選択条件(図10:2〜7行目)と、上述した設定情報(図10:8〜13行目)とを含む。本実施例において、図10に示すように、選択条件の項目は、HTTPメソッド、リクエストURI、受信ポート番号、受信プロトコル、IPバージョン、URI判定条件を含んでおり、設定情報の項目は、使用スタックサイズ、受信タイムアウト、送信タイムアウト、コネクション保持時間、マルチキャストアドレス、ループバックを含んでいる。各項目については、HTTPサーバープログラム123の処理について説明する際に、後述する。
【0068】
図11を参照して、サーバー装置100が、起動時に実行する処理(起動処理)について説明する。図11は、サーバー装置の起動処理の処理ルーチンを示すフローチャートである。サーバー装置100が起動されると、メモリー120に格納された各プログラム、すなわち、WEBサービスプログラム121、プリントサービスプログラム122、HTTPサーバープログラム123、及びソケットユーティリティープログラム127が起動される(ステップS102)。
【0069】
続いて、起動された各サービスプログラム121、122の情報登録実行部1211、1221は、登録テーブル125に、図10において説明した登録情報を登録する。さらに、HTTPサーバープログラム123は、データベース128に、HTTPサーバープログラム123をIPv4及びIPv6の双方をサポートするデュアルスタックとして登録する(ステップS104)。例えば、WEBサービスプログラム121の情報登録実行部1211は、図10に示す登録情報1の列に記述された情報を登録する。また、プリントサービスプログラム122の情報登録実行部1221は、図10に示す登録情報2の列に記述された情報を登録する。
【0070】
ソケットユーティリティープログラム127は、上述したように、WEBサービスプログラム121及びプリントサービスプログラム122をサポートするHTTPサーバープログラム123のためのソケットを生成する(ステップS105)。このとき、ソケットユーティリティープログラム127は、登録テーブル125から、受信ポート番号(図10:4行目)を取得する。そして、図10の例では、ソケットユーティリティープログラム127は、受信ポート番号「80」及び「631」のそれぞれについて、IPv4及びIPv6のソケットを生成する。
【0071】
HTTPサーバープログラム123の送受信部1233は、ステップS105で生成したソケットで、HTTPリクエストの着信を待つ(ステップS106)。つまり、送受信部1233は、受信ポート番号「80」が割り当てられているIPv4及びIPv6のソケットと、受信ポート番号「631」のが割り当てられているIPv4及びIPv6のソケットで、HTTPリクエストの着信を待つ。
【0072】
登録されているソケットにデータが到着すると、HTTPサーバープログラム123の送受信部1233は、そのソケットから到着したデータを取得し、HTTPリクエストが着信する(ステップS108)。HTTPリクエストが着信すると(ステップS108:YES)、送受信部1233は、着信したHTTPリクエストに対する処理を呼び出し(ステップS110)、再びHTTPリクエストの着信を待つ。送受信部1233は、HTTPリクエストが着信しない場合には(ステップS110:NO)、HTTPリクエストの着信を待ち続ける。
【0073】
図12および図13を参照して、上述した起動処理におけるステップS110において呼び出されるHTTPリクエストに対する処理について説明する。図12は、HTTPリクエストに対する処理の処理ルーチンを示すフローチャートである。図13は、HTTPリクエストの一例を概念的に示す説明図である。
【0074】
着信したHTTPリクエストに対する処理は、HTTPサーバープログラム123によって実行される。本処理が開始されると、送受信部1233は、HTTPリクエストの先頭部分を受信する(ステップS202)。図13に示すように、HTTPリクエスト500は、先頭から順に、リクエストライン、ヘッダ、ボディを備えている。本ステップでは、少なくともリクエストラインを含むHTTPリクエスト500の先頭部分を受信する。
【0075】
続いて、HTTPサーバープログラム123の要求中継部1232は、登録テーブル125に登録された選択条件と、HTTPリクエスト500の備える属性と比較する(ステップS204)。ここで、選択条件と比較されるHTTPリクエスト500の属性(比較属性)は、HTTPメソッドと、リクエストURIと、受信ポート番号と、受信プロトコルと、IPバージョンである。HTTPメソッドと、リクエストURIは、ステップS202において受信されたHTTPリクエスト500の先頭部分に含まれるリクエストラインに記述されている(図13)。
【0076】
HTTPメソッドは、HTTPリクエスト500がサーバー装置100に実行を要求する処理を示すコマンドであり、例えば、「GET」「POST」などである。リクエストURIは、HTTPリクエスト500が処理の対象を指定する識別子であり、例えば、HTTPリクエストが送信を要求するデータを特定するために用いられる。リクエストURIは、スキーム名(例えば、http)、ホスト名(例えば、xxx.co.jp)、パス名(例えば、/aaa/bbb)を含む絶対パスと、パス名のみからなる相対パスとが使用されるが、本実施例において、選択条件との比較属性として使用されるのは、パス名の部分のみである。受信ポート番号は、HTTPリクエスト500の宛先とされたポート番号である。受信プロトコルは、HTTPリクエスト500の送信に用いられた通信プロトコルであり、本実施例ではトランスポート層の通信プロトコル(TCPあるいはUDP)が選択条件として用いられる。上述したようにIPv4用ソケット及びIPv6用ソケットが、それぞれ生成されているので、IPバージョンは受信ソケットにより定まる。
【0077】
具体的には、要求中継部1232は、登録テーブル125に登録された選択条件(図10:2〜6行目)と、処理対象のHTTPリクエスト500の比較属性を1つずつ比較して、一致する場合には、その選択条件は満足していると判断する。例えば、HTTPリクエスト500のリクエストラインに記述されたメソッドが、「POST」であれば、登録情報2(図10)について、HTTPメソッドに関する選択条件は満たされていると判断される。
【0078】
さらに、登録情報2のリクエストURIに関する選択条件は、「/IPP_printer」であり(図10:3行目)であり、URI判定条件は、「前方一致」となっている(図10:7行目)。かかる場合には、HTTPリクエスト500のリクエストラインに記述されたURIのパス名が、「/IPP_printer」と前方一致する場合に、登録情報2について、リクエストURIに関する選択条件は満たされていると判断される。さらに具体例を挙げて説明すると、HTTPリクエスト500のリクエストラインに記述されたリクエストURIが、「/IPP_printer/aaa」あるいは「/IPP_printer/bbb/ccc」である場合には、いずれも、登録情報2(図10)について、HTTPメソッドに関する選択条件は満たされていると判断される。一方、もし、URI判定条件が「完全一致」とされている場合には、HTTPリクエスト500のリクエストラインに記述されたURIのパス名が、「/IPP_printer」と完全一致する場合に限って、リクエストURIに関する選択条件は満たされていると判断される。例えば、HTTPリクエスト500のリクエストラインに記述されたリクエストURIが、「/IPP_printer」である場合に限って、登録情報2(図10)について、HTTPメソッドに関する選択条件は満たされていると判断され、リクエストURIが、「/IPP_printer」「/IPP_printer/aaa」あるいは「/IPP_printer/bbb/ccc」である場合には、いずれも、登録情報2について、HTTPメソッドに関する選択条件は満たされていないと判断される。
【0079】
ここで、図10において、登録情報1の列におけるHTTPメソッドおよびリクエストURIに関する選択条件は、「特別な条件」と記述されている。かかる場合は、HTTPリクエスト500の各比較属性が、他の登録情報についての選択条件を満足しない場合には、登録情報1について、HTTPメソッドおよびリクエストURIに関する選択条件は、満たされていると判断される。例えば、図10の例では、HTTPリクエスト500の比較属性のいずれかが、登録情報2について登録されている選択条件を満たさない場合に、登録情報1について、HTTPメソッドおよびリクエストURIに関する選択条件は満たされていると判断される。
【0080】
続いて、要求中継部1232は、登録テーブル125に登録された選択条件(図10:2〜6行目)と、HTTPリクエスト500の属性との比較結果に基づいて、選択条件と合致するサービスプログラムを選択する(ステップS206)。具体的には、先のステップS204において、処理対象のHTTPリクエスト500の属性が、図10の2〜6行目までの選択条件を全て満たしていると判断される登録情報がある場合には、その登録情報の1行目に記述されているサービスプログラムが選択される。具体例を挙げて説明すると、例えば、処理対象のHTTPリクエスト500のHTTPメソッド、リクエストURI、受信ポート番号、受信プロトコル、IPバージョンが、それぞれ、「POST」、「/IPP_printer/aaa」、「631」、「TCP」、「v6」である場合には、要求中継部1232は、プリントサービスプログラム122を選択する。一方、処理対象のHTTPリクエスト500のHTTPメソッド、リクエストURI、受信ポート番号、受信プロトコル、IPバージョンが、それぞれ、「GET」、「/config/ccc」、「80」、「TCP」、「v6」である場合には、要求中継部1232は、WEBサービスプログラム121を選択する。もし、選択条件と合致するサービスプログラムが登録テーブル125に登録されていない場合には、HTTPサーバープログラム123は、クライアントに対して、エラーを通知するHTTPレスポンスを送信することとしても良い。
【0081】
サービスプログラムが選択されると、登録情報取得部1231は、選択されたサービスプログラムに応じた設定情報(図10:8〜13行目)を、登録テーブル125から取得する(ステップS208)。本ステップで取得された設定情報は、以降の処理におけるサーバー装置100の動作設定に用いられる。
【0082】
設定情報が取得されると、要求中継部1232は、ステップS206において選択されたサービスプログラムを呼び出す(ステップS210)。ここで、要求中継部1232は、サービスプログラムを呼び出す際に、呼び出されたサービスプログラムが使用するスタック領域を、メモリー120上に割り当てる。割り当てられるスタック領域のサイズは、ステップS208において取得された設定情報に含まれる使用スタックサイズの値(図10:8行目)に設定される。スタック領域は、自動変数、関数の引数、戻り値、リターンアドレス等、サービスプログラムにより処理中に一時的に使用されるデータが格納されるメモリー領域である。要求中継部1232は、サービスプログラムを呼び出す際に、呼び出されたサービスプログラムに対して、処理中のHTTPリクエスト500のうち、ステップS202において受信済みの先頭部分を与える。この結果、サービスプログラムは、HTTPリクエスト500に応じてサービスを提供する処理、例えば、WEBサービスプログラム121であればWEBデータをクライアントに提供する処理、プリントサービスプログラム122であれば印刷を実行する処理を実行するこができる。
【0083】
HTTPサーバープログラム123の送受信部1233は、ステップS210において呼び出されたサービスプログラムの処理に応じて、データの送受信を実行する(ステップS212)。例えば、呼び出されたサービスプログラムは、与えられたHTTPリクエスト500の先頭部分に続くデータ、例えば、図8におけるHTTPボディのデータを受信する必要があるため、送受信部1233はサービスプログラムの要求に応じて、これらのデータをクライアントから受信する。また、呼び出されたサービスプログラムは、与えられたHTTPリクエスト500に対するHTTPレスポンスを作成すると、送受信部1233は、HTTPレスポンスを、クライアントに対して送信する。本ステップにおける送受信部1233によるデータの送受信に関する動作設定は、ステップS208において取得された設定情報に含まれる受信タイムアウト、送信タイムアウト、keep−aliveタイムアウト、マルチキャストアドレス、ループバックの有効または無効の各値(図10:9〜13行目)に設定される。
【0084】
なお、設定情報は、全てが登録される必要はなく、必要な情報だけ登録されれば良い。例えば、WEBサービスプログラム121とプリントサービスプログラム122についての設定情報は、図10に示すように、マルチキャストアドレスと、ループバックの有効または無効に関して、登録されていない。
【0085】
以上、説明した本実施例におけるサーバー装置100によれば、データベース128に登録されたIPバージョンのソケットが、ソケットユーティリティープログラム127により自動的に生成され、これによってHTTPサーバープログラム123の送受信部1233がHTTPリクエスト500を受信できる。この結果、データベース128にサービスプログラムごとのIPバージョンを登録するだけで、HTTPサーバープログラム123がHTTPリクエスト500を受信できるようになる。さらに、上述のサーバー装置100によれば、サービスプログラムごとに登録テーブル125に登録された選択条件と、HTTPリクエスト500の属性とを比較することにより、複数種類のサービスプログラムの中からHTTPリクエスト500について処理すべきサービスプログラムを呼び出す。この結果、登録テーブル125に選択条件を登録するだけで、HTTPサーバープログラム123は、HTTPリクエスト500を処理すべきサービスプログラムを容易に選択することができる。さらに、サービスプログラムごとに登録テーブル125に登録された設定情報を用いて、サービスプログラムごとに、HTTPサーバープログラム123の動作が設定される。この結果、HTTPサーバープログラム123の動作設定が容易になる。
【0086】
以上の説明から解るように、本実施例におけるサーバー装置100は、新たにサービスプログラムを追加する場合、新たなサービスプログラムをインストールして、データベース128及び登録テーブル125に必要な情報を登録するだけで良い。このため、新たなサービスプログラムの追加に伴い、HTTPサーバープログラム123に改造を加える必要がない。この結果、新たにサービスプログラムを追加することが容易になると共に、新たなサービスプログラムの開発が容易になる。
【0087】
さらに、各サービスプログラムは、起動時に自身に関するIPバージョンをデータベース128に、選択条件および設定情報を登録テーブル125にそれぞれ登録する情報登録実行部を備える。この結果、新たなサービスプログラムを追加した場合には、サービスプログラム自身がデータベース128及び登録テーブル125に、自身の動作に必要な情報を登録するので、ユーザの設定負担が軽減される。従って、新たにサービスプログラムを追加することが、さらに、容易になる。
【0088】
また、ソケットユーティリティープログラム127は、データベース128を参照することにより、新たに追加されたサービスプログラムがサポートするIPバージョンを認識できるので、プログラムを変更することなく、IPバージョンの変更に対応することができる。
【0089】
さらに、HTTPサーバープログラム123は、新たなサービス部が追加された場合、登録テーブル125を参照することにより、新たなサービス部の存在を認識して、新たなサービス部に関する送受信処理をサポートするので、新たなサービス部の追加に伴うHTTPサーバープログラム123の改造や、再設定を、ユーザ等が行う必要もない。
【0090】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【符号の説明】
【0091】
1 サーバー
11 OS
12 ソケットユーティリティー
13 HTTPサーバー
14 WEBサーバー
15 データベース
100 サーバー装置
121 WEBサービスプログラム
122 プリントサービスプログラム
123 HTTPサーバープログラム
125 登録テーブル
127 ソケットユーティリティープログラム
128 データベース
【特許請求の範囲】
【請求項1】
アプリケーションプログラムが動作しているサーバーであって、
前記アプリケーションプログラムの識別情報と前記アプリケーションプログラムがサポートするIPバージョンとを対応付けて記憶したデータベースと、
前記データベースを参照し、前記アプリケーションプログラム用のソケットであって前記IPバージョンに対応したソケットを生成するソケットユーティリティーと、を備え、
前記アプリケーションプログラムは、前記生成されたソケットを介してデータを受信することを特徴とするサーバー。
【請求項2】
前記生成されたソケットのソケットハンドルを取得し、前記ソケットハンドルに含まれている前記アプリケーションプログラムの識別情報により定まるアプリケーションプログラムを呼び出すディスパッチャーを、さらに備え、
前記呼び出されたアプリケーションプログラムが前記生成されたソケットを介してデータを受信する、請求項1記載のサーバー。
【請求項3】
前記IPバージョンは、IPv4またはIPv6である、請求項1または2に記載のサーバー。
【請求項4】
前記ディスパッチャーは、前記ソケットハンドルに含まれている、前記アプリケーションプログラムがサポートするIPバージョンに対応する前記アプリケーションプログラムのモジュールを呼び出す、請求項2記載のサーバー。
【請求項5】
前記アプリケーションプログラムが、IPv4及びIPv6の双方をサポートするデュアルスタックである場合、
前記データベースには、前記アプリケーションプログラムの識別情報に、IPv4を示す情報及びIPv6を示す情報が対応付けて登録されていて、
前記ソケットユーティリティーは、IPv4に対応するソケット及びIPv6に対応するソケットを生成する、請求項1〜3のいずれかに記載のサーバー。
【請求項6】
前記ソケットユーティリティーは、前記アプリケーションプログラムに、前記IPv4に対応するソケット及び前記IPv6に対応するソケットを交互に利用させてデータを受信させる、請求項5記載のサーバー。
【請求項7】
アプリケーションプログラムの識別情報と前記アプリケーションプログラムがサポートするIPバージョンとをデータベースに登録するステップと、
前記データベースを参照し、前記アプリケーションプログラム用のソケットであって前記IPバージョンに対応したソケットを生成するステップと、
前記アプリケーションプログラムは、前記生成されたソケットを介してデータを受信するステップと、を行うデータ受信方法。
【請求項1】
アプリケーションプログラムが動作しているサーバーであって、
前記アプリケーションプログラムの識別情報と前記アプリケーションプログラムがサポートするIPバージョンとを対応付けて記憶したデータベースと、
前記データベースを参照し、前記アプリケーションプログラム用のソケットであって前記IPバージョンに対応したソケットを生成するソケットユーティリティーと、を備え、
前記アプリケーションプログラムは、前記生成されたソケットを介してデータを受信することを特徴とするサーバー。
【請求項2】
前記生成されたソケットのソケットハンドルを取得し、前記ソケットハンドルに含まれている前記アプリケーションプログラムの識別情報により定まるアプリケーションプログラムを呼び出すディスパッチャーを、さらに備え、
前記呼び出されたアプリケーションプログラムが前記生成されたソケットを介してデータを受信する、請求項1記載のサーバー。
【請求項3】
前記IPバージョンは、IPv4またはIPv6である、請求項1または2に記載のサーバー。
【請求項4】
前記ディスパッチャーは、前記ソケットハンドルに含まれている、前記アプリケーションプログラムがサポートするIPバージョンに対応する前記アプリケーションプログラムのモジュールを呼び出す、請求項2記載のサーバー。
【請求項5】
前記アプリケーションプログラムが、IPv4及びIPv6の双方をサポートするデュアルスタックである場合、
前記データベースには、前記アプリケーションプログラムの識別情報に、IPv4を示す情報及びIPv6を示す情報が対応付けて登録されていて、
前記ソケットユーティリティーは、IPv4に対応するソケット及びIPv6に対応するソケットを生成する、請求項1〜3のいずれかに記載のサーバー。
【請求項6】
前記ソケットユーティリティーは、前記アプリケーションプログラムに、前記IPv4に対応するソケット及び前記IPv6に対応するソケットを交互に利用させてデータを受信させる、請求項5記載のサーバー。
【請求項7】
アプリケーションプログラムの識別情報と前記アプリケーションプログラムがサポートするIPバージョンとをデータベースに登録するステップと、
前記データベースを参照し、前記アプリケーションプログラム用のソケットであって前記IPバージョンに対応したソケットを生成するステップと、
前記アプリケーションプログラムは、前記生成されたソケットを介してデータを受信するステップと、を行うデータ受信方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【公開番号】特開2010−176164(P2010−176164A)
【公開日】平成22年8月12日(2010.8.12)
【国際特許分類】
【出願番号】特願2009−14986(P2009−14986)
【出願日】平成21年1月27日(2009.1.27)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
【公開日】平成22年8月12日(2010.8.12)
【国際特許分類】
【出願日】平成21年1月27日(2009.1.27)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)
【Fターム(参考)】
[ Back to top ]