(57)【要約】【課題】情報処理装置が提供する接続済みソケット格納用のキューのキューサイズを有効利用し、かつ、接続済みソケット格納用のキューが溢れて情報処理装置が過負荷状態に陥ったときでも、後続のクライアント装置からのリクエストを受け付けることができるようにする。【解決手段】サーバ装置１が備えるコネクション受付部１１が、クライアント装置２との接続を確立し、接続が確立されたクライアント装置からユーザ情報を受信し、格納部１２が、クライアント装置のリクエストのエントリをコネクションキュー２０に格納し、拒否部１３が、コネクションキュー２０に格納されるエントリの総数が所定値を超えたときに、コネクションキュー２０から外すエントリを決定し、決定されたエントリをコネクションキュー２０から外し、エントリに対応するクライアント装置２との接続を切断する。【選択図】図３
2009169704.tif 000002
【特許請求の範囲】
【請求項１】
クライアント装置からのリクエストを処理する情報処理装置における前記リクエストの受付処理プログラムであって、
コンピュータに、
前記クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立処理と、
該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信処理と、
前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納処理と、
前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定処理と、
前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断処理とを実行させる
ことを特徴とするリクエスト受付処理プログラム。
【請求項２】
請求項１に記載のリクエスト受付処理プログラムにおいて、
前記決定処理は、前記エントリの数が最も多いクライアント装置に対応するエントリを前記コネクションキューから外すエントリとして決定する
ことを特徴とするリクエスト受付処理プログラム。
【請求項３】
請求項１に記載のリクエスト受付処理プログラムにおいて、
前記決定処理は、前記ユーザ情報を用いて求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理プログラム。
【請求項４】
請求項１に記載のリクエスト受付処理プログラムにおいて、
前記受信処理は、前記接続が確立されたクライアント装置から、前記ユーザ情報の代わりに、サービス種別情報を受信し、
前記決定処理は、前記サービス種別情報から求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理プログラム。
【請求項５】
請求項１乃至４のいずれか１項に記載のリクエスト受付処理プログラムにおいて、
前記決定処理は、更に、エントリが最も最近に前記コネクションキューに格納されたエントリであるかを判断し、該判断結果に基づいて前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理プログラム。
【請求項６】
情報処理装置であって、
クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立手段と、
該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信手段と、
前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納手段と、
前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定手段と、
前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断手段とを備える
ことを特徴とする情報処理装置。
【請求項７】
クライアント装置からのリクエストを処理する情報処理装置における前記リクエストの受付処理方法であって、
前記クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立ステップと、
該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信ステップと、
前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納ステップと、
前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定ステップと、
前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断ステップとを有する
ことを特徴とするリクエスト受付処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアント装置からのリクエストを受付処理するリクエストの受付処理プログラム、情報処理装置、及びリクエスト受付処理方法に関する。
【背景技術】
【０００２】
パケットに即時性、廃棄性の優先度を持たせ、通常時には即時性の優先度が高い音声パケットから順にキューから取り出し、輻輳時には廃棄性の優先度が低い音声パケットを廃棄することによって、パケットを適切にフロー制御する、パケット交換機の輻輳制御方法が提案されている（特許文献１参照）。
【特許文献１】特開平０１−２２１０４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ＴＣＰクライアントサーバシステムにおいて、クライアント装置からサーバ装置に対して一度に多数のリクエストが発行されると、サーバアプリケーションの接続確立（accept()処理による接続済みソケットの作成）頻度が、クライアント装置からのリクエストの到着頻度に追いつかなくなり、サーバ装置が過負荷状態になることがある。サーバ装置が過負荷状態に陥り、リッスンソケットのバックログキューがオーバーフローする（溢れる）と、従来のクライアントサーバシステムでは、後続のクライアント装置からのリクエストを受け付けられなくなる。リッスンソケットは、サーバ装置が、クライアント装置からの接続要求を受け付けるためのソケットである。また、バックログキューは、クライアント装置からの接続要求を格納するキューである。
【０００４】
上記のようなＴＣＰクライアントサーバシステムで、あるクライアント装置のユーザが多量のリクエストを発行し、バックログキューが溢れると、後続のユーザのアクセスは無条件に拒否される。このように、あるユーザの過剰利用が他のユーザの利用に影響を与えると、ユーザ間の不公平が発生する。
【０００５】
このようなユーザ間の不公平を解決する技術として、以下に説明するようなキュー分割方式がある。まず、サーバ装置に、接続済みソケットを格納するキューをユーザ毎に設ける。サーバ装置が、リッスンソケットのバックログキューがオーバーフローしないように、他の処理より優先的に接続確立処理を行って接続済みソケットを作成し、作成した接続済みソケットをユーザ毎のキューに格納していく。サーバ装置は、リクエストしたユーザのキューが溢れたら、そのユーザの接続確立を拒否し、リクエストしたユーザのキューが空いていたらそのユーザのリクエストを受け付ける。このキュー分割方式では、常に各ユーザ用のキューが確保されているので、他のユーザによるリクエストに影響されてアクセスが拒否されることはない。しかし、この方式でも以下に述べるような問題がある。
【０００６】
上述したようなキュー分割方式は、ユーザ毎にキューサイズを設定する必要があるので、ユーザ数が多い場合や、リクエスト数が特定のユーザに偏っている場合は、サーバ装置のリソースを効率的に利用できないという欠点がある。例えば、各ユーザのキューサイズを、サーバ装置全体で確保できるキューサイズを等分したサイズに設定すると、特定のユーザが多数のリクエストを発行し、他のユーザがリクエストを発行していない場合に、サーバ装置は、システム全体で確保できるキューサイズのユーザ数分の１しかリクエストを受け付けられない状態になる。各ユーザのキューサイズは、工夫すれば、特定のアクセスパターンで最適になるように設定することができるかもしれないが、全てのアクセスパターンにおいて適切なキューサイズを各ユーザに設定することは不可能である。
【０００７】
本発明は、情報処理装置が提供する接続済みソケット格納用のキューのキューサイズを有効利用し、かつ、該接続済みソケット格納用のキューが溢れて情報処理装置が過負荷状態に陥ったときでも、後続のクライアント装置からのリクエストを受け付けることができるリクエスト受付処理プログラムの提供を目的とする。
【０００８】
また、本発明は、接続済みソケット格納用のキューのキューサイズを有効利用し、かつ、該接続済みソケット格納用のキューが溢れて過負荷状態に陥ったときでも、後続のクライアント装置からのリクエストを受け付けることができる情報処理装置の提供を目的とする。
【０００９】
また、本発明は、情報処理装置が提供する接続済みソケット格納用のキューのキューサイズを有効利用し、かつ、該接続済みソケット格納用のキューが溢れて情報処理装置が過負荷状態に陥ったときでも、後続のクライアント装置からのリクエストを受け付けることができるリクエスト受付処理方法の提供を目的とする。
【課題を解決するための手段】
【００１０】
本リクエストの受付処理プログラムは、クライアント装置からのリクエストを処理する情報処理装置における前記リクエストの受付処理プログラムであって、コンピュータに、前記クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立処理と、該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信処理と、前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納処理と、前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定処理と、前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断処理とを実行させる。
【００１１】
好ましくは、本リクエスト受付処理プログラムにおいて、前記決定処理は、前記エントリの数が最も多いクライアント装置に対応するエントリを前記コネクションキューから外すエントリとして決定する。
【００１２】
好ましくは、本リクエスト受付処理プログラムにおいて、前記決定処理は、前記ユーザ情報を用いて求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する。
【００１３】
好ましくは、本リクエスト受付処理プログラムにおいて、前記受信処理は、前記接続が確立されたクライアント装置から、前記ユーザ情報の代わりに、サービス種別情報を受信し、前記決定処理は、前記サービス種別情報から求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する。
【００１４】
好ましくは、本リクエスト受付処理プログラムにおいて、前記決定処理は、更に、エントリが最も最近に前記コネクションキューに格納されたエントリであるかを判断し、該判断結果に基づいて前記コネクションキューから外すエントリを決定する。
【００１５】
また、本情報処理装置は、情報処理装置であって、クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立手段と、該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信手段と、前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納手段と、前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定手段と、前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断手段とを備える。
【００１６】
また、本リクエストの受付処理方法は、クライアント装置からのリクエストを処理する情報処理装置における前記リクエストの受付処理方法であって、前記クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立ステップと、該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信ステップと、前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納ステップと、前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定ステップと、前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断ステップとを有する。
【発明の効果】
【００１７】
情報処理装置が提供するコネクションキューのキューサイズを有効利用することができ、かつ、コネクションキューが溢れて情報処理装置が過負荷状態に陥ったときでも、後続のクライアント装置からのリクエストを受け付けることが可能となる。
【００１８】
また、リクエストの処理についてクライアント装置間の公平を図ることができる。
【００１９】
また、接続を切断され難い度合いである優先度が最も低いクライアント装置の接続を切断することが可能となる。
【００２０】
また、最も最近にコネクションキューに格納されたエントリを該コネクションキューから外すことが可能となる。
【発明を実施するための最良の形態】
【００２１】
以下に、本実施形態について、図を用いて説明する。図１は、本リクエスト受付処理方法の概要を説明する図である。図１に示すサーバ装置１は、クライアント装置（図１では図示を省略）からのリクエストを処理する情報処理装置である。リクエストは、クライアント装置からサーバ装置１に対する要求であり、少なくとも、クライアント装置からサーバ装置１に対する接続要求と、クライアント装置からサーバ装置１に対する、該クライアント装置が求めるサービス内容に応じた処理の実行要求とを含む。サーバ装置１が、クライアント装置からの接続要求を受け付けて、接続を確立し（図１の＃ａを参照）、クライアント装置のリクエストのエントリ（接続済みソケット）をコネクションキュー２０の最後尾に格納する（図１の＃ｂを参照）。コネクションキュー２０は、接続が確立された全てのクライアント装置の接続済みソケットを格納するキューである。サーバ装置１は、コネクションキュー２０に格納されている先頭のエントリを取り出して（図１の＃ｃを参照）、クライアント装置からの要求リクエストを処理する（図１の＃ｄを参照）。コネクションキュー２０に格納されるエントリの総数が所定値（キューサイズ）を超えた場合、サーバ装置１は、コネクションキュー２０から外すエントリを選択し（図１の＃ｅを参照）、選択されたエントリに対応するクライアント装置との接続を切断する（図１の＃ｆを参照）。
【００２２】
図２は、図１を参照して説明したリクエスト受付処理方法によるクライアント装置の状態遷移を示す図である。クライアント装置について接続が確立されると、接続済みソケットがコネクションキュー２０に格納されて、保留状態となる。保留状態は、サーバ装置１との接続が切断されるか否かが保留された状態である。保留状態において、所定の条件下で、接続済みソケットがコネクションキュー２０から取り出されてリクエスト処理状態となり、クライアント装置のリクエストの処理が実行される。また、上記保留状態において、クライアント装置の接続済みソケットがコネクションキュー２０から外すエントリに対応するソケットとして選択されると、該接続済みソケットがコネクションキュー２０から外されて、該クライアント装置がサーバ装置１との接続を切断され、終了状態となる。
【００２３】
図３は、本発明の実施例のシステム構成を示す図である。サーバ装置１は、図示を省略するネットワークを介して、１又は複数のクライアント装置２と接続される。
【００２４】
サーバ装置１は、オペレーティングシステムＴＣＰ通信処理部３０とサーバアプリケーション部３１とを備える。
【００２５】
オペレーティングシステムＴＣＰ通信処理部３０は、サーバ装置１のオペレーティングシステムが備える周知のＴＣＰ通信処理機能を有する。具体的には、オペレーティングシステムＴＣＰ通信処理部３０は、クライアント装置２からの接続要求をバックログキュー１６に格納する。また、オペレーティングシステムＴＣＰ通信処理部３０は、接続要求をしたクライアント装置２に対応する接続済みソケットを作成する。
【００２６】
サーバアプリケーション部３１は、コネクション受付部１１、格納部１２、拒否部１３、取出部１４、リクエスト処理部１５、処理開始／接続切断通知部１７、コネクションキュー２０を備え、これら各部によって本実施例のリクエスト受付処理を実現する。
【００２７】
コネクション受付部１１は、クライアント装置２から接続要求を受けて、該クライアント装置２との接続を確立する。具体的には、コネクション受付部１１は、クライアント装置２から接続要求がある度、オペレーティングシステムＴＣＰ通信処理部３０によりバックログキュー１６に格納された接続要求を、オペレーティングシステムＴＣＰ通信処理部３０に要求することで、該バックログキュー１６から接続要求を取り出して接続済みソケットを作成する。接続済みソケットは、クライアント装置２のリクエストのエントリである。コネクション受付部１１は、バックログキュー１６が溢れないようにするために、接続要求がバックログキュー１６に格納される度にオペレーティングシステムＴＣＰ通信処理部３０に要求し、接続済みソケットを作成する。
【００２８】
また、コネクション受付部１１は、接続が確立されたクライアント装置２から該クライアント装置のユーザ情報を受信する。ユーザ情報は、クライアント装置２のユーザを一意に識別する識別情報（例えば、ユーザＩＤ）を含む情報である。コネクション受付部１１が、接続が確立されたクライアント装置から、ユーザ情報の代わりに、サービス種別情報を受信するようにしてもよい。サービス種別情報は、クライアント装置２がサーバ装置１に対して処理を求めるサービスの種別（例えば、情報表示、ジョブ投入等）を示す情報である。格納部１２は、接続済みソケット（リクエストのエントリ）を、接続済みソケットが作成される度にコネクションキュー２０に格納する。
【００２９】
拒否部１３は、コネクションキュー２０が溢れたときに、コネクションキュー２０から外すエントリを決定（選択）する。コネクションキュー２０が溢れたときとは、コネクションキュー２０に格納されるエントリの総数が所定値（例えば、キューサイズ）を超えたときである。拒否部１３が、エントリの数が最も多いクライアント装置に対応するエントリをコネクションキュー２０から外すエントリとして決定するようにしてもよい。また、拒否部１３が、ユーザ情報を用いて求まる優先度に基づいて、コネクションキュー２０から外すエントリを決定するようにしてもよい。また、拒否部１３が、コネクション受付部１１が受信したサービス種別情報から求まる優先度に基づいて、コネクションキュー２０から外すエントリを決定するようにしてもよい。拒否部１３が、クライアント装置２が属するグループについて予め定められた優先度や、クライアント装置２が接続を試みた時間等に基づいて、コネクションキュー２０から外すエントリを決定するようにしてもよい。また、拒否部１３が、更に、エントリが最も最近にコネクションキュー２０に格納されたエントリであるかを判断し、該判断結果に基づいてコネクションキュー２０から外すエントリを決定するようにしてもよい。
【００３０】
また、拒否部１３は、上記決定されたエントリをコネクションキュー２０から外し、該エントリに対応するクライアント装置２との接続を切断する。また、拒否部１３は、接続が切断されたクライアント装置２に対して、接続が切断されたことを処理開始／接続切断通知部１７を通じて通知する。
【００３１】
取出部１４は、バックログキュー１６に接続要求が格納されていない場合に、コネクションキュー２０の先頭に格納されているエントリをコネクションキュー２０から取り出す。リクエスト処理部１５は、取出部１４によって取り出されたエントリに対応するクライアント装置２のリクエストの処理（クライアント装置２が要求するサービス内容に応じた処理）を実行する。
【００３２】
処理開始／接続切断通知部１７は、接続が切断されたクライアント装置２に対して、接続が切断されたことを通知する。また、処理開始／接続切断通知部１７は、後述する処理開始要求をクライアント装置２に対して送信する。
【００３３】
なお、サーバ装置１及びサーバ装置１が備える各部の機能は、ＣＰＵとその上で実行されるプログラムにより実現される。当該本発明を実現するプログラムは、コンピュータが読み取り可能な記録媒体、例えば半導体メモリ、ハードディスク、ＣＤ−ＲＯＭ、ＤＶＤ等に格納することができ、これらの記録媒体に記録して提供され、又は、通信インタフェースを介してネットワークを利用した送受信により提供される。
【００３４】
図４は、図３に示すサーバ装置とクライアント装置とにおける処理シーケンスの一例を説明する図である。図４は、コネクションキュー２０が溢れていないときの処理（正常処理）を示す。図４の＃１乃至＃３は、サーバ装置１の初期化処理を示す。サーバ装置１が備える図示を省略する所定の処理部（初期化処理部）が初期化処理を実行する。すなわち、＃１において、サーバ装置１が備える初期化処理部が、リッスンソケット（ｌｓｏｃｋ）を作成する（ｌｓｏｃｋ＝ｓｏｃｋｅｔ（））。＃２において、初期化処理部が、サーバアドレスをリッスンソケットに割り付ける（ｂｉｎｄ（ｌｓｏｃｋ））。そして、＃３において、初期化処理部がバックログキュー１６を作成し、クライアント装置２からの接続要求を待つ（ｌｉｓｔｅｎ（ｌｓｏｃｋ））。
【００３５】
＃１’において、クライアント装置２が、ソケットを生成する（ｓｏｃｋ＝ｓｏｃｋｅｔ（））。そして、＃２’において、クライアント装置２が、サーバ装置１に対して接続要求を行う（ｃｏｎｎｅｃｔ（ｓｏｃｋ））。次に、＃４において、サーバ装置１のオペレーティングシステムＴＣＰ通信処理部３０が、クライアント装置２からの接続要求をバックログキュー１６に格納する。＃５において、コネクション受付部１１が、オペレーティングシステムＴＣＰ通信処理部３０に問い合わせてバックログキュー１６に接続要求があるかをチェックする（ｓｅｌｅｃｔ（ｌｓｏｃｋ））。バックログキュー１６に接続要求がある場合、＃６において、オペレーティングシステムＴＣＰ通信処理部３０が、該接続要求をバックログキュー１６から取り出して、該接続要求をしたクライアント装置２に対応する接続済みソケット（ｃｓｏｃｋ）を作成し、該接続済みソケットをコネクション受付部１１に渡す（ｃｓｏｃｋ＝ａｃｃｅｐｔ（ｌｓｏｃｋ））。その結果、＃３’において、クライアント装置２とサーバ装置１との間の接続が確立する。
【００３６】
次に、＃７において、コネクション受付部１１が、クライアント装置２からのユーザＩＤ（ｕｉｄ）の受信を待つ（ｒｅｃｖ（ｃｓｏｃｋ，ｄａｔａ））。＃４’において、クライアント装置２がサーバ装置１に対してユーザＩＤを送信する（ｓｅｎｄ（ｓｏｃｋ，ｄａｔａ），ｄａｔａ：ｕｉｄ）。そして、＃５’において、クライアント装置２が、サーバ装置１からの処理開始要求の受信待ち状態となる（ｒｅｃｖ（ｓｏｃｋ，ｄａｔａ））。処理開始要求は、サーバ装置１が、クライアント装置２に対して、クライアント装置２が要求するサービスの内容をサーバ装置１へ送信するよう求める要求である。次に、＃８において、サーバ装置１のコネクション受付部１１が、ユーザＩＤを受信すると、＃９において、格納部１２が、接続済みソケットをコネクションキュー２０に格納する。＃１０において、取出部１４が、接続済みソケットをコネクションキュー２０から取り出す。そして、＃１１において、取出部１４が、処理開始／接続切断通知部１７を通じて、処理開始要求をクライアント装置２に対して送信する（ｓｅｎｄ（ｃｓｏｃｋ，ｄａｔａ），ｄａｔａ：処理開始要求）。
【００３７】
＃６’において、クライアント装置２がサーバ装置１から処理開始要求を受信すると、＃７’において、クライアント装置２が、要求するサービスの内容をサーバ装置１に対して送信する。＃１２において、サーバ装置１のリクエスト処理部１５が、クライアント装置２から送信されたサービスの内容に応じた処理を実行する。そして、＃１３において、サーバ装置１が、接続済みソケットを切断する（ｃｌｏｓｅ（ｃｓｏｃｋ））。すなわち、サーバ装置１のリクエスト処理部１５が、上記接続済みソケットに対応するクライアント装置２との接続を切断する。そして、＃８’において、クライアント装置２がソケットを切断する（ｃｌｏｓｅ（ｓｏｃｋ））。
【００３８】
図５は、図３に示すサーバ装置とクライアント装置における処理シーケンスの他の例を説明する図である。図５は、コネクションキュー２０が溢れたときの処理を示す。サーバ装置１における＃２１から＃２８までの処理は、図４を参照して説明した＃１から＃８までの処理と同様である。また、クライアント装置２における＃２１’から＃２５’までの処理は、図４を参照して説明した＃１’から＃５’までの処理と同様である。
【００３９】
図５の＃２９において、接続済みソケットをコネクションキューに格納した結果、キューが溢れたとき、拒否部１４が、切断する接続済みソケットを選択する。そして、＃３０において、拒否部１４が、切断要求を処理開始／接続切断通知部１７を通じてクライアント装置２に送信する（ｓｅｎｄ（ｃｓｏｃｋ，ｄａｔａ），ｄａｔａ：切断要求）。切断要求は、クライアント装置２に対して、ソケットの切断（接続の切断）を求める要求である。＃２６’において、クライアント装置２がサーバ装置１からの切断要求を受信する。そして、＃２７’において、クライアント装置２がソケットを切断し（ｃｌｏｓｅ（ｓｏｃｋ））、＃３１において、サーバ装置１の拒否部１４がソケットを切断する（ｃｌｏｓｅ（ｃｓｏｃｋ））。すなわち、サーバ装置１の拒否部１４が、上記選択された接続済みソケットをコネクションキュー２０から外し、該接続済みソケットに対応するクライアント装置２との接続を切断する。
【００４０】
図６は、サーバ装置が実行するリクエスト受付処理フローの一例を示す図である。まず、サーバ装置１が、リッスンソケットを作成し、クライアント装置２からの接続要求の待ち受け処理を行う（ステップＳ１）。コネクション受付部１１が、バックログキュー１６に接続要求があるかを判断する（ステップＳ２）。コネクション受付部１１が、バックログキュー１６に接続要求があると判断した場合は、コネクション受付部１１は、クライアント装置２との接続を確立（接続済みソケットを作成）する（ステップＳ３）。次に、コネクション受付部１１が、クライアント装置２からユーザＩＤを受信する（ステップＳ４）。格納部１２が、コネクションキュー２０にリクエストのエントリ（接続済みソケット）を格納する（ステップＳ５）。
【００４１】
次に、拒否部１３が、コネクションキュー２０が溢れた（オーバーフローした）かを判断する（ステップＳ６）。拒否部１３が、コネクションキュー２０が溢れていないと判断した場合は、上記ステップＳ２に戻る。拒否部１３が、コネクションキュー２０が溢れたと判断した場合は、拒否部１３が、切断する接続済みソケットを選択する（ステップＳ７）。そして、拒否部１３が、処理開始／接続切断通知部１７を通じて、クライアント装置２に対して切断要求を送信する（ステップＳ８）。そして、サーバ装置１が、接続済みソケットを切断して（ステップＳ１２）、上記ステップＳ２に戻る。
【００４２】
上記ステップＳ２において、コネクション受付部１１が、バックログキュー１６に接続要求がないと判断した場合は、取出部１４が、コネクションキュー２０にエントリがあるかを判断する（ステップＳ９）。取出部１４が、コネクションキュー２０にエントリがないと判断した場合は、上記ステップＳ２に戻る。取出部１４が、コネクションキュー２０にエントリがあると判断した場合は、取出部１４が、処理開始／接続切断通知部１７を通じて、処理開始要求をクライアント装置２に対して送信する（ステップＳ１０）。コネクション受付部１１が、クライアント装置２が要求するサービスの内容をクライアント装置２から受信し、リクエスト処理部１５が、該サービスの処理を実行する（ステップＳ１１）。そして、ステップＳ１２において、ソケットが切断される。
【００４３】
コネクションキュー２０が例えばＦＩＦＯキューである場合には、コネクションキュー２０が溢れると、後続のソケットが無条件にアクセス拒否されてしまう。しかし、図６を参照して前述したリクエスト受付処理によれば、コネクションキュー２０が溢れた場合にも、切断するソケットを選択する（ステップＳ７を参照）ことで、後続のソケットをコネクションキュー２０に格納することができるようになる。
【００４４】
図７は、コネクションキューのデータ構造の第１の例を示す図である。コネクションキュー２０は、ユーザリスト６０、ユーザ構造体６１、ソケットリスト６２といったデータ構造を有する。ユーザリスト６０には、各々のユーザのユーザ構造体６１へのポインタが格納される。コネクション受付部１１がユーザＩＤをクライアント装置２から受信すると、格納部１２が、該ユーザＩＤが示すユーザに対応するユーザ構造体６１を生成するとともに、ユーザリスト６０内のポインタと該生成されたユーザ構造体６１とを関連付ける。
【００４５】
ユーザ構造体６１は、ユーザＩＤ、ソケット数、ポインタといったデータ構造を有する。「ユーザＩＤ」には、コネクション受付部１１が受信したユーザＩＤが格納される。「ソケット数」には、ユーザＩＤに対応するユーザの接続済みソケットの数が格納される。「ポインタ」には、ソケットリスト６２へのポインタが格納される。すなわち、「ポインタ」によって、ユーザ構造体６１とソケットリスト６２とが対応付けられている。
【００４６】
ソケットリスト６２には、接続済みソケットの識別情報（例えば、ソケット番号）が格納される。格納部１２は、該ユーザＩＤが示すユーザの接続済みソケットが作成される度に、先頭（図７では一番左の位置）から順番に接続済みソケットのソケット番号をソケットリスト６２に格納する。格納部１２が、ソケット番号をソケットリスト６２に格納することによって、該ソケット番号に対応する接続済みソケットがコネクションキュー２０に格納される。すなわち、図７に示す例では、ソケットリスト６２中の最後尾（一番右の位置）に格納されているソケット番号に対応するソケットが、最も最近にコネクションキュー２０に格納されたソケットである。
【００４７】
図７を参照して、切断対象のソケットの選択処理の第１の例について説明する。拒否部１３が、図７に示すユーザリスト６０中のポインタを、該ポインタが示すユーザ構造体６１のソケット数が少ない順にソートする。拒否部１３が、上記ソートした結果最後尾になるポインタが示すユーザ構造体６１に対応付けられたソケットリスト６２を取得する。例えば、拒否部１３は、図７に示すユーザＩＤが１００のユーザ構造体６１に対応付けられたソケットリスト６２を取得する。拒否部１３が、取得したソケットリスト中の最後尾のソケット番号に対応するソケットを、切断対象のソケット（切断候補）として選択する。そして、拒否部１３が、切断候補として選択されたソケットのソケット番号をソケットリスト６２から削除する。なお、格納部１２は、ソケットリスト６２にソケット番号が格納されたとき、及び、ソケットリスト６２からソケット番号が削除されたときに、ユーザ構造体におけるソケット数を更新する。
【００４８】
図８は、コネクションキューのデータ構造の第２の例を示す図である。図８に示す例では、ユーザ構造体６１は、ユーザＩＤ、優先度、ポインタといったデータ構造を有する。「ユーザＩＤ」、「ポインタ」は、それぞれ、図７を参照して説明したユーザ構造体６１の「ユーザＩＤ」、「ポインタ」と同様である。「優先度」には、ユーザが接続を維持される度合い（接続を切断され難い度合い）である優先度が格納される。例えば、「優先度」に格納された値「１」は、最も低い優先度を示し、該優先度に対応するユーザが最も接続を切断され易いことを示す。
【００４９】
格納部１２は、例えば、コネクション受付部１１が受信したユーザＩＤを用いて、予め所定のバッファ内に記憶されたユーザＩＤと優先度との対応情報に基づいて、上記コネクション受付部１１が受信したユーザＩＤに対応する優先度を求め、求まった優先度を該ユーザＩＤに対応するユーザ構造体６１中の「優先度」に格納する。格納部１２が、ユーザＩＤを用いて各々のユーザのユーザ構造体６１を特定し、特定されたユーザ構造体６１が対応付けられているソケットリスト６２を参照してユーザのソケットの数を算出し、求まったユーザのソケットの数に基づいて優先度を求めてユーザ構造体中に格納するようにしてもよい。格納部１２は、例えば、上記求まったソケットの数が最も多いユーザに最も低い優先度を割り当てる。
【００５０】
図８を参照して、切断対象のソケットの選択処理の第２の例について説明する。拒否部１３が、図８に示すユーザリスト６０中のポインタを、該ポインタが示すユーザ構造体６１の優先度が高い順にソートする。拒否部１３が、上記ソートした結果最後尾になるポインタが示すユーザ構造体６１に対応付けられたソケットリスト６２を取得する。例えば、拒否部１３は、図８に示すユーザＩＤが１００のユーザ構造体に対応付けられたソケットリスト６２を取得する。拒否部１３が、取得したソケットリスト中の最後尾のソケット番号に対応するソケットを、接続を切断するソケット（切断候補）として選択する。そして、拒否部１３が、切断候補として選択されたソケットのソケット番号をソケットリスト６２から削除する。
【００５１】
図９は、コネクションキューのデータ構造の第３の例を示す図である。図９に示す例では、コネクションキュー２０は、サービス種別リスト７０、サービス種別構造体７１、ソケットリスト７２といったデータ構造を有する。サービス種別リスト７０には、サービス種別構造体７１へのポインタが格納される。コネクション受付部１１がサービス種別情報をクライアント装置２から受信すると、格納部１２が、該サービス種別情報が示すサービス種別に対応するサービス種別構造体７１を生成するとともに、サービス種別リスト７０内のポインタと上記生成されたサービス種別構造体７１とを関連付ける。
【００５２】
サービス種別構造体７１は、種別、優先度、ポインタといったデータ構造を有する。「種別」には、コネクション受付部１１が受信したサービス種別が格納される。「ポインタ」には、ソケットリスト７２へのポインタが格納される。すなわち、「ポインタ」によって、サービス種別構造体７１（又はサービス種別）とソケットリスト７２とが対応付けられている。「優先度」には、サービス種別に対応するソケットリスト７２中のソケットが接続を維持される度合い（接続を切断され難い度合い）である優先度が格納される。例えば、「優先度」に格納された値「１」は、最も低い優先度を示し、該優先度に対応するサービス種別が最も接続を切断され易いことを示す。
【００５３】
ソケットリスト７２には、接続済みソケットの番号（ソケット番号）が格納される。格納部１２は、サービス種別に対応する接続済みソケット（サービス種別情報を送信したクライアント装置２に対応する接続済みソケット）を作成する度に、先頭（図９では一番左の位置）から順番に該接続済みソケットのソケット番号をソケットリスト７２に格納する。
【００５４】
格納部１２は、例えば、コネクション受付部１１が受信したサービス種別が示すサービスの種別を用いて、予め所定のバッファ内に記憶されたサービス種別と優先度との対応情報に基づいて、上記サービス種別に対応する優先度を求め、求まった優先度を該サービス種別に対応するサービス種別構造体７１中の「優先度」に格納する。格納部１２が、サービス種別を用いて各々のサービス種別のサービス種別構造体７１を特定し、特定されたサービス種別構造体７１が対応付けられているソケットリスト７２を参照してソケットの数を算出し、求まったソケットの数に基づいて優先度を求めてサービス種別構造体７１中に格納するようにしてもよい。格納部１２は、例えば、上記求まったソケットの数が最も多いサービス種別に最も低い優先度を割り当てる。
【００５５】
図９を参照して、切断対象のソケットの選択処理の第３の例について説明する。拒否部１３が、図９に示すサービス種別リスト７０中のポインタを、該ポインタが示すサービス種別構造体７１の優先度が高い順にソートする。拒否部１３が、上記ソートした結果最後尾になるポインタが示すサービス種別構造体７１に対応付けられたソケットリスト７２を取得する。例えば、拒否部１３は、図９に示す種別が情報表示であるサービス種別構造体７１に対応付けられたソケットリスト７２を取得する。拒否部１３が、取得したソケットリスト７２中の最後尾のソケット番号に対応するソケットを、切断するソケット（切断候補）として選択する。そして、拒否部１３が、切断候補として選択されたソケットのソケット番号をソケットリスト７２から削除する。
【００５６】
以上から把握できるように、本実施形態の特徴を述べると以下の通りである。
【００５７】
（付記１）クライアント装置からのリクエストを処理する情報処理装置における前記リクエストの受付処理プログラムであって、
コンピュータに、
前記クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立処理と、
該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信処理と、
前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納処理と、
前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定処理と、
前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断処理とを実行させる
ことを特徴とするリクエスト受付処理プログラム。
【００５８】
（付記２）付記１に記載のリクエスト受付処理プログラムにおいて、
前記決定処理は、前記エントリの数が最も多いクライアント装置に対応するエントリを前記コネクションキューから外すエントリとして決定する
ことを特徴とするリクエスト受付処理プログラム。
【００５９】
（付記３）付記１に記載のリクエスト受付処理プログラムにおいて、
前記決定処理は、前記ユーザ情報を用いて求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理プログラム。
【００６０】
（付記４）付記１に記載のリクエスト受付処理プログラムにおいて、
前記受信処理は、前記接続が確立されたクライアント装置から、前記ユーザ情報の代わりに、サービス種別情報を受信し、
前記決定処理は、前記サービス種別情報から求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理プログラム。
【００６１】
（付記５）付記１乃至４のいずれか１項に記載のリクエスト受付処理プログラムにおいて、
前記決定処理は、更に、エントリが最も最近に前記コネクションキューに格納されたエントリであるかを判断し、該判断結果に基づいて前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理プログラム。
【００６２】
（付記６）情報処理装置であって、
クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立手段と、
該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信手段と、
前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納手段と、
前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定手段と、
前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断手段とを備える
ことを特徴とする情報処理装置。
【００６３】
（付記７）付記６に記載の情報処理装置において、
前記決定手段は、前記エントリの数が最も多いクライアント装置に対応するエントリを前記コネクションキューから外すエントリとして決定する
ことを特徴とする情報処理装置。
【００６４】
（付記８）付記６に記載の情報処理装置において、
前記決定手段は、前記ユーザ情報を用いて求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とする情報処理装置。
【００６５】
（付記９）付記６に記載の情報処理装置において、
前記受信手段は、前記接続が確立されたクライアント装置から、前記ユーザ情報の代わりに、サービス種別情報を受信し、
前記決定手段は、前記サービス種別情報から求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とする情報処理装置。
【００６６】
（付記１０）付記６乃至９のいずれか１項に記載の情報処理装置において、
前記決定手段は、更に、エントリが最も最近に前記コネクションキューに格納されたエントリであるかを判断し、該判断結果に基づいて前記コネクションキューから外すエントリを決定する
ことを特徴とする情報処理装置。
【００６７】
（付記１１）クライアント装置からのリクエストを処理する情報処理装置における前記リクエストの受付処理方法であって、
前記クライアント装置から接続要求を受けて該クライアント装置との接続を確立する接続確立ステップと、
該接続が確立されたクライアント装置から該クライアント装置のユーザ情報を受信する受信ステップと、
前記クライアント装置のリクエストのエントリをコネクションキューに格納する格納ステップと、
前記コネクションキューに格納されるエントリの総数が所定値を超えたときに、前記コネクションキューから外すエントリを決定する決定ステップと、
前記決定されたエントリを前記コネクションキューから外し、該エントリに対応するクライアント装置との接続を切断する切断ステップとを有する
ことを特徴とするリクエスト受付処理方法。
【００６８】
（付記１２）付記１１に記載のリクエスト受付処理方法において、
前記決定ステップは、前記エントリの数が最も多いクライアント装置に対応するエントリを前記コネクションキューから外すエントリとして決定する
ことを特徴とするリクエスト受付処理方法。
【００６９】
（付記１３）付記１１に記載のリクエスト受付処理方法において、
前記決定ステップは、前記ユーザ情報を用いて求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理方法。
【００７０】
（付記１４）付記１１に記載のリクエスト受付処理方法において、
前記受信ステップは、前記接続が確立されたクライアント装置から、前記ユーザ情報の代わりに、サービス種別情報を受信し、
前記決定ステップは、前記サービス種別情報から求まる優先度に基づいて、前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理方法。
【００７１】
（付記１５）付記１１乃至１４のいずれか１項に記載のリクエスト受付処理方法において、
前記決定ステップは、更に、エントリが最も最近に前記コネクションキューに格納されたエントリであるかを判断し、該判断結果に基づいて前記コネクションキューから外すエントリを決定する
ことを特徴とするリクエスト受付処理方法。
【図面の簡単な説明】
【００７２】
【図１】本リクエスト受付処理方法の概要を説明する図である。
【図２】クライアント装置の状態遷移を示す図である。
【図３】本発明の実施例のシステム構成を示す図である。
【図４】サーバ装置とクライアント装置とにおける処理シーケンスの一例を説明する図である。
【図５】サーバ装置とクライアント装置における処理シーケンスの他の例を説明する図である。
【図６】サーバ装置が実行するリクエスト受付処理フローの一例を示す図である。
【図７】コネクションキューのデータ構造の第１の例を示す図である。
【図８】コネクションキューのデータ構造の第２の例を示す図である。
【図９】コネクションキューのデータ構造の第３の例を示す図である。
【符号の説明】
【００７３】
１  サーバ装置
２  クライアント装置
１１  コネクション受付部
１２  格納部
１３  拒否部
１４  取出部
１５  リクエスト処理部
１６  バックログキュー
１７  処理開始／接続切断通知部
２０  コネクションキュー
３０  オペレーティングシステムＴＣＰ通信処理部
３１  サーバアプリケーション部
【図１】
2009169704.tif 000003
【図２】
2009169704.tif 000004
【図３】
2009169704.tif 000005
【図４】
2009169704.tif 000006
【図５】
2009169704.tif 000007
【図６】
2009169704.tif 000008
【図７】
2009169704.tif 000009
【図８】
2009169704.tif 000010
【図９】
2009169704.tif 000011