(A)実施形態
以下、本発明によるコネクション強制解放装置、コネクション強制解放方法及びコネクション強制解放プログラムの実施形態を、図面を参照しながら詳述する。
(A−1)実施形態の構成
図2は、この実施形態に関係する各種装置の接続関係などの説明図である。
通信サーバシステム100は、実施形態のコネクション強制解放装置を搭載しており、コネクション型プロトコルによりIPネットワーク200を経由して、複数のクライアント端末300と通信し、例えば、メール送受信サービス、WEB文書閲覧サービス、IP電話接続サービスなどのアプリケーションサービスをクライアント端末300に提供するものである。なお、コネクション型プロトコルとしては、例えば、TCPや、SCTP(Stream Control Transmission Protocol、IETF RFC2960)などが挙げられる。
個々のクライアント端末300が、通信サーバシステム100に対して通信を開始したい場合には、クライアント端末300よりコネクションを確立する。また、通信サーバシステム100が、クライアント端末300に対して通信を開始したい場合には、通信サーバシステム100よりコネクションを確立する。そして、通信サーバシステム100と、クライアント端末300との間では、確立されたコネクションを使用して、例えばアプリケーションサービスにおけるメッセージなどの、データ送受信が行われる。
通信サーバシステム100は、コネクション管理部11、アプリケーションサービス部12を有している。
アプリケーションサービス部12は、通信サーバシステム100が、クライアント端末300に対してアプリケーションサービスを提供する機能を担っている。アプリケーションサービスを、クライアント端末300が利用する場合には、まずクライアント端末300が、通信サーバシステム100に対してコネクションを確立し、そのコネクションを使用してサービスの要求メッセージを送信する。要求メッセージは、通信サーバシステム100の内部のアプリケーションサービス部12にて受け付けられ、要求内容に対応するサービスのアプリケーションが起動されることによって、クライアント端末300に対してサービス提供される。また、要求内容によっては、アプリケーションサービス部12が、要求元のクライアント端末300に対してコネクションを確立し、メッセージの送受信を行うことによってサービスを提供する。
コネクション管理部11は、通信サーバシステム100において確立中のコネクションを管理する機能を担っている。
図3は、コネクション管理部11の内部構成を示すブロック図である。
コネクション管理部11は、コネクション情報管理部20、アプリケーション要求受付部30、クライアント通知受信部40を有している。
アプリケーション要求受付部30は、アプリケーションサービス部12から、コネクションの確立要求や解放要求、およびメッセージの送信要求を受け付ける機能を担っている。アプリケーションサービス部12からメッセージの送信を要求する場合は、コネクション情報管理部20にどのコネクションを使用するかを付加情報として通知することによって、対応するコネクションを使用して、対象となるクライアント端末300に対してメッセージが送信される。
クライアント通知受信部40は、クライアント端末300から、コネクションの確立通知や解放通知、およびメッセージ通知を受信する機能を担っている。クライアント通知受信部40は、クライアント端末300から通知されたメッセージについて、コネクション情報管理部20を経由して、アプリケーションサービス部12に通知する。
図1は、コネクション情報管理部20の内部構成を示すブロック図である。なお、通信サーバシステム100は、例えば、CPU、ROM、RAM、EEPROM、ハードディスクなどのプログラムの実行構成、及び、他の通信装置と通信をするためのインターフェースを有する装置(1台に限定されず、複数台を分散処理し得るようにしたものであっても良い。)に、実施形態のコネクション強制解放プログラム等をインストールすることにより構築されるものであるが、機能的には上述の図1、図2、図3のように示すことができる。
コネクション情報管理部20は、コネクション保存時間記憶部21、コネクション監視周期間隔記憶部22、テーブル内リスト数記憶部23、テーブル内現在インデックス記憶部24、コネクション情報監視テーブル記憶部25、コネクション情報ハッシュ記憶部26、周期コネクション監視処理部27を有している。
コネクション情報ハッシュ記憶部26は、通信サーバシステム100において確立されたコネクションに関する情報であるコネクション情報を記憶する記憶手段である。コネクション情報管理部20では、通信サーバシステム100において、新規にコネクションが確立された場合には、新たなコネクション情報を生成してコネクション情報ハッシュ記憶部26に追加して記憶する。コネクション情報の詳細な内容について後述する。
テーブル内リスト数記憶部23は、後述するコネクション情報監視テーブル記憶部25に生成されているコネクション情報のリストの数を記憶する記憶手段である。ここでは、例えば、テーブル内リスト数記憶部23に記憶される値は61(本)とする。
コネクション情報監視テーブル記憶部25は、コネクション情報ハッシュ記憶部26に記憶されたコネクション情報を管理するためのテーブルである。コネクション情報監視テーブル記憶部25は、後述するコネクション情報リストを複数有している。
コネクション情報監視テーブル記憶部25は、テーブル内リスト数記憶部23に記憶された値と同じ数のコネクション情報リストを有しており、ここでは、テーブル内リスト数記憶部23に記憶された値は61(本)であるので、コネクション情報監視テーブル記憶部25は、61(本)のコネクション情報リストを有するものとする。なお、コネクション情報リストは、以降、「コネクション情報リストLXX」(XX:コネクション情報リストを識別するためのインデックス番号)と表すものとする。例えば、インデックス番号が「01」のコネクション情報リストは「コネクション情報リストL01」と表すものとする。又、個々のコネクション情報リストには、インデックス値として、先頭から00より、末尾がテーブル内リスト数記憶部23から1を減算した値までの順で付さるものとする。よって、ここでは、コネクション情報監視テーブル記憶部25は、「コネクション情報リストL00、コネクション情報リストL01、…、コネクション情報リストL60」のコネクション情報リストを有する。
テーブル内現在インデックス記憶部24は、現在時刻から算出される値であり、現時点で、コネクション情報監視テーブル記憶部25内のどのコネクション情報リストを指し示しているかを表すインデックス値の情報を記憶する記憶手段である。テーブル内現在インデックス記憶部24に記憶される現在インデックス値は、最小値は0、最大値はテーブル内リスト数記憶部23の値より1を減算した値の範囲をとる。また、現在インデックス値は、後述する周期コネクション監視処理部27が起動されるたびに1加算されることによって更新され、最大値に達した場合は、次の周期では0に更新される。ここでは、上述のテーブル内リスト数記憶部23は61(本)であるので、現在インデックス値は、0〜60の値が付与される。
次に、上述のコネクション情報の内容の詳細について説明する。
図5及び図6は、コネクション情報の構成について示した説明図である。
コネクション情報は、情報ID501、前方リンクID502、後方リンクID503、現在リストインデックス504、接続クライアントアドレス情報505、リソース情報506の情報を有している。
情報ID501は、当該コネクション情報を識別するための論理的なID情報である。
前方リンクID502、後方リンクID503、現在リストインデックス504は、上述のコネクション情報監視テーブル記憶部25のコネクション情報リストにおいて、後述するコネクション情報とのリンクに使用されるものであり、詳細については後述する。
接続クライアントアドレス情報505は、当該コネクション情報に対応するコネクションによって接続されたクライアント側のアドレス情報などの識別情報を示すものである。
リソース情報506は、当該コネクション情報に対応するコネクション上で信号を送受信する際に使用されるリソース情報(例えば、確立中のコネクションの識別情報)であり、対応するコネクションの解放時にも使用される。
上述のコネクション情報が有する情報のうち、情報ID501、接続クライアントアドレス情報505、リソース情報506は、コネクション情報が最初に生成される際に設定され、該当するコネクションが解放されるまで保持される。又、上述のコネクション情報が有する情報のうち、前方リンクID502、後方リンクID503、現在リストインデックス504については、コネクション情報が生成される際に設定された以降は、対応するコネクションを使用してデータの送受信が行われるときなどに更新される。
なお、コネクション情報は、以降「コネクション情報CXXXX」(XXXX:コネクション情報の情報ID)と表すものとする。例えば、情報IDが「0001」のコネクション情報は、「コネクション情報C0001」と表わすものとする。
次に、上述のコネクション情報監視テーブル記憶部25におけるコネクション情報リストの内容の詳細について説明する。
図4は、各コネクション情報リスト(L00〜L60)の内部構成について示した説明図である。
各コネクション情報リスト(L00〜L60)は、それぞれ、リスト先頭(の要素)(L00−a、L01−a、L01−a、…、L60−a)と、リスト末尾(の要素)(L00−b、L01−b、L01−b、…、L60−b)を有しており、個々に、コネクション情報の双方向リストを構成している。又、各コネクション情報リスト(L00〜L60)と、コネクション情報とは、リスト先頭(L00−a〜L60−a)と、リスト末尾(L00−b〜L60−b)の間に後述するリンクがされる。
次に、上述の図5に示すコネクション情報、各コネクション情報リスト(L00〜L60)における「リンク」について説明する。
コネクション情報リスト(L00〜L60)における、コネクション情報同士のリンクは、上述の図5における、前方リンクID502、後方リンクID503の情報を更新することにより行われる。前方リンクID502は、コネクション情報監視テーブル記憶部25のコネクション情報リスト内において、当該コネクション情報の前方にリンクされるコネクション情報のID情報501を有する。後方リンクID503は、当該コネクション情報の後方にリンクされるコネクション情報のID情報501を有する。
又、リスト先頭(L00−a〜L60−a)から、コネクション情報リスト(L00〜L60)における先頭のコネクション情報へのリンクは、リスト先頭(L00−a〜L60−a)が、先頭のコネクション情報のID情報501の情報を指し示す(有する)ことにより行われる。同様に、リスト末尾(L00−b〜L60−b)から、末尾のコネクション情報へのリンクは、リスト末尾(L00−b〜L60−b)が末尾のコネクション情報のID情報501の情報を指し示す(有する)ことにより行われる。
以上のように、各コネクション情報リストは、リスト先頭と、リスト末尾の要素を有することにより、先頭・末尾の双方向からリンクされた双方向リストを形成している。例えば、コネクション情報リストL00が、2件のコネクション情報C0001、C0010を双方向リストの要素として有しているものとすると、リスト先頭L00−aは、コネクション情報C0000を指し示してリンクされ、リスト末尾L00−bはコネクション情報C0010を指し示してリンクされる。又、例えば、コネクション情報リストL30にリンクされるコネクション情報の数が0件であったとすると、リスト先頭L30−a、及び、リスト末尾L30−bは何も指し示さない。
又、コネクション情報から、コネクション情報監視テーブル記憶部25におけるコネクション情報リストへのリンクは、現在リストインデックス504の情報が、当該コネクション情報のリンクの対象となるコネクション情報リストのインデックス値の情報を有することにより行われる。
次に、コネクション保存時間記憶部21について説明する。コネクション保存時間記憶部21は、データの送受信が行われていないコネクションが保存される時間を示す情報を記憶する記憶手段である。ここでは、例えば、コネクション保存時間記憶部21に記憶される値は「300秒」とする。
次に、コネクション監視周期間隔記憶部22について説明する。コネクション監視周期間隔記憶部22は、後述するコネクションの周期監視を実現するために、後述する周期コネクション監視処理部27の就寝時間の情報を記憶する記憶手段である。ここでは、例えば、コネクション監視周期間隔記憶部22に記憶される値は「60秒」とする。
次に、周期コネクション監視処理部27について説明する。
周期コネクション監視処理部27は、コネクション監視周期間隔記憶部22に記憶されたコネクション監視周期期間間隔で、周期コネクション監視処理を起床させ、所定の保存時間以上データ送受信に使用されていないコネクション情報を検出し、該当するコネクションの解放(コネクションの切断)をするものである。
周期コネクション監視処理部27では、周期コネクション監視処理が起床されると、テーブル内現在インデックス記憶部24に記憶された現在インデックス値に該当するコネクション情報監視テーブル記憶部25内のコネクション情報リストにリンクされたコネクション情報を検出し、検出したコネクション情報に対応するコネクションを全て強制的に解放する。コネクション解放の際に、検出したコネクション情報について、リンクされていたコネクション情報リストからリンクを削除し、コネクション情報ハッシュ記憶部26からも情報を削除する。なお、コネクションの解放の際に、コネクション情報のリソース情報506(上述の図5参照)の情報に基づいて、解放するコネクションを識別して解放しても良い。
又、コネクション情報管理部20において、周期コネクション監視処理部27における周期コネクション監視処理の起床の際に、テーブル内現在インデックス記憶部24に記憶された現在インデックス値が、現在インデックス値が示すコネクション情報リストの次に配置されたコネクション情報リストのインデックス値に更新される。現在インデックス値の更新は、現在インデックス値に1を加算し、その値をテーブル内リスト数記憶部23に記憶されたリスト数で割った余り、すなわち以下の(1)式により算出される値に更新しても良い。なお、以下の(1)式において、テーブル内リスト数記憶部23に記憶されたリスト数の値は「リスト数」と表すものとする。
更新後の現在インデックス値 =
(更新前の現在インデックス値+1) mod リスト数 …(1)
上述の通りコネクション情報監視テーブル記憶部25が有するコネクション情報リストの数は有限で、テーブル内現在インデックス記憶部24は、最大値に達した場合は、次の周期では0に更新されるが、上述の(1)式のような計算式に基づいて、現在インデックス値を更新することにより、例えば、リスト数が61、現在インデックス値が60であった場合でも、更新後の現在インデックス値は0となる。
次に、コネクション情報管理部20において、新規にコネクション情報が生成された際の処理について説明する。
コネクション情報管理部20は、通信サーバシステム100とクライアント端末300との間で新規にコネクションが生成される契機が検出されると、新規にコネクション情報を生成して、コネクション情報監視テーブル記憶部25のいずれかのコネクション情報リストにリンクさせる。新規コネクション生成の契機は、例えば、アプリケーションサービス部12からのコネクション確立要求が、コネクション管理部11にあり、要求対象のクライアント端末300とのコネクションが確立された場合や、クライアント端末300からコネクション確立通知がコネクション管理部11にあり、新規コネクションが確立された場合に検出される。
コネクション情報管理部20において、新規に生成されたコネクション情報は、コネクション保存時間記憶部21に記憶された保存時間を考慮し、テーブル内現在インデックス記憶部24に記憶された現在インデックス値に対する相対位置のコネクション情報リストにリンクさせる。例えば、保存時間が300秒、監視周期間隔が60秒、テーブル内現在インデックスが1だった場合に、300秒(保存時間)後に周期コネクション監視処理部27の周期コネクション監視処理の対象になると予測されるのは、テーブル内現在インデックスが6のコネクション情報リスト、すなわちコネクション情報リスト06となり、コネクション情報リスト06が新規に生成されたコネクション情報のリンク先となる。
コネクション情報管理部20において、新規に生成されたコネクション情報について、コネクション情報監視テーブル記憶部25のコネクション情報リストにリンクさせる際のインデックス値(以下、「接続先インデックスY」と表すものとする)は以下の(2)式の計算結果を、さらに以下の(3)式により補正して求めても良い。
なお、以下の(2)式において、コネクション保存時間記憶部21に記憶された値は「保存時間」、コネクション監視周期間隔記憶部22に記憶された値は「監視周期間隔」、テーブル内現在インデックス記憶部24に記憶された現在インデックスの値は「現在インデックス値」、接続先インデックスYは「Y」と表すものとする。又、以下の(3)式において、補正前のインデックスYは「補正前のY」、補正後のインデックスYは「補正後のY」、テーブル内リスト数記憶部23に記憶されたリスト数の値は「リスト数」と表すものとする。
Y=保存時間(秒)÷監視周期間隔(秒)+現在インデックス値+1 …(2)
補正後のY = 補正前のY mod リスト数 …(3)
上述の通りコネクション情報監視テーブル記憶部25が有するコネクション情報リストの数は有限で、テーブル内現在インデックス記憶部24は、最大値に達した場合は、次の周期では0に更新されるが、上述の(2)式及び(3)式のような計算式に基づいて、接続先インデックスYを求めることにより、例えば、リスト数が61、上述の(2)式により求めた接続先インデックスYが65であった場合でも、上述の(3)により、接続先インデックスYが4に補正される。
次に、コネクション情報管理部20において、通信サーバシステム100とクライアント端末300との間で、コネクションを使用して、例えばメッセージ通知などのデータ送受信の発生が検出された場合の処理について説明する。
データ送受信発生の契機は、例えば、アプリケーションサービス部12からのメッセージ送信要求が、アプリケーション要求受付部30を経由してコネクション情報管理部20にあり、コネクションを使用してメッセージを送信した場合や、クライアント端末300から確立中のコネクションを使用して送信されたメッセージ通知を、クライアント通知受信部40を経由して受信した場合などが挙げられる。
コネクション情報管理部20において、通信サーバシステム100とクライアント端末300との間で、コネクションを使用したデータ送受信の発生が検出されると、該当するコネクションのコネクション情報をコネクション情報ハッシュ記憶部26から検出し、コネクション保存時間記憶部21に記憶された保存時間を考慮し、テーブル内現在インデックス記憶部24に記憶された現在インデックス値に対する相対位置のコネクション情報リストにリンクを変更する。例えば、保存時間が300秒、監視周期間隔が60秒、テーブル内現在インデックスが1だった場合には、300秒(保存時間)後に、周期コネクション監視処理部27の周期コネクション監視処理の対象になると予測されるのは、テーブル内現在インデックスが6のコネクション情報リスト、すなわちコネクション情報リスト06であり、コネクション情報管理部20において、コネクション情報リスト06にデータ送受信の発生が検出されたコネクションに対応するコネクション情報のリンクが変更される。
又、コネクション情報管理部20において、該当するコネクションのコネクション情報をコネクション情報ハッシュ記憶部26から検出する方法としては、データ送受信の対象となったクライアント端末300のアドレスを接続クライアントアドレス情報505として有するコネクション情報を検索することにより行っても良い。データ送受信の対象となったクライアント端末300のアドレスとしては、例えば、データ送信時のパケットの宛先アドレスや、データ受信時のパケットの送信元アドレスを適用することが挙げられる。
コネクション情報管理部20において、データ送受信が発生したと検出されたコネクションに対応するコネクション情報について、コネクション情報監視テーブル記憶部25のコネクション情報リストにリンクさせる際のインデックス値(以下、上述と同様に「インデックスY」と表す)も、上述の(2)式の結果を上述の(3)式により補正することにより求めても良い。
(A−2)実施形態の動作
次に、以上のような構成を有する実施形態のコネクション情報管理部20におけるコネクション管理の動作を説明する。
(A−2−1)新規コネクション生成時の動作
図7は、通信サーバシステム100において、新規コネクションが生成される際のコネクション情報管理部20におけるコネクション情報に関する動作について説明したフローチャートである。
なお、ここでは、上述の図1と同様に、コネクション保存時間記憶部21に記憶された値が「300秒」、コネクション監視周期間隔記憶部22に記憶された値が「60秒」、テーブル内リスト数記憶部23に記憶された値が「61(本)」とする。又、テーブル内現在インデックス記憶部24に記憶された初期値が「55」であるものとする。
まず、コネクション情報管理部20において、通信サーバシステム100とクライアント端末300との間で新規にコネクションが生成される契機が検出される(S100)。
次に、コネクション情報管理部20において、確立された新規コネクションに対して、新規にコネクション情報が生成される(S110)。
このとき、コネクション情報管理部20において、新規に生成されたコネクション情報には、個々のコネクション情報ごとにユニークとなる値がコネクション情報の情報ID501として「1000」が付与され、接続されたクライアント端末300のアドレスなどの識別情報が接続クライアントアドレス情報505として付与され、接続されたクライアント端末300と確立されたコネクション上でデータを送受信する際に使用されるリソース情報がリソース情報506に付与される。以降、上述のS110で生成されたコネクション情報は、「コネクション情報C1000」と表すものとする。
次に、コネクション情報管理部20において、上述ステップS110で生成されたコネクション情報C1000が、コネクション情報ハッシュ記憶部26に記憶される(S120)。なお、このとき、接続クライアントアドレス情報505が、コネクション情報C1000を検索する際のキー情報となるものとする。
次に、コネクション情報管理部20において、上述のS120でコネクション情報ハッシュ記憶部26に記憶されたコネクション情報C1000について、コネクション情報監視テーブル記憶部25のコネクション情報リストにリンクさせる際のインデックス値(接続先インデックスY)が算出される(S130)。
接続先インデックスYを上述の式(2)により求めると、ここでは、「保存時間」は300秒、「監視周期間隔」は60秒、「現在インデックス値」は55であるので、Y=300÷60+55+1=61となる。
次に、コネクション情報管理部20により、上述のステップS130において算出された接続先インデックスYの値が補正される(S140)。
補正後の接続先インデックスYの値を、上述の(3)式により求めると、ここでは、接続先インデックスYの値は61で、テーブル内リスト数記憶部23に記憶された値は61であるので、61 mod 61=0となり、補正後の接続先インデックスYの値は「0」となる。
次に、コネクション情報管理部20では、上述のステップS110で生成されたコネクション情報C1000が、上述のステップS130、S140で算出された接続先インデックスYに対応するテーブル内現在インデックス記憶部24内のコネクション情報リストの末尾に追加(リンク)される(S150)。
ここでは、上述のステップS130、S140で算出された接続先インデックスYの値は「0」であるので、上述のステップS110で生成されたコネクション情報C1000は、コネクション情報ハッシュ記憶部26内のコネクション情報リストL00の末尾にリンクされる。
図8は、上述のステップS100〜150の動作により、コネクション情報C1000が、コネクション情報リストL00の末尾に追加されている状況を示した説明図である。
(A−2−2)データ送受信時の動作
図9は、通信サーバシステム100とクライアント端末300とが、コネクションを使用したデータ送受信をした際の、コネクション情報管理部20におけるコネクション情報に関する動作について説明したフローチャートである。
なお、ここでは上述の図1と同様に、コネクション保存時間記憶部21に記憶された値が「300秒」、コネクション監視周期間隔記憶部22に記憶された値が「60秒」、テーブル内リスト数記憶部23に記憶された値が「61(本)」とする。又、テーブル内現在インデックス記憶部24に記憶された初期値が「55」であるものとする。
まず、コネクション情報管理部20において、通信サーバシステム100とクライアント端末300との間で、コネクションを使用したデータ送受信の発生が検出される(S200)。
次に、コネクション情報管理部20では、コネクション情報ハッシュ記憶部26内において、上述のステップS200においてデータ送受信に使用されたコネクション情報が検索される(S210)。
ここでは、コネクション情報管理部20においては、検索の結果、情報ID501が「7000」であるコネクション情報C7000が検出されたものとする。
次に、コネクション情報管理部20において、上述のステップS210で検出されたコネクション情報C7000に設定されている現在リストインデックス504(以降、「現在リンク中リストインデックスX」と表す)の情報が取得される(S220)。
ここでは、コネクション情報C7000は、テーブル内現在インデックス記憶部24において、コネクション情報リストL60にリンクされており、現在リンク中リストインデックスX=60であるものとする。
次に、コネクション情報管理部20において、上述のS210で検出されたコネクション情報C7000について、コネクション情報監視テーブル記憶部25のコネクション情報リストにリンクさせる際のインデックス値(接続先インデックスY)が算出される(S230)。
接続先インデックスYは、上述の式(2)により求めると、ここでは、「保存時間」は300秒、「監視周期間隔」は60秒、「現在インデックス値」は55、であるので、Y=300÷60+55+1=61となる。
次に、コネクション情報管理部20により、上述のステップS230において算出された接続先インデックスYの値が補正される(S240)。
補正後の接続先インデックスYの値を、上述の(3)式により求めると、ここでは、接続先インデックスYの値は61で、テーブル内リスト数記憶部23に記憶された値は61であるので、61 mod 61=0となり、接続先インデックスYの値は「0」に補正される。
次に、上述のステップS220で、コネクション情報管理部20において取得された現在リンク中リストインデックスXと、上述のステップS240で算出された接続先インデックスYが比較され、2つの値が等しい場合には動作が終了され、2つの値が等しくない場合には後述するステップS260の動作が行われる(S250)。
ここでは、現在リンク中リストインデックスX(=60)と、接続先インデックスY(=0)は等しくないため、後述するステップS260の動作が行われる。
ステップS250の判定において、現在リストインデックスと、接続先インデックスYの値が等しくないという結果であった場合には、コネクション情報管理部20において、上述のステップS210で検出されたコネクション情報C7000が、現在リンク中リストインデックスX(=60)のコネクション情報リスト、すなわちコネクション情報リストL60から抜き出され(S260)、接続先インデックスY(=0)に対応するコネクション情報リスト、すなわちコネクション情報リストL00の末尾に追加(リンク)され、リンクが変更される(S270)。
図10は、上述のステップS200〜270の動作により、コネクション情報C7000が、コネクション情報リストL60より抜き出され、コネクション情報リストL00の末尾に追加されている状況を示した説明図である。
このように、新規コネクションが確立された際、及びコネクション使用してデータの送受信が行われた際には、対応するコネクション情報は、コネクション情報監視テーブル記憶部25内の、コネクション保存時間記憶部21が考慮された現在インデックスに対する相対位置にインデックスされるコネクション情報リストにリンクされる。
(A−2−3)周期コネクション監視処理が起動された際の動作
図11は、コネクション情報管理部20において、周期コネクション監視処理部27が起動された際の動作を説明したフローチャートである。
なお、ここでは上述の図1と同様にコネクション保存時間記憶部21に記憶された値が「300秒」、コネクション監視周期間隔記憶部22に記憶された値が「60秒」、テーブル内リスト数記憶部23に記憶された値が「61(本)」とする。又、テーブル内現在インデックス記憶部24に記憶された初期値が「59」であるものとする。又、周期コネクション監視処理部27では、周期コネクション監視処理について就寝した状態であるものとする。
まず、周期コネクション監視処理部27では、コネクション監視周期間隔記憶部22に記憶されたコネクション監視周期間隔の経過後、周期コネクション監視処理が起床される(S300)。
次に、周期コネクション監視処理部27において、テーブル内現在インデックス記憶部24に記憶された現在インデックス値が、コピーされる(コピーされたインデックス値を、以降、「チェックインデックスZ」と表すものとする)(S310)。
ここでは、上述の通り、テーブル内現在インデックス記憶部24に記憶された現在インデックス値は「59」であるのでチェックインデックスZ=59となる。
次に、コネクション情報管理部20において、テーブル内現在インデックス記憶部24に記憶された現在インデックス値が更新される(S320)。
コネクション情報管理部20における、テーブル内現在インデックス記憶部24に記憶された現在インデックス値の更新値を、上述の(1)式により求めると、ここでは、現在インデックス値が59、テーブル内リスト数記憶部23に記憶されたリスト数が61であるので、(59+1) mod 61=60が、テーブル内現在インデックス記憶部24に記憶された現在インデックス値の更新値となる。
そして、周期コネクション監視処理部27において、上述のステップS310でコピーしたチェックインデックスZ(=59)をインデックス値とするコネクション情報リストL59の先頭のコネクション情報、すなわちリスト先頭L59−aにリンクされたコネクション情報が、ポップ(リンクされている情報の取得を試みる)される(S330)
次に、周期コネクション監視処理部27において、上述のステップS330におけるポップ結果について判定され、先頭のコネクション情報がなしの場合には、コネクション監視周期間隔記憶部22に記憶された時間分(60秒)周期コネクション監視処理を就寝させ(S370)上述のステップS300から動作し、コネクション情報ありの場合には、後述するステップS350の動作が行わる(S340)。
ここでは、コネクション情報リストL59には一件もコネクション情報はリンクされておらず、ポップ結果は「コネクション情報なし」となり、周期コネクション監視処理が、コネクション監視周期間隔記憶部22に記憶された時間分(60秒)就寝されるものとする。
次に、このままの状態で60秒後に、周期コネクション監視処理部27において、周期コネクション監視処理が起床した際の動作について説明する。なお、このとき、上述のステップS320の動作により、テーブル内現在インデックス記憶部24には現在インデックス値として「60」が記憶されている。
まず、周期コネクション監視処理部27では、周期コネクション監視処理が起床される(S300)。
次に、周期コネクション監視処理部27において、テーブル内現在インデックス記憶部24に記憶された現在インデックス値が、コピーされる(S310)。
ここでは、上述の通り、テーブル内現在インデックス記憶部24に記憶された現在インデックス値は「60」であるのでチェックインデックスZ=60となる。
次に、コネクション情報管理部20において、テーブル内現在インデックス記憶部24に記憶された現在インデックス値が更新される(S320)。
ここでは、テーブル内現在インデックス記憶部24に記憶された現在インデックス値が60、テーブル内リスト数記憶部23に記憶された値が61であるので、上述と同様の計算により、(60+1) mod 61=0が、テーブル内現在インデックス記憶部24に記憶された現在インデックス値の更新値となる。
そして、周期コネクション監視処理部27において、上述のステップS310でコピーしたチェックインデックスZ(=60)に対応するコネクション情報リストL60の先頭のコネクション情報、すなわちリスト先頭L60−aにリンクされたコネクション情報が、ポップされる(S330)
次に、周期コネクション監視処理部27において、上述のステップS330におけるポップ結果について判定される(S340)
ここでは、当初、コネクション情報リストL60には、先頭から順に、情報ID501が「5000」のコネクション情報C5000、情報ID501が「7000」のコネクション情報C7000、情報ID501が「9999」のコネクション情報C9999、の計3つのコネクション情報がリンクされていたものとする。よって、上述のS340の判定においては、コネクション情報C5000がポップされ、「コネクション情報あり」という結果となる。
次に、周期コネクション監視処理部27において、上述のステップS340においてポップされたコネクション情報5000に設定されているリソース情報506に基づいて、コネクション情報5000に対応するコネクションが識別され、コネクション管理部11により当該コネクションが解放される(S350)。
次に、周期コネクション監視処理部27において、上述のステップS340においてポップされたコネクション情報5000について、コネクション情報ハッシュ記憶部26から登録解除がされ、コネクション情報5000自体も削除され、コネクション情報リストL60のリスト先頭L60−aには、2番目のコネクション情報であるコネクション情報C7000がリンクされ、上述のステップS330の処理に戻って動作する(S360)。
その後、上述のステップS330〜S360の動作について、コネクション情報リストL60内の全てのコネクション情報が削除されるまで繰り返されると、上述のステップS340において、ポップ結果が「コネクション情報なし」という判定結果となり、周期コネクション監視処理が就寝され(S370)、再度上述のステップS300から動作が繰り返される。
図12は、上述のステップS300〜S370の動作の後、コネクション情報リストL60にリンクされていた、コネクション情報C5000、コネクション情報C7000、コネクション情報C9999が削除された状況を示している。
(A−3)実施形態の効果
上記実施形態によれば、以下のような効果を奏することが可能となる。
以上のように、上記の実施形態によれば、コネクション型プロトコルを利用した通信サーバシステムにおいて、コネクション情報管理部20を保持し、その内部に、コネクション保存時間記憶部21、コネクション監視周期間隔記憶部22、テーブル内現在インデックス記憶部24、コネクション情報監視テーブル記憶部25、コネクション情報ハッシュ記憶部26を設けて、コネクションを使用してデータの送受信が行われた際に対応するコネクション情報を、コネクション情報監視テーブル記憶部25内の現在位置のリスト(現在インデックス値に対応するコネクション情報リスト)からコネクション保存時間が考慮された相対位置のコネクション情報リストに移動すること、及び、周期コネクション監視処理部27によってテーブル内現在インデックスに対応するリストにリンクされる全てのコネクション情報のコネクションを強制的に解放することによって、クライアント端末300が自立的にコネクションを解放しない(コネクションを再利用している)状況下においても、通信サーバシステム100上で同時に確立されるコネクションの数を抑制し、通信サーバシステム100においてコネクション管理に必要なシステムリソースを低減することが可能となる。又、予め設定された保存時間以上使用されていないコネクションのみを検出して強制的に解放するので、使用中のコネクションや、使用頻度の高いコネクションについては強制的に解放されず、強制的なコネクション解放により発生する再度のコネクション確立の頻度を低減し、通信サーバシステム100においてコネクション管理に必要なシステムリソース(処理能力や記憶容量など)を低減することが可能となる。
又、上記の実施形態では、コネクション情報監視テーブル記憶部25内のコネクション情報リストを、周期コネクション監視処理部27が、コネクション監視周期間隔記憶部22に記憶された監視周期間隔で巡回して監視し、監視対象のコネクション情報リストにリンクされたコネクション情報に該当するコネクションを、コネクション保存時間記憶部21に記憶された保存時間以上使用されていないコネクションとみなして全て解放している。これにより、コネクションごとに個別に保存時間を記憶して管理(タイマ設定など)する必要がないため、大量のコネクションが発生した場合でも、通信サーバシステム100(コネクション情報管理部20)において、コネクション管理に必要なシステムリソースを低減することが可能となる。
さらに又、上記の実施形態によれば、コネクション情報監視テーブル記憶部25のコネクション情報リストでは、上述の図4のように、リスト先頭とリスト末尾の情報のみを有し、コネクション情報リスト内のコネクション情報同士のリンクの変更は、上述の図5の前方リンクID502、後方リンクID503の情報の更新を行うのみで行っている。これにより、コネクション情報監視テーブル記憶部25では、コネクション情報リスト内にリンクされている全てのコネクション情報に関する情報を記憶して処理する必要はないため、大量のコネクションが発生した場合でも、通信サーバシステム100(コネクション情報管理部20)において、コネクション管理に必要なシステムリソースを低減することが可能となる。
(B)他の実施形態
本発明は、上記の実施形態に限定されるものではなく、以下に例示するような変形実施形態も挙げることができる。
(B−1)上記の実施形態においては、コネクション情報管理部20のコネクション監視周期間隔記憶部22に記憶された周期コネクション監視間隔は60秒、テーブル内リスト数記憶部23に記憶されたテーブル内リスト数が61(本)であったため、コネクション保存時間記憶部21に保存されるコネクション保存時間は最大3600秒までしか設定できなかった。しかし、周期コネクション監視間隔の時間を別の値に設定することによって、コネクション保存時間の最大値を変動させることが可能である。
(B−2)上記の実施形態においては、周期コネクション監視間隔は60秒に設定されていたため、コネクション保存時間が300秒と設定されていても、コネクションが解放されるまでの時間として、300秒から360秒未満と約60秒の誤差が生じてしまう。しかし、周期コネクション監視間隔を短くすることにより、コネクション保存時間の制度を高めることが可能となる。
(B−3)本発明は、多数のクライアント端末を収容するコネクション型プロトコルを利用した通信サーバシステム全般に応用することが可能である。例えば、WEBクライアントを収容するWEBサーバや、SIP電話端末を収容するSIP交換機サーバなどである。
(B−4)上記の実施形態においては、コネクション情報管理部20は、コネクション保存時間、周期コネクション監視間隔を、それぞれ1つしか記憶していなかったが、複数記憶してコネクション情報ごとに異なるパラメータ値を適用しても良い。
例えば、クライアント端末300ごとや、クライアント端末300に提供するアプリケーションサービスの種類ごとに異なるパラメータ値を適用することなどが挙げられる。
(B−5)上記の実施形態においては、コネクション情報監視テーブル記憶部25には、1群のコネクション情報リスト(L00〜L60)が記憶される例について説明したが、複数の群のコネクション情報リストを記憶しても良い。又、その際、コネクション保存時間記憶部21、コネクション監視周期間隔記憶部22、テーブル内リスト数記憶部23、テーブル内現在インデックス記憶部24、においてコネクション情報リストの各群について異なるパラメータを記憶して適用しても良い。又、コネクション情報リストの各群がそれぞれ有するコネクション情報リストの数が異なるものであっても良い。
例えば、1つの通信サーバシステム100内で複数のアプリケーションサービスが混在する場合には、アプリケーションごとに適用するコネクション情報リスト群を分けることにより、それぞれのアプリケーションの特性に応じたコネクション監視周期間隔などを適用することなどが挙げられる。
(B−6)上記実施形態では、コネクション強制解放装置を通信サーバシステム100自体に搭載した場合を示したが、通信サーバシステム100に対する外付け装置(コネクタ接続、ケーブル接続は問わない)として構築するようにしても良い。なお、コネクション強制解放装置又は外付けする装置の種類は限定されないものである。
(B−7)上記の実施形態では、コネクション情報管理部20において、通信サーバシステム100とクライアント端末300との間でデータの送受信の発生が検出された場合に、データの送受信に使用されたコネクションに対応するコネクション情報を、コネクション情報ハッシュ記憶部26から検出する方法として、データ送受信の対象となったクライアント端末300のアドレスを接続クライアントアドレス情報505(上述の図5参照)として有するコネクション情報を検索することが挙げられているが、当該クライアント端末300と、通信サーバシステム100との間で複数のコネクションが発生していた場合は、クライアント端末300のアドレスだけでは、データの送受信に使用されたコネクションに対応するコネクション情報は特定できない。そこで、1つのクライアント端末300に対して複数のコネクションが発生した場合には、例えば、コネクションごとにTCPにおけるポート番号を異なる値に設定して通信し、コネクション情報管理部20において、通信に用いられたポート番号にもとづいてコネクション情報と対応するコネクションを識別しても良い。その際、コネクション情報管理部20において、コネクション情報の接続クライアントアドレス情報505(上述の図5参照)に、通信に使用するポート番号の情報をさらに記憶することにより、各コネクションに用いられるポート番号を管理しても良い。
(B−8)上記の実施形態では、コネクション情報監視テーブル記憶部25における、各コネクション情報リストは、リスト先頭の要素と、リスト末尾の要素を有しているが、いずれか一方を有する構成としても良い。その際は、コネクション情報管理部20において、コネクション情報リスト内の、コネクション情報のポップ、追加、削除などは、片方の要素からのみ行う。
(B−9)上記の実施形態の、コネクション情報管理部20では、コネクションを使用してデータの送受信が行われたとき、及び新規コネクションが生成されたときに、対応するコネクション情報を、コネクション情報監視テーブル記憶部25内の現在位置のリスト(現在インデックス値に対応するコネクション情報リスト)からコネクション保存時間が考慮された相対位置のコネクション情報リストにリンクを変更しているが、現時点よりも後の時刻に、コネクション情報監視テーブル記憶部25によって、周期コネクション監視処理の対象となるコネクション情報リストに、リンクを変更する構成であれば良く、コネクション情報のリンク先を変更する構成は、上記の実施形態に限定されないものである。例えば、データ送受信に使用されたコネクションに対応するコネクション情報のリンクの変更先は、現在インデックス値に、予め設定されたホップ数を加算したインデックス値が指し示すコネクション情報リストにリンクを変更することが挙げられる。なお、加算した結果が、テーブル内リスト数記憶部23に記憶されたリスト数以上の場合には、上述の(3)式と同様に、加算した結果をリスト数で割った余りを、リンクの変更先のインデックス値としても良い。
(B−10)上記の実施形態では、各コネクション情報をコネクション情報ハッシュ記憶部26に記憶させ、コネクション情報監視テーブル記憶部25のいずれかのコネクション情報リストにリンクさせることにより、コネクション情報リストを形成しているが、各コネクション情報を複数のグループに分け、各コネクション情報が所属するグループを識別できる構成であれば良く、コネクション情報を記憶して管理するための構成は、上記の実施形態に限定されないものである。例えば、グループごとに、コネクション情報自体を記憶する領域を分けて管理する構成などが挙げられる。
20…コネクション情報管理部、21…コネクション保存時間記憶部、22…コネクション監視周期間隔記憶部、23…テーブル内リスト数記憶部、24…テーブル内現在インデックス記憶部、25…コネクション情報監視テーブル記憶部、26…コネクション情報ハッシュ記憶部、26…コネクション情報ハッシュ記憶部、27…周期コネクション監視処理部。