(57)【要約】【課題】サーバ計算機の負荷またはサーバ計算機付近のネットワーク負荷を低減し、クライアント計算機がダウンしたことを迅速に検知することを可能とする。【解決手段】第１のコールバック処理部１６１ａは、クライアント計算機１０ａのアドレスを含む生存通知パケットを、時間間隔Ｔ１で送信する。クライアント受信パケット処理部１４ｂは、送信された生存通知パケットに含まれるアドレス及び当該生存通知パケットが受信された受信時刻を含むレコードをクライアント接続状態テーブル１５ｂに保存する。第２のコールバック処理部１６２ｂは、現在時刻と受信時刻との差が時間間隔Ｔ２より大きいレコードを当該時間間隔Ｔ２でクライアント接続状態テーブル１５ｂから取得する。第２のコールバック処理部１６２ｂは、取得されたレコードに含まれるアドレスが割り当てられたクライアント計算機１０ａがダウンしたことをサーバ計算機２０に通知する。【選択図】      図２
2009271857.tif 000002
【特許請求の範囲】
【請求項１】
第１の計算機と、前記第１の計算機と接続された第２の計算機と、前記第１の計算機及び前記第２の計算機と接続された第３の計算機を具備し、
前記第１の計算機は、前記第１の計算機に割り当てられたアドレスを含む生存通知パケットを、予め定められた第１の時間間隔で送信する送信手段を含み、
前記第２の計算機は、
前記送信された生存通知パケットを受信する受信手段と、
前記受信された生存通知パケットに含まれる前記第１の計算機に割り当てられたアドレス及び当該生存通知パケットが受信された受信時刻を含むレコードを保持するテーブルと、
現在時刻と前記受信時刻との差が予め定められた第２の時間間隔より大きい当該受信時刻を含むレコードを、当該第２の時間間隔で前記テーブルから取得する取得手段と、
前記取得されたレコードに含まれるアドレスが割り当てられた前記第１の計算機がダウンしたことを前記第３の計算機に通知する通知手段と
を含む
ことを特徴とする計算機システム。
【請求項２】
前記第１の計算機の送信手段は、前記第１の計算機に割り当てられたアドレスを含む生存通知パケットを、予め定められた第３の時間間隔で前記第３の計算機に送信し、
前記第３の計算機は、
前記第１の計算機の送信手段によって第３の時間間隔で送信された生存通知パケットを受信する受信手段と、
前記第３の計算機の受信手段によって受信された生存通知パケットに含まれる前記第１の計算機に割り当てられたアドレス及び当該生存通知パケットが受信された受信時刻を含むレコードを保持するテーブルと、
現在時刻と前記第３の計算機のテーブルに保持されているレコードに含まれる受信時刻との差が予め定められた第４の時間間隔より大きい当該レコードを、当該第４の時間間隔で当該第３の計算機のテーブルから取得する取得手段と、
前記第３の計算機の取得手段によって取得されたレコードに含まれるアドレスが割り当てられた前記第１の計算機がダウンしたこと検知する検知手段と
を含む
ことを特徴とする請求項１記載の計算機システム。
【請求項３】
前記第３の時間間隔は前記第１の時間間隔より長いことを特徴とする請求項２記載の計算機システム。
【請求項４】
前記第２の計算機の取得手段は、現在時刻と前記第２の計算機のテーブルに保持されているレコードに含まれる受信時刻との差が前記第３の時間間隔より大きい当該レコードを、前記第３の時間間隔で当該第２の計算機のテーブルから取得し、
前記第２の計算機は、
前記第２の計算機の取得手段によって前記第３の時間間隔で取得されたレコードに含まれるアドレスを含む生存通知パケットを前記第３の計算機に送信する第１の送信手段と、
前記第２の計算機の取得手段によって前記第３の時間間隔で取得されたレコードに含まれるアドレスを含む生存通知済みパケットを前記第１の計算機に送信する第２の送信手段と
を更に含み、
前記第３の計算機の受信手段は、前記第２の計算機の第１の送信手段によって送信された生存通知パケットを受信し、
前記第３の計算機は、前記第３の計算機の受信手段によって受信された生存通知パケットに含まれるアドレスを含む前記第３の計算機のテーブルに保持されているレコードに含まれる受信時刻を、当該生存通知パケットが受信された受信時刻に更新する更新手段を更に含み、
前記第１の計算機は、前記第２の計算機の第２の送信手段によって送信された生存通知済みパケットを受信する受信手段を更に含み、
前記第１の計算機の送信手段は、前記第１の計算機の受信手段によって当該第１の計算機に割り当てられているアドレスが含まれた生存通知済みパケットが受信された場合、前記第３の時間間隔で送信される生存通知パケットの送信をスキップする
ことを特徴とする請求項２記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、サーバ計算機に接続されたクライアント計算機がダウンしたことを検知する計算機システムに関する。
【背景技術】
【０００２】
複数の計算機（以下、クライアント計算機と表記）及びサーバ計算機を備えるクライアントサーバシステム（計算機システム）においては、例えばクライアント計算機の障害の発生により当該クライアント計算機がダウンしたことを監視する場合がある。
【０００３】
例えばクライアント計算機がクライアントサーバシステムにログインする際に、当該クライアント計算機がログインした旨を示す情報が一時的にデータベースに格納される場合を想定する。この場合において、クライアント計算機が終了（ダウン）した場合には即座にその情報をデータベースから削除しないと次のログインができなくなる。このような場合には、クライアント計算機を監視することにより、当該クライアント計算機がダウンしたことを検知する必要がある。
【０００４】
また、サーバ計算機がクライアント計算機に対応するリソースを有する場合においても、当該クライアント計算機がダウンした場合には当該クライアント計算機が利用していたリソースを解放しなければ、当該サーバ計算機はサービスを継続することができない。したがって、クライアント計算機がダウンした場合には、当該クライアント計算機のダウンを検知し、即座にリソースを解放する必要がある。
【０００５】
そこで、例えば各計算機が自計算機に障害が発生した場合に、他計算機にその障害情報を一斉同報し、障害情報を受け取った他計算機はその情報を、更に、自己の計算機に通信路を介して接続された他計算機に一斉同報する技術（以下、先行技術１と表記）が開示されている（例えば、特許文献１を参照）。この先行技術１によれば、各計算機は障害が発生した計算機からの障害情報の直接通知の他に、他計算機からの迂回通知により障害情報が通知されるため、ある通信路が通信不能になった場合でも、他の通信路を介して障害情報を受け取ることができる。
【０００６】
ここで、上記した先行技術１において、例えばＴＣＰ／ＩＰ（Transmission Control Protocol／Internet Protocol）のようなアイドル状態の時には何もパケット（情報）を送信しないプロトコルを用いて通信している場合を想定する。このような場合に、例えばクライアント計算機の電源が急に落ちたり、当該クライアント計算機における物理的な回線が切れたりした場合には、先行技術においては障害情報を送信することができず、正常なクローズのシーケンスが動作しないため、当該クライアント計算機に障害が発生したこと（つまり、ダウンしたこと）を他のクライアント計算機は検知することができない。
【０００７】
そこで、例えば複数のクライアント計算機の各々は、当該クライアント計算機から生存していることを表すパケット（以下、生存通知パケットと表記）を定期的にサーバ計算機に対して送信する。これにより、クライアント計算機から生存通知パケットが一定時間受信されない場合には、サーバ計算機によって当該クライアント計算機がダウンしたことが検知される技術（以下、先行技術２と表記）が知られている。
【特許文献１】特開平１１−１７５４８９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、上記した先行技術２において、クライアント計算機がダウンしたことを即座に検知するためには、当該クライアント計算機からサーバ計算機に送信される生存通知パケットの送信間隔を短くする必要がある。
【０００９】
しかしながら、このように生存通知パケットの送信間隔を短くすると、例えばクライアントサーバシステムを構成するクライアント計算機の数が多い場合にはサーバ計算機の負荷（ＣＰＵ負荷）またはサーバ計算機近傍のネットワークの負荷が高くなる。
【００１０】
そこで、本発明の目的は、サーバ計算機の負荷またはサーバ計算機付近のネットワーク負荷を低減し、クライアント計算機がダウンしたことを迅速に検知する計算機システムを提供することにある。
【課題を解決するための手段】
【００１１】
本発明の１つの態様によれば、第１の計算機と、前記第１の計算機と接続された第２の計算機と、前記第１の計算機及び前記第２の計算機と接続された第３の計算機を具備し、前記第１の計算機は、前記第１の計算機に割り当てられたアドレスを含む生存通知パケットを、予め定められた第１の時間間隔で送信する送信手段を含み、前記第２の計算機は、前記送信された生存通知パケットを受信する受信手段と、前記受信された生存通知パケットに含まれる前記第１の計算機に割り当てられたアドレス及び当該生存通知パケットが受信された受信時刻を含むレコードを保持するテーブルと、現在時刻と前記受信時刻との差が予め定められた第２の時間間隔以上である当該受信時刻を含むレコードを、当該第２の時間間隔で前記テーブルから取得する取得手段と、前記取得されたレコードに含まれるアドレスが割り当てられた前記第１の計算機がダウンしたことを前記第３の計算機に通知する通知手段とを含むことを特徴とする計算機システムが提供される。
【発明の効果】
【００１２】
本発明によれば、サーバ計算機の負荷またはサーバ計算機付近のネットワーク負荷を低減し、クライアント計算機がダウンしたことを迅速に検知することを可能とする。
【発明を実施するための最良の形態】
【００１３】
以下、図面を参照して、本発明の実施形態について説明する。
【００１４】
図１は、本実施形態に係るクライアントサーバシステム（計算機システム）のハードウェア構成を示すブロック図である。
【００１５】
図１に示すクライアントサーバシステムは、主として複数のクライアント計算機１０（第１及び第２の計算機）と、当該複数のクライアント計算機１０からアクセスされるサーバ計算機２０（第３の計算機）とから構成される。複数のクライアント計算機１０には、例えばクライアント計算機１０ａ及び１０ｂが含まれる。複数のクライアント計算機１０は、例えばローカルエリアネットワーク（ＬＡＮ：Local Area Network）のようなネットワーク３０を介してサーバ計算機２０と接続されている。また、複数のクライアント計算機１０に含まれるクライアント計算機１０ａ及び１０ｂは、互いにネットワーク３０を介して接続されている。
【００１６】
また、複数のクライアント計算機１０（に含まれるクライアント計算機１０ａ及び１０ｂ）は、例えば当該クライアント計算機同士でグループを構成する。このグループを構成する複数のクライアント計算機１０間では、互いに生存確認のためのパケットを送信することにより、互いに他のクライアント計算機がダウンしたことをサーバ計算機２０に通知する機能を有する。
【００１７】
図２は、図１に示す複数のクライアント計算機１０に含まれるクライアント計算機１０ａ及び１０ｂの主として機能構成を示すブロック図である。
【００１８】
クライアント計算機１０ａは、クライアントタイマー部１１ａ、クライアント接続部１２ａ、クライアント内部記憶部１３ａ、クライアント受信パケット処理部１４ａ、クライアント接続状態テーブル１５ａ及びクライアントコールバック処理部１６ａを含む。
【００１９】
クライアントタイマー部１１ａは、現在時刻を取得する機能を有する。また、クライアントタイマー部１１ａは、例えば登録された時間が経過した場合にその旨を通知する機能を有する。クライアントタイマー部１１ａは、例えばクライアント計算機１０ａに内蔵されたリアルタイムクロック機能またはアラーム機能等により実現される。
【００２０】
クライアント接続部１２ａは、サーバ計算機２０に対して、予めクライアントサーバシステムにおいて決められているマルチキャストアドレスを要求するためのマルチキャストアドレス要求パケットを送信する。このマルチキャストアドレスは、サーバ計算機２０において保持されている。なお、このマルチキャストアドレスに対して例えばパケットが送信された場合には、例えばクライアントサーバシステムを構成する複数のクライアント計算機１０によって受信される。
【００２１】
クライアント接続部１２ａは、マルチキャストアドレス要求パケットに対する応答として、マルチキャストアドレスを含むマルチキャストアドレス応答パケットをサーバ計算機２０から受信する。クライアント接続部１２ａは、受信されたマルチキャストアドレス応答パケットからマルチキャストアドレスを取得する。クライアント接続部１２ａは、取得されたマルチキャストアドレスをクライアント内部記憶部１３ａに保存（格納）する。
【００２２】
クライアント内部記憶部１３ａには、クライアント計算機１０ａが例えばサーバ計算機２０と接続を開始した時刻（以下、開始時刻と表記）及び後述する生存確認送信スキップフラグ等が保存される。
【００２３】
クライアント接続部１２ａは、クライアント計算機１０ａに割り当てられているクライアントアドレス及びクライアント内部記憶部１３ａに保存されている開始時刻が格納されたグループ参加要求マルチパケットを、クライアント内部記憶部１３ａに保存されているマルチキャストアドレスに対して送信する。これにより、クライアントサーバシステムを構成する他のクライアント計算機（例えば、クライアント計算機１０ｂ）に対してグループへの参加を要求する。
【００２４】
また、クライアント接続部１２ａは、例えばクライアント計算機１０ａがサーバ計算機２０に接続する際に、当該サーバ計算機２０に対して接続要求パケットを送信する。この接続要求パケットには、クライアント計算機１０ａに割り当てられているクライアントアドレス及びクライアント内部記憶部１３ａに保存されている開始時刻が格納される。また、この接続要求パケットには、例えばクライアント計算機１０ａがグループを構成する（つまり、グループ化された）か否かを示すグループフラグ（「ＴＲＵＥ」または「ＦＡＬＳＥ」）が格納される。クライアント計算機１０ａがグループ化されたか否かは、後述するクライアント接続状態テーブル１５ａを参照して決定される。
【００２５】
クライアント接続部１２ａは、接続要求パケットに対する応答として、接続応答パケットをサーバ計算機２０から受信する。この接続応答パケットには、クライアント送信間隔（第１の時間間隔）、クライアントタイムアウト時間（第２の時間間隔）及びサーバ送信間隔（第３の時間間隔）が格納（設定）されている。クライアント送信間隔は、例えばクライアント計算機１０ａがグループを構成する他のクライアント計算機（例えば、クライアント計算機１０ｂ）に自身の生存を通知する間隔を示す。クライアントタイムアウト時間は、例えばクライアント計算機１０ａがグループを構成する他のクライアント計算機をダウンしたとみなすまでの時間を示す。サーバ送信間隔は、例えばクライアント計算機１０ａがサーバ計算機２０に対して自身の生存を通知する間隔を示す。
【００２６】
クライアント接続部１２ａは、受信された接続応答パケットに応じて、クライアントタイマー部１１ａにコールバック処理を登録する。このとき、クライアント接続１２ａは、受信された接続応答パケットに含まれるクライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔をクライアント内部記憶部１３ａに保存する。なお、コールバック処理の登録の詳細については後述する。
【００２７】
クライアント受信パケット処理部１４ａは、クライアント接続部１２ａによって送信されたグループ参加要求マルチキャストパケットに対する応答として、例えばクライアント計算機１０ｂからのグループ参加応答マルチキャストパケットを受信する。このグループ参加応答マルチキャストパケットには、グループ参加要求マルチキャストパケットの送信先であるクライアント計算機１０ｂに割り当てられているクライアントアドレス及び当該クライアント計算機１０ｂが例えばサーバ計算機２０と接続を開始した時刻（開始時刻）が含まれる。
【００２８】
クライアント受信パケット処理部１４ａは、受信されたグループ参加応答マルチキャストパケットに含まれるクライアントアドレス及び開始時刻を含むレコード（クライアント接続状態テーブルレコード）を、クラインアント接続状態テーブル１５ａに保存（登録）する。
【００２９】
クライアント接続状態テーブル１５ａには、クライアント計算機１０ａとグループを構成する他のクライアント計算機（例えば、クライアント計算機１０ｂ）のクライアントアドレス及び開始時刻を含むレコードが保持される。クライアント接続状態テーブル１５ａに保持されるレコードには、クライアントアドレス（フィールド）、開始時刻（フィールド）及び最終確認時刻（フィールド）が含まれる。
【００３０】
また、クライアント受信パケット処理部１４ａは、他のクライアント計算機（例えば、クライアント計算機１０ｂ）からグループ参加要求マルチキャストパケットが送信された場合には、当該グループ参加要求マルチキャストパケットを受信する。クライアント受信パケット処理部１４ａは、グループ参加要求マルチキャストパケットが受信された場合、新しいレコードとして当該グループ参加要求マルチキャストパケットに含まれるクライアントアドレス及び開始時刻を、クライアント接続状態テーブル１５ａに保存する。クライアント受信パケット処理部１４ａは、受信されたグループ参加要求マルチキャストパケットに対する応答として、クライアント計算機１０ａのクライアントアドレス及び開始時刻を含むクライアント参加応答マルチキャストパケットをマルチキャストアドレスに対して送信する。
【００３１】
クライアント受信パケット処理部１４ａは、受信されたクライアント参加要求マルチパケットに応じてクライアント接続状態テーブル１５ａを更新（つまり、レコードを保存）した後、当該クライアント接続状態テーブル１５ａに保存（保持）されているレコード数が１である場合には、クライアントタイマー部１１ａに登録されているコールバック処理を全てキャンセルする。この場合、クライアント受信パケット処理部１４ａは、クライアント計算機１０ａがグループ化されたことを示すグループフラグが格納されたグループ化パケットをサーバ計算機２０に対して送信する。
【００３２】
クライアント受信パケット処理部１４ａは、グループ化パケットに対する応答としてグループ化応答パケットをサーバ計算機２０から受信する。このグループ化応答パケットには、上記した接続応答パケットと同様に、クライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔が格納（設定）されている。クライアント受信パケット処理部１４ａは、受信されたグループ化応答パケットに応じて、クライアントタイマー部１１ａにコールバック処理を登録する。このとき、グループ化応答パケットに含まれるクライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔は、クライアント内部記憶部１３ａに保存される。
【００３３】
また、クライアント受信パケット処理部１４ａは、他のクライアント計算機（例えば、クライアント計算機１０ｂ）から当該クライアント計算機１０ｂの生存を通知するための生存通知パケット（以下、クライアント生存通知マルチキャストパケットと表記）が送信された場合に、当該クライアント生存通知マルチキャストパケットを受信する。このクライアント生存通知マルチキャストパケットには、当該クライアント生存通知マルチキャストパケットの送信元であるクライアント計算機１０ｂのクライアントアドレス及び開始時刻が含まれる。
【００３４】
クライアント受信パケット処理部１４ａは、クライアント生存通知マルチキャストパケットが受信された場合、当該クライアント生存通知マルチキャストパケットが受信された受信時刻（現在時刻）をクライアントタイマー部１１ａから取得する。クライアント受信パケット処理部１４ａは、受信された生存通知マルチキャストパケットに含まれるクライアントアドレス及び開始時刻を含む（一致する）レコードをクライアント接続状態テーブル１５ａから取り出す。
【００３５】
クライアント受信パケット処理部１４ａは、取り出されたレコードに含まれる最終確認時刻フィールドにクライアントタイマー部１１ａから取得された現在時刻（受信時刻）を保存する（置き換える）。
【００３６】
つまり、クライアント接続状態テーブル１５ａに保持されるレコードに含まれる最終確認時刻フィールドには、グループを構成する他のクライアント計算機（例えば、クライアント計算機１０ｂ）から最後に送信されたクライアント生存通知マルチキャストパケットが受信された受信時刻が保存される。
【００３７】
クライアント受信パケット処理部１４ａは、例えばクライアント計算機１０ｂから後述する生存通知済みクライアントマルチキャストパケットが送信された場合には、当該生存通知済みクライアントマルチキャストパケットを受信する。この生存通知済みクライアントマルチキャストパケットには、クライアントアドレス及び開始時刻が格納されている。クライアント受信パケット処理部１４ａは、受信された生存通知済みクライアントマルチキャストパケットにクライアント計算機１０ａのクライアントアドレス及び開始時刻が格納されている場合、クライアント内部記憶部１３ａに生存確認送信スキップフラグ「ＴＲＵＥ」をセット（保存）する。なお、生存確認送信スキップフラグには、「ＴＲＵＥ」及び「ＦＡＬＳＥ」が含まれる。
【００３８】
クライアントコールバック処理部１６ａは、クライアントタイマー部１１ａに登録されたコールバック処理を実行する。このコールバック処理においては、例えば上記した生存を通知するためのパケットがグループを構成する例えばクライアント計算機１０ｂ及びサーバ計算機２０に送信される。また、コールバック処理においては、例えばグループを構成するクライアント計算機１０ｂがダウンしたことがサーバ計算機２０に通知される。
【００３９】
クライアントコールバック処理部１６ａは、第１のコールバック処理部１６１ａ、第２のコールバック処理部１６２ａ及び第３のコールバック処理部１６３ａを含む。
【００４０】
第１のコールバック処理部１６１ａは、クライアントタイマー部１１ａからの通知に応じて、グループを構成する他のクライアント計算機（例えば、クライアント計算機１０ｂ）にクライアント計算機１０ａの生存を通知する処理（生存通知パケットクライアント送信コールバック処理）を実行する。クライアントタイマー部１１ａは、生存通知パケットクライアント送信コールバック処理において登録されている時間間隔で通知を行う。
【００４１】
第１のコールバック処理部１６１ａは、クライアントタイマー部１１ａからの通知を受けると、クライアント計算機１０ａのクライアントアドレス及びクライアント内部記憶部１３ａに保存されている開始時刻を含むクライアント生存通知マルチキャストパケットを、クライアント内部記憶部１３ａに保存されているマルチキャストアドレスに対して送信する。
【００４２】
第２のコールバック処理部１６２ａは、クライアントタイマー部１１ａからの通知に応じて、グループを構成する他のクライアント計算機（例えば、クライアント計算機１０ｂ）の生存を確認する処理（クライアント生存確認コールバック処理）を実行する。クライアントタイマー部１１ａは、クライアント生存確認コールバック処理において登録されている時間間隔で通知を行う。
【００４３】
第２のコールバック処理部１６２ａは、クライアントタイマー部１１ａからの通知を受けると、当該クライアントタイマー部１１ａから現在時刻を取得する。第２のコールバック処理部１６２ａは、取得された現在時刻とクライアント接続状態テーブル１５ａに保持されている最終確認時刻フィールドの値（時刻）との差を算出する。第２のコールバック処理部１６２ａは、算出された差がクライアント内部記憶部１３ａに保存されているクライアントタイムアウト時間より大きい全てのレコードを、クライアント接続状態テーブル１５ａから取り出す。
【００４４】
第２のコールバック処理部１６２ａは、取り出された全てのレコードに含まれるクライアントアドレス及び開始時刻が格納されたダウン通知パケットをサーバ計算機２０に対して送信する。このダウン通知パケットが送信されることにより、例えばクライアント計算機１０ｂがダウンしたことがサーバ計算機２０に通知される。第２のコールバック処理部１６２ａは、ダウン通知パケットが送信されると、取り出された全てのレコードを、クライアント接続状態テーブル１５ａから削除する。
【００４５】
第２のコールバック処理部１６２ａは、取り出された全てのレコードが削除された後のクライアント接続状態テーブル１５ａに保存されているレコード数が０である場合には、クライアント計算機１０ａがグループ化されていないことを示すグループフラグ（つまり、「ＦＡＬＳＥ」）が格納されたグループ化パケットをサーバ計算機２０に送信する。
【００４６】
第３のコールバック処理部１６３ａは、クライアントタイマー部１１ａからの通知に応じて、グループ化された複数のクライアント計算機１０（例えば、クライアント計算機１０ａ及び１０ｂ）の生存をサーバ計算機２０に対して通知する処理（生存通知パケットサーバ送信コールバック処理）を実行する。クライアントタイマー部１１ａは、生存通知パケットサーバ送信コールバック処理において登録されている時間間隔で通知を行う。
【００４７】
第３のコールバック処理部１６３ａは、クライアントタイマー部１１ａからの通知を受けると、クライアント内部記憶部１３ａに保存されている生存確認送信スキップフラグを確認する。第３のコールバック処理部１６３ａは、生存確認送信スキップフラグが「ＴＲＵＥ」である場合には、当該生存確認送信スキップフラグ「ＦＡＬＳＥ」をクライアント内部記憶部１３ａにセットして処理を終了する。
【００４８】
つまり、クライアント内部記憶部１３ａに生存確認送信スキップフラグ「ＴＲＵＥ」がセット（保存）されている場合には、生存通知パケットサーバ送信コールバック処理が１回スキップされる。
【００４９】
一方、生存確認スキップフラグが「ＦＡＬＳＥ」である場合には、第３のコールバック処理部１６２ａは、クライアントタイマー部１１ａから現在時刻を取得する。第３のコールバック処理部１６３ａは、取得された現在時刻とクライアント接続状態テーブル１５ａに保持されているレコードに含まれる最終確認時刻フィールドの値（時刻）との差を算出する。
【００５０】
この最終確認時刻フィールドには、当該最終確認時刻フィールドを含むレコードに含まれるクライアントアドレスが割り当てられているクライアント計算機（例えば、クライアント計算機１０ｂ）から最後にクライアント生存通知マルチキャストパケットが受信された時刻（受信時刻）が保存されている。
【００５１】
第３のコールバック処理部１６３ａは、算出された差がクライアント内部記憶部１３ａに保存されているサーバ送信間隔以上でない、つまり、サーバ間隔より小さい全てのレコードを、クライアント接続状態テーブル１５ａから取り出す。
【００５２】
第３のコールバック処理部１６３ａは、取り出された全てのレコードに含まれるクライアントアドレス及び開始時刻が格納された生存通知パケットをサーバ計算機２０に送信する。この生存通知パケットには、取り出された全てのレコードに含まれるクライアントアドレス及び開始時刻に加えて、クライアント計算機１０ａのクライアントアドレス及びクライアント内部記憶部１３ａに格納されている開始時刻が格納される。
【００５３】
第３のコールバック処理部１６３ａは、生存通知パケットをサーバ計算機２０に送信した場合、クライアント接続状態テーブル１５ａから取り出された全てのレコードに含まれるクライアントアドレス及び開始時刻が格納された生存通知済みクライアントマルチキャストパケットを、クライアント内部記憶部１３ａに保存されているマルチキャストアドレスに対して送信（マルチキャスト）する。これにより、生存通知済みクライアントマルチキャストパケットに含まれるクライアントアドレスが割り当てられているクライアント計算機（例えば、クライアント計算機１０ｂ）の生存をサーバ計算機２０に通知したことが、当該クライアント計算機１０ｂに対して通知される。
【００５４】
クライアント計算機１０ｂは、クライアントタイマー部１１ｂ、クライアント接続部１２ｂ、クライアント内部記憶部１３ｂ、クライアント受信パケット処理部１４ｂ、クライアント接続状態テーブル１５ｂ及びクライアントコールバック処理部１６ｂを含む。
【００５５】
クライアント計算機１０ｂに含まれる各部１１ｂ〜１６ｂは、上記したクライアント計算機１０ａに含まれる各部１１ａ〜１６ａと同様であるため、その詳しい説明は省略する。
【００５６】
また、クライアント計算機１０ｂのクライアントコールバック処理部１６ｂは、第１のクライアントコールバック処理部１６１ｂ、第２のクライアントコールバック処理部１６２ｂ及び第３のクライアントコールバック処理部１６３ｂを含む。これらの各部１６１ｂ〜１６３ｂは、上記したクライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる各部１６１ａ〜１６３ａと同様であるため、その詳しい説明は省略する。
【００５７】
なお、図２においては、クライアント計算機１０ａ及び１０ｂの構成について説明したが、当該クライアント計算機１０ａ及び１０ｂ以外のクライアント計算機についても同様である。
【００５８】
図３は、サーバ計算機２０の主として機能構成を示すブロック図である。図３に示すように、サーバ計算機２０は、サーバタイマー部２１、サーバ接続待機部２２、サーバ接続状態テーブル２３、サーバ受信パケット処理部２４及びサーバコールバック処理部２５を含む。
【００５９】
なお、サーバ計算機２０には、上記したグループを構成する複数のクライアント計算機１０間で互いの生存を通知する時間間隔（クライアント送信間隔）としてＴ１、当該グループを構成する複数のクライアント計算機が他のクライアント計算機をダウンしたとみなすまでの時間間隔（クライアントタイムアウト時間）としてＴ２、複数のクライアント計算機１０の各々が自身の生存をサーバ計算機２０に通知する時間間隔（サーバ送信間隔）としてＴ３、サーバ計算機２０が複数のクライアント計算機１０の各々をダウンしたとみなすまでの時間間隔（第４の時間間隔）としてＴ４が予め定められているものとする。
【００６０】
ここで、時間間隔Ｔ２は時間間隔Ｔ１より長く、時間間隔Ｔ４は時間間隔Ｔ３より長く定められているものとする。また、時間間隔Ｔ３は時間間隔Ｔ１より長く、時間間隔Ｔ４は時間間隔Ｔ２より長く定められているものとする。
【００６１】
サーバタイマー部２１は、現在時刻を取得する機能を有する。また、サーバタイマー部２１は、例えば登録された時間が経過した場合にその旨を通知する機能を有する。サーバタイマー部２１は、例えばサーバ計算機２０に内蔵されたリアルタイムクロック機能またはアラーム機能等により実現される。
【００６２】
サーバ接続待機部２２は、例えばクライアント計算機１０ａによって送信されたマルチキャストアドレス要求パケットを受信する。サーバ接続待機部２２は、マルチキャストアドレス要求パケットが受信された場合、予めクライアントサーバシステムに決められているマルチキャストアドレスを含むマルチキャストアドレス応答パケットをクライアント計算機１０ａに送信する。
【００６３】
サーバ接続待機部２２は、例えばクライアント計算機１０ａによって送信された接続要求パケットを受信する。
【００６４】
サーバ接続待機部２２は、受信された接続要求パケットに含まれるグループフラグが「ＴＲＵＥ（つまり、クライアント計算機１０ａがグループ化された）」であれば、当該接続要求パケットに対する応答として、クライアント送信間隔にＴ１、クライアントタイムアウト時間にＴ２、サーバ送信間隔にＴ３が設定された接続応答パケットをクライアント計算機１０ａに送信する。このとき、サーバ接続待機部２２は、サーバタイマー部２１に対して、上記した時間間隔Ｔ４でコールバック処理を登録する。
【００６５】
サーバ接続待機部２２は、受信された接続要求パケットに含まれるグループフラグが「ＦＡＬＳＥ（つまり、クライアント計算機１０ａがグループ化されていない）」であれば、当該接続要求パケットに対する応答として、クライアント送信間隔に０、クライアントタイムアウト時間に０、サーバ送信間隔にＴ１が設定された接続応答パケットをクライアント計算機１０ａに送信する。このとき、サーバ接続待機部２２は、サーバタイマー部２１に対して、時間間隔Ｔ２でコールバック処理を登録する。
【００６６】
サーバ接続状態テーブル２３には、サーバ計算機２０に接続されている複数のクライアント計算機１０（例えば、クライアント計算機１０ａ及び１０ｂ）のクライアントアドレス、開始時刻及び最終確認時間を含むレコード（サーバ接続状態テーブルレコード）が保持される。
【００６７】
サーバ受信パケット処理部２４は、例えばクライアント計算機１０ａによって送信されたグループ化パケットを受信する。
【００６８】
ここで、サーバ受信パケット処理部２４によって受信されたグループ化パケットに、例えばクライアント計算機１０ａがグループ化されたことを示すグループフラグ「ＴＲＵＥ」が格納されている場合を想定する。この場合、サーバ受信パケット処理部２４は、受信されたグループ化パケットに対する応答として、クライアント送信間隔にＴ１、クライアントタイムアウト時間にＴ２及びサーバ送信間隔にＴ３が設定されたグループ化応答パケットをクライアント計算機１０ａに送信する。
【００６９】
一方、サーバ受信パケット処理部２４によって受信されたグループ化パケットに例えばクライアント計算機１０ａがグループ化されていないことを示すグループフラグ「ＦＡＬＳＥ」が格納されている場合を想定する。この場合、サーバ受信パケット処理部２４は、受信されたグループ化パケットに対する応答として、クライアント送信間隔に０、クライアントタイムアウト時間に０及びサーバ送信間隔にＴ１が設定されたグループ化応答パケットをクライアント計算機１０ａに送信する。
【００７０】
サーバ受信パケット処理部２４によって送信されたグループ化応答パケットに設定されているクライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔に応じて、各種コールバック処理がクライアントタイマー部１１ａに登録される。
【００７１】
このように、グループ化パケットに格納されているグループフラグに応じて、サーバ受信パケット処理部２４によって送信されるグループ化応答パケットに格納されるクライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔は異なる。つまり、例えばクライアント計算機１０ａがグループ化されている否かによって、クライアントタイマー部１１ａにおけるコールバック処理において登録される時間間隔は異なる。
【００７２】
換言すれば、クライアント計算機１０ａがグループ化されていれば、クライアントタイマー部１１ａには当該クライアント計算機１０ａがグループ化されている場合のコールバック処理が登録される。一方、クライアント計算機１０ａがグループ化されていなければ、クライアントタイマー部１１ａには当該クライアント計算機１０ａがグループ化されていない場合のコールバック処理が登録される。
【００７３】
サーバ受信パケット処理部２４は、例えばクライアント計算機１０ａによって送信されたダウン通知パケットを受信する。サーバ受信パケット処理部２４は、受信されたダウン通知パケットに含まれるクライアントアドレス及び開始時刻を含むレコードを、サーバ接続状態テーブル２３から削除する。
【００７４】
また、サーバ受信パケット処理部２４は、例えばクライアント計算機１０ａによって送信された生存通知パケットを受信する。サーバ受信パケット処理部２４は、受信された生存通知パケットに格納されているクライアントアドレス及び開始時刻を含む全てのレコードに含まれる最終確認時刻フィールドの値を現在時刻に置き換える。この現在時刻は、サーバタイマー部２１から取得される。
【００７５】
サーバコールバック処理部２５は、サーバタイマー部２１からの通知に応じて、サーバ計算機２０と接続されている複数のクライアント計算機１０（例えば、クライアント計算機１０ａ及び１０ｂ）の生存を確認する処理（サーバ生存確認コールバック処理）を実行する。この場合、サーバタイマー部２１は、当該サーバタイマー部２１に登録されている時間間隔（Ｔ２またはＴ４）でサーバコールバック処理部２５に通知する。ここでは、サーバタイマー部２１に登録されている時間間隔は、時間間隔Ｔ４であるものとして説明する。
【００７６】
サーバコールバック処理部２５は、サーバタイマー部２１からの通知を受けると、当該サーバタイマー部２１から現在時刻を取得する。サーバコールバック処理部２５は、取得された現在時刻とサーバ接続状態テーブル２３に保持されている最終確認時刻フィールドの値（時刻）との差を算出する。サーバコールバック処理部２５は、算出された差が時間間隔Ｔ４より大きい全てのレコードを、サーバ接続状態テーブル２３から検索する。これにより、サーバコールバック処理部２５は、算出された差が時間間隔Ｔ４より大きい全てのレコードに含まれるクライアントアドレスが割り当てられているクライアント計算機がダウンしたことを検知する。サーバコールバック処理部２５は、検索された全てのレコードを、サーバ接続状態テーブル２３から削除する。
【００７７】
図４は、図２に示すクライアント内部記憶部１３ａ（及びクライアント内部記憶部１３ｂ）のデータ構造の一例を示す。図４に示すように、クライアント内部記憶部１３ａには、開始時刻、生存確認送信スキップフラグ、マルチキャストアドレス、クライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔が保存される。
【００７８】
開始時刻は、クライアント計算機１０ａがサーバ計算機２０と接続を開始した時刻を示す。生存確認送信スキップフラグは、上記したように例えば生存通知パケットサーバ送信コールバック処理をスキップするか否か（「ＴＲＵＥ」または「ＦＡＬＳＥ」）を示す。マルチキャストアドレスは、複数のクライアント計算機１０が指定されたアドレスである。また、クライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔は、上記した各種コールバック処理において登録される時間間隔である。
【００７９】
図５は、図２に示すクライアント接続状態テーブル１５ａに保持されるレコードのデータ構造の一例を示す。図５に示すように、レコードには、クライアントアドレスフィールド、開始時刻フィールド及び最終確認時刻フィールドが含まれる。
【００８０】
クライアントアドレスフィールドには、クライアント計算機１０ａとグループ化されているクライアント計算機（例えば、クライアント計算機１０ｂ）に割り当てられているクライアントアドレスが保存される。開始時刻フィールドには、クライアントアドレスフィールドに保存されているクライアントアドレスが割り当てられているクライアント計算機がサーバ計算機２０と接続を開始した時刻が保存される。また、最終確認時刻フィールドには、クライアントアドレスフィールドには、クライアントアドレスが割り当てられているクライアント計算機の生存が最後に確認された時刻（例えば、生存通知パケットが受信された受信時刻）が保存される。
【００８１】
なお、図４に示すサーバ接続状態テーブル２３に保持されるレコードのデータ構造についても図５に示すデータ構造と同様であるため、その詳しい説明は省略する。
【００８２】
次に、図６のシーケンスチャートを参照して、例えばクライアント計算機１０ａがクライアント計算機１０ｂを含むグループに参加し、サーバ計算機２０に接続するまでの処理手順について説明する。なお、クライアント計算機１０ｂは既にサーバ計算機２０と接続されているものとする。
【００８３】
ここで、上記したように例えばグループを構成する複数のクライアント計算機１０間で互いの生存を通知する時間間隔（クライアント送信間隔）としてＴ１、当該グループを構成する複数のクライアント計算機１０の各々が他のクライアント計算機をダウンしたとみなすまでの時間間隔（クライアントタイムアウト時間）としてＴ２、複数のクライアント計算機１０の各々が自身の生存をサーバ計算機２０に通知する時間間隔（サーバ送信間隔）としてＴ３、サーバ計算機２０が複数のクライアント計算機１０の各々をダウンしたとみなすまでの時間間隔としてＴ４が予め定められているものとする。
【００８４】
上記したように、時間間隔Ｔ１〜Ｔ４は、上記した各種コールバック処理において登録されるが、サーバ計算機２０に接続されているクライアント計算機がグループ化されているか否かに応じて登録される時間間隔が異なる。
【００８５】
まず、クライアント計算機１０ａは、サーバ計算機２０に接続する際、クライアント内部記憶部１３ａについて初期化処理を実行する。この場合、クライアント計算機１０ａは、クライアント内部記憶部１３ａに保存されている開始時刻として現在時刻を保存する。この現在時刻は、クライアントタイマー部１１ａから取得される。また、クライアント計算機１０ａは、クライアント内部記憶部１３ａに生存確認送信スキップフラグ「ＦＡＬＳＥ」をセット（保存）する。
【００８６】
クライアント計算機１０ａのクライアント接続部１２ａは、マルチキャストアドレスを要求するためのマルチキャストアドレス要求パケットをサーバ計算機２０のサーバ接続待機部２２に送信する（ステップＳ１）。このマルチキャストアドレスは、予めクライアントサーバシステムにおいて決められている。
【００８７】
サーバ計算機２２のサーバ接続待機部２２は、クライアント接続部１２ａによって送信されたマルチキャストアドレス要求パケットを受信する。サーバ接続待機部２２は、マルチキャストアドレス要求パケットが受信されると、当該マルチキャストアドレス要求パケットに対する応答としてマルチキャストアドレス応答パケットをクライアント接続部１２ａに送信する。
【００８８】
ここで、図７は、マルチキャストアドレス応答パケットのデータ構造の一例を示す。図７に示すように、マルチキャストアドレス応答パケットには、マルチキャストアドレスが格納される。
【００８９】
再び図６に戻ると、クライアント計算機１０ａのクライアント接続部１２ａは、サーバ接続待機部２２によって送信されたマルチキャストアドレス応答パケットを受信する。クライアント接続部１２ａは、受信されたマルチキャストアドレス応答パケットに格納されているマルチキャストアドレスを取得する。クライアント接続部１２ａは、取得されたマルチキャストアドレスをクライアント内部記憶部１３ａに保存する（ステップＳ３）。
【００９０】
次に、クライアント接続部１２ａは、グループへの参加を要求するグループ参加要求マルチキャストパケットを、クライアント内部記憶部１３ａに保存されたマルチキャストアドレスに対して送信する（ステップＳ４）。これにより、グループ参加要求マルチキャストパケットは、クライアント計算機１０ｂを含む複数のクライアント計算機１０に対して送信される。クライアント接続部１２ａは、グループ参加要求マルチキャストパケットを送信した後、一定時間（Ｔｃ）待機する。
【００９１】
ここで、図８は、グループ参加要求マルチキャストパケットのデータ構造の一例を示す。図８に示すように、グループ参加要求マルチキャストパケットには、クライアントアドレス及び開始時刻が格納される。このクライアントアドレスは、グループ参加要求マルチキャストパケットの送信元であるクライアント計算機１０ａに割り当てられているアドレスである。また、開始時刻は、クライアント内部記憶部１３ａに保存されている開始時刻である。
【００９２】
再び図６に戻ると、既にサーバ計算機２０との接続処理が完了しているクライアント計算機１０ｂのクライアント受信パケット処理部１４ｂは、クライアント接続部１２ａによって送信されたグループ参加要求マルチキャストパケットを受信する。クライアント受信パケット処理部１４ｂは、受信されたグループ参加要求マルチキャストパケットに応じてクライアント接続状態テーブル１５ｂを更新する（ステップＳ５）。この場合、クライアント受信パケット処理部１４ｂは、クライアント接続状態テーブル１５ｂの新しいレコードとして、受信されたグループ参加要求マルチキャストパケットに格納されているクライアント計算機１０ａのクライアントアドレス及び開始時刻を保存する。
【００９３】
次に、クライアント受信パケット処理部１４ｂは、受信されたグループ参加要求マルチキャストパケットに対する応答としてグループ参加応答マルチキャストパケットを、マルチキャストアドレスに対して送信する（ステップＳ６）。
【００９４】
ここで、クライアント計算機１０ｂはサーバ計算機２０と既に接続されているため、上記したステップＳ１〜ステップＳ３に相当する処理が実行されている。よって、このステップＳ６の処理においては、クライアント内部記憶部１３ｂに既に保存されているマルチキャストパケットが用いられる。これにより、グループ参加応答マルチキャストパケットは、クライアント計算機１０ａを含む複数のクライアント計算機１０に対して送信される。
【００９５】
なお、グループ参加応答マルチキャストパケットには、上記した図８に示すグループ参加要求マルチキャストパケットと同様に、クライアントアドレス及び開始時刻が格納される。このクライアントアドレスは、クライアント計算機１０ｂのクライアントアドレスである。また、開始時刻は、クライアント内部記憶部１３ｂに格納されている開始時刻である。
【００９６】
クライアント計算機１０ａのクライアント受信パケット処理部１４ａは、クライアント受信パケット処理部１４ｂによって送信されたグループ参加応答マルチキャストパケットを受信する。クライアント受信パケット処理部１４ａは、受信されたグループ参加応答マルチキャストパケットに応じてクライアント接続状態テーブル１５ａを更新する（ステップＳ７）。この場合、クライアント受信パケット処理部１４ａは、クライアント接続状態テーブル１５ａの新しいレコードとして、受信されたグループ参加応答マルチキャストパケットに格納されているクライアント計算機１０ｂのクライアントアドレス及び開始時刻を保存する。
【００９７】
なお、上記したステップＳ５〜ステップＳ７の処理は、例えばクライアント接続部１２ａが待機している一定時間Ｔｃの間に実行される。
【００９８】
一方、クライアント計算機１０ｂのクライアント受信パケット処理部１４ｂは、クライアント接続状態テーブル１５ｂに保持されているレコードの数を確認する。このとき、クライアント接続状態テーブル１５ｂに保持されているレコードの数が１である場合には、クライアントタイマー部１１ｂに登録されているコールバック処理を全てキャンセルする。
【００９９】
クライアント接続状態テーブル１５ｂに保持されているレコードの数は、クライアント計算機１０ｂとグループを構成するクライアント計算機の数を表す。つまり、クライアント接続状態テーブル１５ｂに保持されているレコードの数が１以上である場合には、クライアント計算機１０ｂはグループ化されていることを示す。
【０１００】
このとき、クライアント接続状態テーブル１５ｂに保持されているレコードの数が１であれば、当該クライアント接続状態テーブル１５ｂに保持されているレコードは上記したステップＳ５において保存されたクライアント計算機１０ａのクライアントアドレス及び開始時刻を含むレコードである。
【０１０１】
したがって、クライアント計算機１０ｂは、クライアント計算機１０ａが接続されるまではグループ化されていない（つまり、クライアント接続状態テーブル１５ｂのレコード数が０であった）ため、クライアントタイマー部１１ｂには上記したクライアント計算機１０ｂがグループ化されていない場合のコールバック処理が登録されている。
【０１０２】
ここで、クライアント計算機１０ａが接続されることにより、クライアント接続状態テーブル１５ｂのレコード数が１になるため、クライアント計算機１０ｂはグループ化されることになる。したがって、クライアントタイマー部１１ｂにクライアント計算機１０ｂがグループ化された場合のコールバック処理を登録するため、上記したように当該クライアントタイマー部１１ｂに登録されている（グループ化されていない場合の）コールバック処理を全てキャンセルする。
【０１０３】
なお、クライアント接続状態テーブル１５ｂに保持されているレコードの数が１でない（つまり、２以上である）場合には、クライアントタイマー部１１ｂには既にグループ化されている場合のコールバック処理が登録されているため、以下に示すステップＳ８〜ステップＳ１０の処理は実行されない。
【０１０４】
クライアント受信パケット処理部１４ｂは、コールバック処理が全てキャンセルされると、グループ化パケットをサーバ計算機２０のサーバ受信パケット処理部２４に送信する（ステップＳ８）。
【０１０５】
ここで、図９は、グループ化パケットのデータ構造の一例を示す。図９に示すように、グループ化パケットには、グループフラグが格納される。このグループフラグには、グループ化されたことを示す「ＴＲＵＥ」及びグループ化されていないことを示す「ＦＡＬＳＥ」が含まれる。
【０１０６】
上記したステップＳ８においては、クライアント計算機１０ｂがグループ化されたことを示す「ＴＲＵＥ」が格納されたグループ化パケットが送信される。
【０１０７】
再び図６に戻ると、サーバ計算機２０のサーバ受信パケット処理部２４は、クライアント受信パケット処理部１４ｂによって送信されたグループ化パケットを受信する。サーバ受信パケット処理部２４は、受信されたグループ化パケットに格納されているグループフラグを確認する。ここでは、受信されたグループ化パケットに格納されているグループフラグは「ＴＲＵＥ」である。この場合、サーバ受信パケット処理部２４は、受信されたグループ化パケットに対する応答としてグループ化応答パケットをクライアント計算機１０ｂのクライアント受信パケット処理部１４ｂに送信する（ステップＳ９）。
【０１０８】
ここで、図１０は、グループ化応答パケットのデータ構造の一例を示す。図１０に示すように、グループ化応答パケットには、サーバ送信間隔、クライアント送信間隔及びクライアントタイムアウト時間が格納される。
【０１０９】
上記したステップＳ９においては、クライアント送信間隔としてＴ１、クライアントタイムアウト時間としてＴ２、サーバ送信間隔としてＴ３が格納（設定）されたグループ化応答パケットが送信される。つまり、グループ化されている場合のコールバック処理を登録するための値（時間間隔）が格納されたグループ化応答パケットが送信される。
【０１１０】
再び図６に戻ると、クライアント計算機１０ｂのクライアント受信パケット処理部１４ｂは、サーバ受信パケット処理部２４によって送信されたグループ化応答パケットを受信する。クライアント受信パケット処理部１４ｂは、受信されたグループ化応答パケットに格納されているクライアント送信間隔（Ｔ１）、クライアントタイムアウト時間（Ｔ２）及びサーバ送信間隔（Ｔ３）をクライアント内部記憶部１３ｂに保存する。
【０１１１】
クライアント受信パケット処理部１４ｂは、受信されたグループ化応答パケットに格納されているクライアント送信間隔（Ｔ１）、クライアントタイムアウト時間（Ｔ２）及びサーバ送信間隔（Ｔ３）に基づいて、各種コールバック処理をクライアントタイマー部１１ｂに登録する（ステップＳ１０）。
【０１１２】
具体的には、クライアント受信パケット処理部１４ｂは、処理される時間間隔をクライアント送信間隔（Ｔ１）として、上記した生存通知パケットクライアント送信コールバック処理をクライアントタイマー部１１ｂに登録する。これにより、生存通知パケットクライアント送信コールバック処理は、時間間隔Ｔ１で実行される。
【０１１３】
クライアント受信パケット処理部１４ｂは、処理される時間間隔をクライアントタイムアウト時間（Ｔ２）として、上記したクライアント生存確認コールバック処理をクライアントタイマー部１１ｂに登録する。これにより、クライアント生存確認コールバック処理は、時間間隔Ｔ２で実行される。
【０１１４】
また、クライアント受信パケット処理部１４ｂは、処理される時間間隔をサーバ送信間隔（Ｔ３）として、上記した生存通知パケットサーバ送信コールバック処理をクライアントタイマー部１１ｂに登録する。これにより、生存通知パケットサーバ送信コールバック処理は、時間間隔Ｔ３で実行される。
【０１１５】
一方、クライアント計算機１０ａのクライアント接続部１２ａは、上記した一定時間（Ｔｃ）待機した後、クライアント接続状態テーブル１５ａを参照して接続要求パケットをサーバ計算機２０のサーバ接続待機部２２に送信する（ステップＳ１１）。
【０１１６】
ここで、図１１は、接続要求パケットのデータ構造の一例を示す。図１１に示すように、接続要求パケットには、クライアントアドレス、開始時刻及びグループフラグが格納されている。
【０１１７】
ここで、クライアント接続状態テーブル１５ａには、上記したステップＳ７においてクライアント計算機１０ｂのクライアントアドレス及び開始時刻を含むレコードが保存されている。したがって、クライアント接続状態テーブル１５ａに保持されているレコードの数は１以上であるため、クライアント計算機１０ａはグループ化されている。これにより、上記したステップＳ１１においては、クライアント計算機１０ａのクライアントアドレス、クライアント内部記憶部１３ａに保存されている開始時刻及びクライアント計算機１０ａがグループ化されていることを示す「ＴＲＵＥ」が格納された接続要求パケットが送信される。
【０１１８】
再び図６に戻ると、サーバ計算機２０のサーバ接続待機部２２は、クライアント接続部１２ａによって送信された接続要求パケットを受信する。サーバ接続待機部２２は、受信された接続要求パケットに格納されているグループフラグを確認する。
【０１１９】
サーバ接続待機部２２は、接続要求パケットに対する応答として接続応答パケットをクライアント計算機１０ａのクライアント接続部１２ａに送信する（ステップＳ１２）。この接続応答パケットには、上記した図１０に示すグループ化応答パケットと同様に、クライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔が格納される。
【０１２０】
ここでは、グループフラグは「ＴＲＵＥ」である。この場合、接続応答パケットには、クライアント送信間隔としてＴ１、クライアントタイムアウト時間としてＴ２及びサーバ送信間隔としてＴ３が格納される。つまり、グループ化されている場合のコールバック処理を登録するための値（時間間隔）が格納された接続応答パケットが送信される。
【０１２１】
サーバ接続待機部２２は、接続応答パケットの送信とともに、処理される時間間隔を予め定められた時間間隔Ｔ４として、サーバ生存確認コールバック処理をサーバタイマー部２１に登録する（ステップＳ１３）。
【０１２２】
クライアント計算機１０ａのクライアント接続部１２ａは、サーバ接続待機部２２によって送信された接続応答パケットを受信する。クライアント接続部１２ａは、受信された接続応答パケットに含まれるクライアント送信間隔、クライアントタイムアウト時間及びサーバ送信間隔をクライアント内部記憶部１３ａに保存する。
【０１２３】
クライアント接続部１２ａは、受信された接続応答パケットに格納されているクライアント送信間隔（Ｔ１）、クライアントタイムアウト時間（Ｔ２）及びサーバ送信間隔（Ｔ３）に基づいて、各種コールバック処理をクライアントタイマー部１１ａに登録する（ステップＳ１４）。
【０１２４】
具体的には、クライアント接続部１２ａは、処理される時間間隔をクライアント送信間隔（Ｔ１）として、上記した生存通知パケットクライアント送信コールバック処理をクライアントタイマー部１１ａに登録する。
【０１２５】
クライアント接続部１２ａは、処理される時間間隔をクライアントタイムアウト時間（Ｔ２）として、上記したクライアント生存確認コールバック処理をクライアントタイマー部１１ａに登録する。
【０１２６】
また、クライアント接続部１２ａは、処理される時間間隔をサーバ送信間隔（Ｔ３）として、上記した生存通知パケットサーバ送信コールバック処理をクライアントタイマー部１１ａに登録する。
【０１２７】
なお、上記したステップＳ１１において送信された接続要求パケットに格納されているググループフラグが例えば「ＦＡＬＳＥ」であれば、クライアント計算機１０ａはグループ化されていない。この場合、サーバ接続待機部２２は、クライアント送信間隔として０、クライアントタイムアウト時間として０、サーバ送信間隔としてＴ１が格納された接続応答パケットをクライアント計算機１０ａに送信する。つまり、グループ化されていない場合のコールバック処理を登録するための値（時間間隔）が格納された接続応答パケットが送信される。
【０１２８】
このとき、サーバ接続待機部２２は、処理される時間間隔を予め定められた時間間隔Ｔ２として、サーバ生存確認コールバック処理をサーバタイマー部２１に登録する。
【０１２９】
クライアント計算機１０ａのクライアント接続部１２ａは、処理される時間間隔をサーバ接続待機部２２によって送信された接続応答パケットに含まれるサーバ送信間隔（Ｔ１）として、上記した生存通知パケットサーバ送信コールバック処理をクライアントタイマー部１１ａに登録する。
【０１３０】
なお、接続応答パケットに含まれるクライアント送信間隔及びクライアントタイムアウト時間は０であるので、これらについてはクライアントタイマー部１１ａに登録されない。つまり、クライアント計算機１０ａがグループ化されていない場合には、当該クライアント計算機１０ａにおいては上記した生存通知パケットクライアント送信コールバック処理及びクライアント生存確認コールバック処理は実行されない。換言すれば、クライアント計算機１０ａはグループ化されていない場合、当該クライアント計算機１０ａは、他のクライアント計算機には自身の生存を通知せず、サーバ計算機２０に対してのみ通知することになる。
【０１３１】
次に、クライアント計算機１０ａが上記した図６に示す処理によってグループ化された状態（定常状態）における各種コールバック処理について説明する。
【０１３２】
図１２のシーケンスチャートを参照して、クライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる第１のコールバック処理部１６１ａによる生存通知パケットクライアント送信コールバック処理の処理手順について説明する。
【０１３３】
この生存通知パケットクライアント送信コールバック処理は、例えばクライアント計算機１０ａがグループ化されている場合には、処理される時間間隔をＴ１としてクライアントタイマー部１１ａに登録される。これにより、生存通知パケットクライアント送信コールバック処理は、時間間隔Ｔ１で実行される。
【０１３４】
なお、上記したようにクライアント計算機１０ａがグループ化されていない場合には、この生存通知パケットクライアント送信コールバック処理はクライアントタイマー部１１ａには登録されていないため実行されない。
【０１３５】
まず、クライアントタイマー部１１ａは、例えばクライアント内部記憶部１３ａに保存されている開始時刻（または前回の第１のコールバック処理部１６１ａによる生存通知パケットクライアント送信コールバック処理）から時間間隔Ｔ１が経過した場合に、第１のコールバック処理部１６１ａに対して通知を行う（ステップＳ２１）。つまり、クライアントタイマー部１１ａは、登録されている時間間隔Ｔ１毎（時間間隔Ｔ１おき）に通知を行う。
【０１３６】
第１のコールバック処理部１６１ａは、クライアントタイマー部１１ａからの通知を受けると、クライアント計算機１０ａのクライアントアドレス及びクライアント内部記憶部１３ａに保存されている開始時刻を取得する（ステップＳ２２）。
【０１３７】
第１のコールバック処理部１６１ａは、取得されたクライアントアドレス及び開始時刻をクライアント生存通知マルチキャストパケットに格納する。第１のコールバック処理部１６１ａは、クライアントアドレス及び開始時刻が格納されたクライアント生存通知マルチキャストパケットを、クライアント内部記憶部１３ａに保存されているマルチキャストアドレスに対して送信する（ステップＳ２３）。
【０１３８】
クライアント計算機１０ｂのクライアント受信パケット処理部１４ｂは、第１のコールバック処理部１６１ａによって送信されたクライアント生存通知マルチキャストパケットを受信する。クライアント受信パケット処理部１４ｂは、受信されたクライアント生存通知マルチキャストパケットに格納されているクライアントアドレス及び開始時刻を含むレコードを、クライアント接続状態テーブル１５ｂから取り出す。
【０１３９】
クライアント受信パケット処理部１４ｂは、取り出されたレコードに含まれる最終確認時刻（フィールドの値）を現在時刻に置き換える。これにより、クライアント受信パケット処理部１４ｂは、クライアント接続状態テーブル１５ｂを更新する（ステップＳ２４）。
【０１４０】
上記したように、例えばクライアントタイマー部１１ａに登録された時間間隔Ｔ１毎に例えばクライアント計算機１０ａから他のクライアント計算機（例えば、クライアント計算機１０ｂ）に対してクライアント生存通知マルチキャストパケットを送信することで、当該他のクライアント計算機に対してクライアント計算機１０ａの生存を通知する。
【０１４１】
ここでは、クライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる第１のコールバック処理部１６１ａによる生存通知パケットクライアント送信コールバック処理について説明したが、例えばクライアント計算機１０ｂのクライアントコールバック処理部１６ｂに含まれる第１のコールバック処理部１６１ｂによる生存通知パケットクライアント送信コールバック処理についても同様である。
【０１４２】
次に、図１３のシーケンスチャートを参照して、クライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる第２のコールバック処理部１６２ａによるクライアント生存確認コールバック処理の処理手順について説明する。
【０１４３】
このクライアント生存確認コールバック処理は、例えばクライアント計算機１０ａがグループ化されている場合には、処理される時間間隔をＴ２としてクライアントタイマー部１１ａに登録される。これにより、クライアント生存確認コールバック処理は、時間間隔Ｔ２で実行される。また、この時間間隔Ｔ２は、クライアントタイムアウト時間としてクライアント内部記憶部１３ａに保存されている。
【０１４４】
なお、上記したようにクライアント計算機１０ａがグループ化されていない場合には、このクライアント生存確認コールバック処理はクライアントタイマー部１１ａには登録されていないため実行されない。
【０１４５】
クライアントタイマー部１１ａは、例えばクライアント内部記憶部１３ａに保存されている開始時刻（または前回の第２のコールバック処理部１６２ａによるクライアント生存確認コールバック処理）から時間間隔Ｔ２が経過した場合に、第２のコールバック処理部１６２ａに対して通知を行う（ステップＳ３１）。つまり、クライアントタイマー部１１ａは、登録されている時間間隔Ｔ２毎に通知を行う。
【０１４６】
第２のコールバック処理部１６２ａは、クライアントタイマー部１１ａからの通知を受けると、当該クライアントタイマー部１１ａから現在時刻を取得する。第２のコールバック処理部１６２ａは、取得された現在時刻とクライアント接続状態テーブル１５ａに保持されているレコードに含まれる最終確認時刻フィールドの値（時刻）との差を算出する。第２のコールバック処理部１６２ａは、算出された差がクライアント内部記憶部１３ａに保存されているクライアントタイムアウト時間、つまり時間間隔Ｔ２より大きい全てのレコードを、クライアント接続状態テーブル１５ａから取得する（ステップＳ３２）。
【０１４７】
次に、第２のコールバック処理部１６２ａは、ダウン通知パケットをサーバ計算機２０のサーバ受信パケット処理部２４に送信する（ステップＳ３３）。
【０１４８】
ここで、図１４は、ダウン通知パケットのデータ構造の一例を示す。図１４に示すようにダウン通知パケットには、例えば複数のクライアントアドレス及び開始時刻の組が格納される。図１４に示す例では、クライアントアドレス１及び開始時刻１の組からクライアントアドレスＮ及び開始時刻Ｎの組までのＮ（Ｎは２以上の整数）組のクライアントアドレス及び開始時刻の組が格納されている。
【０１４９】
ここでは、ダウン通知パケットには、ステップＳ２２において取得された全てのレコードの各々に含まれるクライアントアドレス及び開始時刻の組が格納される。なお、図１４においては、ダウン通知パケットには、複数のクライアントアドレス及び開始時刻の組が格納されるものとして説明したが、例えばステップＳ２２において取得されたレコードが１つである場合には、ダウン通知パケットには、１組のクライアントアドレス及び開始時刻が格納される。
【０１５０】
第２のコールバック処理部１６２ａは、ダウン通知パケットを送信すると、当該ダウン通知パケットに含まれるクライアントアドレス及び開始時刻（の組）を含むレコード（つまり、ステップＳ２２において取得されたレコード）を、クライアント接続状態テーブル１５ａから削除する（ステップＳ３４）。
【０１５１】
サーバ計算機２０のサーバ受信パケット処理部２４は、第２のコールバック処理部１６２ａによって送信されたダウン通知パケットを受信する。サーバ受信パケット処理部２４は、受信されたダウン通知パケットに格納されているクライアントアドレス及び開始時刻の組を含むレコードを、サーバ接続状態テーブル２３から削除する（ステップＳ３５）。
【０１５２】
一方、第２のコールバック処理部１６２ａは、ステップＳ２４の処理が実行された後のクライアント接続状態テーブル１５ａを参照する。このとき、クライアント接続状態テーブル１５ａに保持されているレコードの数が０であれば、第２のコールバック処理部１６２ａは、グループ化されていないことを示すグループフラグ「ＦＡＬＳＥ」が格納されたグループ化パケットをサーバ計算機２０のサーバ受信パケット処理部２４に送信する（ステップＳ３６）。なお、クライアント接続状態テーブル１５ａに保持されているレコードの数が０でなければ、処理は終了される。
【０１５３】
サーバ計算機２０のサーバ受信パケット処理部２４は、第２のコールバック処理部１６２ａによって送信されたグループ化パケットを受信する。サーバ受信パケット処理部２４は、受信されたグループ化パケットに格納されているグループフラグが「ＦＡＬＳＥ」である場合、グループ化応答パケットをクライアント計算機１０ａのクライアント受信パケット処理部１４ａに送信する（ステップＳ３７）。ここでは、クライアント計算機１０ａがグループ化されていないので、クライアント送信間隔として０、クライアントタイムアウト時間として０、サーバ送信間隔としてＴ１が格納されたグループ化応答パケットが送信される。
【０１５４】
クライアント計算機１０ａのクライアント受信パケット処理部１４ａは、サーバ受信パケット処理部２４によって送信されたグループ化応答パケットを受信する。クライアント受信パケット処理部１４ａは、受信されたグループ化応答パケットに格納されているクライアント送信間隔（０）、クライアントタイムアウト時間（０）、サーバ送信間隔（Ｔ１）をクライアント内部記憶部１３ａに保存する。
【０１５５】
また、クライアント受信パケット処理部１４ａは、受信されたグループ化応答パケットに格納されているクライアント送信間隔（０）、クライアントタイムアウト時間（０）、サーバ送信間隔（Ｔ１）に基づいて、各種コールバック処理をクライアントタイマー部１１ａに登録する。
【０１５６】
この場合、処理される時間間隔をサーバ送信間隔（Ｔ１）として、生存通知パケットサーバ送信コールバック処理がクライアントタイマー部１１ａに登録される。なお、クライアント送信間隔及びクライアントタイムアウト時間は共に０であるため、これらについては登録されない。
【０１５７】
上記したようにクライアント接続状態テーブル１５ａからレコードが削除されることにより、例えばクライアント計算機１０ａがグループ化されていないこととなった場合には、その旨がサーバ計算機２０に通知されることにより、クライアントタイマー部１１ａにはグループ化されていない場合のコールバック処理が登録される。
【０１５８】
ここでは、クライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる第２のコールバック処理部１６２ａによるクライアント生存確認コールバック処理について説明したが、例えばクライアント計算機１０ｂのクライアントコールバック処理部１６ｂに含まれる第２のコールバック処理部１６２ｂによるクライアント生存確認コールバック処理についても同様である。
【０１５９】
次に、図１５のシーケンスチャートを参照して、クライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる第３のコールバック処理部１６３ａによる生存通知パケットサーバ送信コールバック処理の処理手順について説明する。
【０１６０】
この生存通知パケットサーバ送信コールバック処理は、例えばクライアント計算機１０ａがグループ化されている場合には、処理される時間間隔をＴ３としてクライアントタイマー部１１ａに登録される。この場合、生存通知パケットサーバ送信コールバック処理は、時間間隔Ｔ３で実行される。
【０１６１】
一方、例えばクライアント計算機１０ａがグループ化されていない場合には、生存通知パケットサーバ送信コールバック処理は、処理される時間間隔をＴ１としてクライアントタイマー部１１ａに登録される。この場合、生存通知パケットサーバ送信コールバック処理は、時間間隔Ｔ１で実行される。
【０１６２】
ここでは、生存通知パケットサーバ送信コールバック処理は、処理される時間間隔をＴ３としてクライアントタイマー部１１ａに登録されているものとして説明する。
【０１６３】
この場合、時間間隔Ｔ３は、サーバ送信間隔としてクライアント内部記憶部１３ａに保存されている。
【０１６４】
まず、クライアントタイマー部１１ａは、例えばクライアント内部記憶部１３ａに保存されている開始時刻（または前回の第３のコールバック処理部１６３ａによる生存通知パケットサーバ送信コールバック処理から時間間隔Ｔ３が経過した場合に、第３のコールバック処理部１６３ａに対して通知を行う（ステップＳ４１）。つまり、クライアントタイマー部１１ａは、登録されている時間間隔Ｔ３毎に通知を行う。
【０１６５】
第３のコールバック処理部１６３ａは、クライアントタイマー部１１ａからの通知を受けると、生存通知パケットサーバ送信コールバック処理を実行する。第３のコールバック処理部１６３ａは、クライアント内部記憶部１３ａに保存されている生存確認スキップフラグを確認する。
【０１６６】
第３のコールバック処理部１６３ａは、生存確認スキップフラグが「ＴＲＵＥ」であれば、当該生存確認スキップフラグを「ＦＡＬＳＥ」として生存通知パケットサーバ送信コールバック処理を終了する。つまり、生存確認スキップフラグが「ＴＲＵＥ」である場合には、上記した時間間隔Ｔ３毎に実行される生存通知パケットサーバ送信コールバック処理が１回スキップされる。
【０１６７】
一方、生存確認スキップフラグが「ＦＡＬＳＥ」であれば、第３のコールバック処理部１６３ａは、クライアントタイマー部１１ａから現在時刻を取得する。第３のコールバック処理部１６３ａは、取得された現在時刻とクライアント接続状態テーブル１５ａに保持されている最終確認時刻フィールドの値（時刻）との差を算出する。第３のコールバック処理部１６３ａは、算出された差がクライアント内部記憶部１３ａに保存されているサーバ送信間隔、つまり時間間隔Ｔ３より小さい全てのレコードを、クライアント接続状態テーブル１５ａから取得する（ステップＳ４２）。
【０１６８】
次に、第３のコールバック処理部１６３ａは、生存通知パケットをサーバ計算機２０のサーバ受信パケット処理部２４に送信する（ステップＳ４３）。
【０１６９】
ここで、生存通知パケットには、上記した図１４に示すダウン通知パケットと同様に、複数のクライアントアドレス及び開始時刻の組が格納される。ここでは、生存通知パケットには、クライアント計算機１０ａのクライアントアドレス及びクライアント内部記憶部１３ａに保存されている開始時刻の組と、ステップＳ４２において取得された全てのレコードの各々に含まれるクライアントアドレス及び開始時刻の組が格納される。
【０１７０】
サーバ計算機２０のサーバ受信パケット処理部２４は、第３のコールバック処理部１６３ａによって送信された生存通知パケットを受信する。サーバ受信パケット処理部２４は、サーバ接続状態テーブル２３において、受信された生存通知パケットに格納されているクライアントアドレス及び開始時刻の組を含む全てのレコードの最終確認時刻（フィールドの値）を現在時刻に置き換える。これにより、サーバ受信パケット処理部２４は、サーバ接続状態テーブル２３を更新する（ステップＳ４４）。なお、現在時刻は、サーバタイマー部２１から取得される。
【０１７１】
また、第３のコールバック処理部１６３ａは、生存通知済みクライアントマルチキャストパケットを、クライアント内部記憶部１３ａに保存されているマルチキャストアドレスに対して送信する（ステップＳ４５）。この生存通知済みクライアントマルチキャストパケットには、上記した図１４に示すダウン通知パケットと同様に、複数のクライアントアドレス及び開始時刻の組が格納される。生存通知済みクライアントマルチキャストパケットには、ステップＳ４２において取得されたレコードの全てのレコードの各々に含まれるクライアントアドレス及び開始時刻の組が格納される。
【０１７２】
クライアント計算機１０ｂのクライアント受信パケット処理部１４ｂは、第３のコールバック処理部１６３ａによって送信された生存通知済みクライアントマルチキャストパケットを受信する。クライアント受信パケット処理部１４ｂは、受信された生存通知済みクライアントマルチキャストパケットにクライアント計算機１０ｂのクライアントアドレス及びクライアント内部記憶部１３ｂに保存されている開始時刻の組が格納されているか否かを確認する。
【０１７３】
クライアント受信パケット処理部１４ｂは、クライアント計算機１０ｂのクライアントアドレス及びクライアント内部記憶部１３ｂに保存されている開始時刻の組が格納されている場合、クライアント内部記憶部１３ｂに保存されている生存確認送信スキップフラグを「ＴＲＵＥ」に書き換える（ステップＳ４６）。一方、クライアント計算機１０ｂのクライアントアドレス及びクライアント内部記憶部１３ｂに保存されている開始時刻の組が格納されていない場合、処理は終了される。
【０１７４】
上記したように、第３のコールバック処理部１６３ａによる生存通知パケットサーバ送信コールバック処理においては、クライアント計算機１０ａ及び当該クライアント計算機１０ａとグループ化されている他のクライアント計算機（例えば、クライアント計算機１０ｂ）の生存がサーバ計算機２０に対して通知される。
【０１７５】
また、第３のコールバック処理部１６３ａが例えばクライアント計算機１０ｂの生存を通知した旨を当該クライアント計算機１０ｂに通知することによって、クライアント計算機１０ｂは、生存確認送信スキップフラグを「ＴＲＵＥ」に書き換える。これにより、クライアント計算機１０ｂにおいては、サーバ計算機２０に生存を通知する処理（生存通知パケットサーバ送信コールバック処理）がスキップされるので、サーバ計算機２０に対する通信量を低減することができる。
【０１７６】
ここでは、クライアント計算機１０ａのクライアントコールバック処理部１６ａに含まれる第３のコールバック処理部１６３ａによる生存通知パケットサーバ送信コールバック処理について説明したが、例えばクライアント計算機１０ｂのクライアントコールバック処理部１６ｂに含まれる第３のコールバック処理部１６３ｂによる生存通知パケットサーバ送信コールバック処理についても同様である。
【０１７７】
次に、図１６のシーケンスチャートを参照して、サーバ計算機２０のサーバコールバック処理部２５によるサーバ生存確認コールバック処理の処理手順について説明する。
【０１７８】
このサーバ生存確認コールバック処理は、例えばサーバ計算機２０に接続されているクライアント計算機１０ａがグループ化されている場合には、処理される時間間隔をＴ４としてクライアントタイマー部２１に登録される。この場合、サーバ生存確認コールバック処理は、時間間隔Ｔ４で実行される。
【０１７９】
一方、例えばサーバ計算機２０に接続されているクライアント計算機１０ａがグループ化されていない場合には、サーバ生存確認コールバック処理は、処理される時間間隔をＴ２としてサーバタイマー部２１に登録される。この場合、サーバ生存確認コールバック処理は、時間間隔Ｔ２で実行される。
【０１８０】
サーバタイマー部２１は、登録されている時間間隔Ｔ４毎に、サーバコールバック処理部２５に対して通知を行う（ステップＳ５１）。
【０１８１】
サーバコールバック処理部２５は、サーバタイマー部２１からの通知を受けると、サーバ生存確認コールバック処理を実行する。サーバコールバック処理部２５は、当該サーバタイマー部２１から現在時刻を取得する。サーバタイマー部２１は、取得された現在時刻とサーバ接続状態テーブル２３に保持されている最終確認時刻フィールドの値との差を算出する。サーバコールバック処理部２５は、サーバ接続状態テーブル２３において、算出された差が時間間隔Ｔ４より大きい全てのレコードを特定する（ステップＳ５２）。
【０１８２】
この場合、サーバコールバック処理部２５は、特定されたレコードに含まれるクライアントアドレスが割り当てられているクライアント計算機をダウンしたとみなして、当該レコードをサーバ接続状態テーブル２３から削除する（ステップＳ５３）。
【０１８３】
次に、図１７及び図１８を参照して、本実施形態に係るクライアントサーバシステムにおけるパケットの流れについて説明する。
【０１８４】
図１７に示すように、クライアントサーバシステムは、クライアント計算機１０ａ、１０ｂ、１０ｃ及びサーバ計算機２０を備えるものとする。また、クライアント計算機１０ａ、１０ｂ、１０ｃ及びサーバ計算機２０は互いにネットワークにより接続されている。また、クライアント計算機１０ａ、１０ｂ及び１０ｃは、グループを構成する（グループ化されている）ものとする。
【０１８５】
この場合、クライアント計算機１０ａは、時間間隔Ｔ１毎にクライアント生存通知マルチキャストパケットをマルチキャストアドレスに対して送信する。つまり、クライアント計算機１０ａは、時間間隔Ｔ１でクライアント計算機１０ｂ及び１０ｃに対して自身の生存を通知する。
【０１８６】
また、クライアント計算機１０ａは、時間間隔Ｔ３で生存通知パケットをサーバ計算機２０に対して送信する。つまり、クライアント計算機１０ａは、時間間隔Ｔ３でサーバ計算機２０に対して自身の生存を通知する。
【０１８７】
なお、クライアント計算機１０ｂ及び１０ｃについても同様に、時間間隔Ｔ１でクライアント生存通知マルチキャストパケットを他のクライアント計算機に対して送信し、時間間隔Ｔ３で生存通知パケットをサーバ計算機２０に送信する。
【０１８８】
ここで、上記したように時間間隔Ｔ３は時間間隔Ｔ１と比較して十分に長い間隔とする。これにより、クライアント計算機１０ａ、１０ｂ及び１０ｃ間で送受信されるクライアント生存通知マルチキャストパケットと比較して、サーバ計算機２０において受信される生存通知パケットの数を削減することができる。したがって、サーバ計算機２０及び当該サーバ計算機２０近傍のネットワーク負荷を抑制することができる。
【０１８９】
これに伴い、例えばクライアント計算機１０ａ、１０ｂ及び１０ｃ間での通信量は増加する。したがって、グループを構成する際には、ネットワーク的に近傍のクライアント計算機同士をグループ化することが好ましい。これにより、コストを低減させることができる。
【０１９０】
また、クライアント計算機１０ａ、１０ｂ及び１０ｃでは、例えば時間間隔Ｔ２の間に他のクライアント計算機からクライアント生存通知マルチキャストパケットが送信されない場合には、当該他のクライアント計算機をダウンしたものとみなす。
【０１９１】
図１９に示すように、例えばクライアント計算機１０ｂがクライアント計算機１０ａをダウンしたものとみなした場合には、クライアント計算機１０ｂはサーバ計算機２０に対してその旨をダウン通知パケットにより通知する。これにより、クライアント計算機１０ａ、１０ｂ及び１０ｃの各々からサーバ計算機２０に対して送信される生存通知パケットの時間間隔（つまり、時間間隔Ｔ３）が長い場合であっても、例えばクライアント計算機１０ａがダウンした際にはその旨をクライアント計算機１０ｂが通知するため、サーバ計算機２０は素早くクライアント計算機１０ａがダウンしたことを検知することができる。
【０１９２】
上記したように本実施形態においては、グループを構成する複数のクライアント計算機１０が定期的に（時間間隔Ｔ１で）互いの生存を通知するためにクライアント生存通知マルチキャストパケットを送信することにより、例えばクライアント計算機１０ａからのクライアント生存通知マルチキャストパケットが予め定められた時間内に受信されない場合には、当該クライアント計算機１０ａをダウンしたとみなしてその旨がサーバ計算機２０に通知される。
【０１９３】
したがって、本実施形態においては、複数のクライアント計算機１０からサーバ計算機２０への生存を通知するための生存通知パケットによる負荷を複数のクライアント計算機１０に分散し、当該サーバ計算機２０への生存通知パケットを削減することにより、当該サーバ計算機２０の負荷及び当該サーバ計算機２０付近のネットワーク負荷を低減させ、かつ、複数のクライアント計算機１０の各々がダウンしたことを迅速に検知することが可能となる。
【０１９４】
また、本実施形態においては、時間間隔Ｔ３で複数のクライアント計算機１０からサーバ計算機２０に対して生存通知パケットが送信される。これによって、例えばグループを構成する複数のクライアント計算機１０の全てがダウンした場合であっても、サーバ計算機２０は、当該複数のクライアント計算機１０がダウンしたことを検知できる。この時間間隔Ｔ３は時間間隔Ｔ１より長く設定されているため、この場合であってもサーバ計算機２０の負荷及び当該サーバ計算機２０付近のネットワーク負荷を低減させることができる。
【０１９５】
なお、本実施形態においては、上記した時間間隔Ｔ１及びＴ３の差が大きいほど複数のクライアント計算機１０及びサーバ計算機２０間の生存確認のパケットが削減されるため、当該サーバ計算機２０の負荷及び当該サーバ計算機２０付近のネットワーク負荷の低減の効果が大きい。しかしながら、時間間隔Ｔ３及びＴ４の関係（Ｔ３＜Ｔ４）から、時間間隔Ｔ３を大きくすることにより時間間隔Ｔ４が大きくなりすぎると、上記したようにグループを構成する複数のクライアント計算機１０の全てがダウンしたときのダウン検知までの時間が長くなる。このため、上記事情を考慮した適当な時間間隔を定めるとよい。
【０１９６】
また、本実施形態においては、２台以上のクライアント計算機（例えば、クライアント計算機１０ａ及び１０ｂ）でグループが構成されるものとして説明したが、例えば３台以上のクライアント計算機でグループが構成されるものとしても構わない。この場合には、３台以上のクライアント計算機でグループが構成されるまでは、上記したグループ化されていない場合のコールバック処理（つまり、クライアント計算機及びサーバ計算機２０間での生存確認）が実行される。
【０１９７】
また、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【図面の簡単な説明】
【０１９８】
【図１】本発明の実施形態に係るクライアントサーバシステムのハードウェア構成を示すブロック図。
【図２】図１に示す複数のクライアント計算機１０に含まれるクライアント計算機１０ａ及び１０ｂの主として機能構成を示すブロック図。
【図３】サーバ計算機２０の主として機能構成を示すブロック図。
【図４】図２に示すクライアント内部記憶部１３ａのデータ構造の一例を示す図。
【図５】図２に示すクライアント接続状態テーブル１５ａに保持されるレコードのデータ構造の一例を示す図。
【図６】クライアント計算機１０ａがグループに参加し、サーバ計算機２０に接続するまでの処理手順を示すシーケンスチャート。
【図７】マルチキャストアドレス応答パケットのデータ構造の一例を示す図。
【図８】グループ参加要求マルチキャストパケットのデータ構造の一例を示す図。
【図９】グループ化パケットのデータ構造の一例を示す図。
【図１０】グループ化応答パケットのデータ構造の一例を示す図。
【図１１】接続要求パケットのデータ構造の一例を示す図。
【図１２】第１のコールバック処理部１６１ａによる生存通知パケットクライアント送信コールバック処理の処理手順を示すシーケンスチャート。
【図１３】第２のコールバック処理部１６２ａによるクライアント生存確認コールバック処理の処理手順を示すシーケンスチャート。
【図１４】ダウン通知パケットのデータ構造の一例を示す図。
【図１５】第３のコールバック処理部１６３ａによる生存通知サーバ送信コールバック処理の処理手順を示すシーケンスチャート。
【図１６】サーバ計算機２０のサーバコールバック処理部２５によるサーバ生存確認コールバック処理の処理手順を示すシーケンスチャート。
【図１７】クライアント計算機１０ａが他のクライアント計算機１０ｂ及び１０ｃ及びサーバ計算機２０に自身の生存を通知する際のパケットの流れについて説明するための図。
【図１８】クライアント計算機１０ｂがクライアント計算機１０ａをダウンしたとみなした場合のパケットの流れについて説明するための図。
【符号の説明】
【０１９９】
１０ａ，１０ｂ…クライアント計算機、１１ａ，１１ｂ…クライアントタイマー部、１２ａ，１２ｂ…クライアント接続部、１３ａ，１３ｂ…クライアント内部記憶部、１４ａ，１４ｂ…クライアント受信パケット処理部、１５ａ，１５ｂ…クライアント接続状態テーブル、１６ａ，１６ｂ…クライアントコールバック処理部、２０…サーバ計算機、２１…サーバタイマー部、２２…サーバ接続待機部、２３…サーバ接続状態テーブル、２４…サーバ受信パケット処理部、２５…サーバコールバック処理部、３０…ネットワーク、１６１ａ、１６１ｂ…第１のコールバック処理部、１６２ａ，１６２ｂ…第２のコールバック処理部、１６３ａ，１６３ｂ…第３のコールバック処理部。
【図１】
2009271857.tif 000003
【図２】
2009271857.tif 000004
【図３】
2009271857.tif 000005
【図４】
2009271857.tif 000006
【図５】
2009271857.tif 000007
【図６】
2009271857.tif 000008
【図７】
2009271857.tif 000009
【図８】
2009271857.tif 000010
【図９】
2009271857.tif 000011
【図１０】
2009271857.tif 000012
【図１１】
2009271857.tif 000013
【図１２】
2009271857.tif 000014
【図１３】
2009271857.tif 000015
【図１４】
2009271857.tif 000016
【図１５】
2009271857.tif 000017
【図１６】
2009271857.tif 000018
【図１７】
2009271857.tif 000019
【図１８】
2009271857.tif 000020