以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
また、以下では、常時接続通信の一例として、Webソケットプロトコルを利用した通信について説明する。Webソケットは、主としてウェブサーバとウェブブラウザとの間の双方向通信を行うための技術規格であり、プロトコルの仕様はRFC(Request For Comment)6455に規定されている。Webソケットにおいては、常時接続であり、接続を維持したまま、複数回の双方向の通信を行うことができる。しかしながら、アプリケーションサーバから任意のタイミングでクライアントにデータをプッシュできればよく、本発明はWebソケットプロトコルを利用する常時接続に限定されるものではない。
<第1の実施の形態>
<ネットワークシステムの全体構成>
まず、本実施の形態にかかるネットワークシステム1の全体構成について説明する。図1は、本実施の形態にかかるネットワークシステム1の全体構成と動作概要とを示す第1のイメージ図である。図2は、本実施の形態にかかるネットワークシステム1の全体構成と動作概要とを示す第2のイメージ図である。図3は、本実施の形態にかかるネットワークシステム1の全体構成と動作概要とを示す第3のイメージ図である。
図1を参照して、ネットワークシステム1は、たとえば、遠隔から家電を操作するシステムを想定しており、住居またはオフィスなどに配置される複数の家電100A,100Dと、ネットワークを介して家電100A,100Dと接続される複数の常時接続サーバ200A,200Bと、家電100A,100Dに関する様々なサービスを提供する複数のアプリケーションサーバ300A,300Bと、アプリケーションサーバ300A,300Bからのデータを適切な常時接続サーバ200A,200Bに送信する常時接続補助サーバ400と、常時接続サーバ200A,200Bにかかる負荷を分散するための負荷分散装置600とを含む。
なお、以下では、常時接続サーバ200A,200Bが2つの場合について説明するが、常時接続サーバは1つであってもよいし、3つ以上であっても良い。アプリケーションサーバも1つであってもよいし、3つ以上であっても良い。家電も1つであってもよいし、3つ以上であってもよい。負荷分散装置と常時接続補助サーバは2つ以上であってもよい。
ここで、家電としては、たとえば、掃除機100A、エアコン100D、テレビ、洗濯機、冷蔵庫、炊飯器、空気清浄器、床暖房、IH(Induction Heating)クッキングヒーター、などが挙げられる。さらに、家電は、住居内またはオフィス内の通信機器であればよく、たとえば、パーソナルコンピュータ、テレビ以外のAV機器、インターホンシステムなどを含んでもよい。また、常時接続サーバ200A,200Bとアプリケーションサーバ300A,300Bと常時接続補助サーバ400と負荷分散装置600とは、家電と同じ住居内、オフィス内、ビル内、会社あるいは学校の構内に存在するサーバ、あるいは、これら物理サーバ内に存在する仮想サーバなどを含んでもよい。
また、家電と各サーバ間は、光ファイバ等の回線を経由し、途中に、光回線終端装置、無線LAN通信を行うためのアクセスポイント、ルータ等が接続されてもよい。家電は、ネットワークに接続する手段として、IEEE802.11a/b/g/n/acなどの無線LAN通信、あるいは、有線LANなどが用いられるが、接続方法はこれらに限定されるものではない。
そして、本実施の形態においては、掃除機100Aおよびエアコン100Dの各々が、常時接続サーバ200A,200Bのいずれかと常時接続される。これによって、掃除機用のアプリケーションサーバ300Aおよびエアコン用のアプリケーションサーバ300Bは、常時接続サーバ200A,200Bを介して任意のタイミングで掃除機100Aおよびエアコン100Dにデータをプッシュ送信することができる。
すなわち、本実施の形態にかかるネットワークシステム1では、多数の家電の各々が、自身に適したサービスを提供する複数のアプリケーションサーバの全てと、直接的に常時接続する必要がない。また、逆に、複数のアプリケーションサーバの各々が、対応する複数の家電の全てと、直接的に常時接続する必要がない。
<ネットワークシステムの動作概要>
次に、本実施の形態にかかるネットワークシステム1の動作概要について説明する。なお、以下では、説明の重複をさけるために、掃除機100A、エアコン100Dなどの家電を総称して、クライアント100ともいう。同様に、ノード1の常時接続サーバ200Aと、ノード2の常時接続サーバ200Bとを総称して、常時接続サーバ200ともいう。同様に、掃除機用のアプリケーションサーバ300Aおよびエアコン用のアプリケーションサーバ300Bなどのような、各種のサービスをクライアント100およびユーザなどに提供するためのアプリケーションサーバを総称して、アプリケーションサーバ300ともいう。
まず、図1を参照して、掃除機100Aは、常時接続サーバ200A,200Bのいずれかと常時接続を開始するために、まず、HTTPプロトコルを利用して、負荷分散装置600を介して、稼働中の常時接続サーバ200のいずれかに、複数の常時接続サーバ200のアドレスが格納されたノードリストを要求する。ノードリストの例については、後述する。
掃除機100Aは、当該ノードリストに基づいて、Webソケットプロトコルを利用して、ノード1としての常時接続サーバ200Aと常時接続を開始する。
なお、本実施の形態においては、負荷分散装置600は、掃除機100Aからノードリストの要求を受け付けたときに、常時接続サーバ200Aにノードリストを要求する。そして、常時接続サーバ200Aからの応答がない場合には、負荷分散装置600は、他の常時接続サーバ200Bにノードリストを要求する。
より詳細には、本実施の形態においては、クライアント100からノードリスト要求を受けた常時接続サーバ200A,200Bは、対応関係DB500からノードリストを取得する。さらに、対応関係DB500は、負荷分散装置600からの要求を受け付けた際に、複数の常時接続サーバ200A,200Bのいずれかに要求を転送する。このとき、常時接続サーバ200Aが要求を受けたとすると、常時接続サーバ200Aは、他方、すなわち常時接続サーバ200Bに接続確認用データ(たとえばICMPのping)を送信し、その応答があった場合、稼働しているとみなして常時接続サーバ200Bを追加するか、あるいは応答が無かった場合は、稼働していないとみなして常時接続サーバ200Bを削除するよう、対応関係DB500にノードリストの更新を要求する。さらに、常時接続サーバ200Aは、更新されたノードリスト全体を対応関係DB500から取得して、クライアント100にノードリストを送信する。
このようにして、掃除機用のアプリケーションサーバ300Aは、常時接続サーバ200Aを介して、掃除機100Aにデータをプッシュすることができる。
同様に、エアコン100Dは、Webソケットプロトコルを利用して、常時接続サーバ200Aまたは200Bと常時接続している。すなわち、エアコン用のアプリケーションサーバ300Bも、常時接続サーバ200Aまたは200Bを介して、エアコン100Dにデータをプッシュすることができる。
本実施の形態においては、常時接続サーバ200A,200Bとアプリケーションサーバ300A,300Bの間に、常時接続補助サーバ400が配備される。常時接続補助サーバ400は、アプリケーションサーバ300A,300Bからクライアント100宛のデータを受信したときに、複数の常時接続サーバ200A,200Bのどちらに当該クライアント100が接続されているかを特定するために利用される。
たとえば、常時接続補助サーバ400は、アプリケーションサーバ300A,300Bのいずれかから掃除機100A宛のデータを受信したときに、常時接続サーバ200A,200Bのどちらに掃除機100Aが接続されているか調べる。そして、常時接続補助サーバ400は、掃除機100Aが接続されている方の常時接続サーバ200Aに当該データを送信する。
換言すれば、本実施の形態においては、アプリケーションサーバ300A,300Bのいずれかから常時接続補助サーバ400がデータを受信したときに、当該データが常時接続サーバ200Aと常時接続中の家電に向けたものであるかを判断する。そして、当該データが常時接続サーバ200Aと常時接続中の家電(たとえば、掃除機100A)に向けたものである場合、常時接続補助サーバ400は常時接続サーバ200Aにデータを送信する。常時接続サーバ200Aは、Webソケットプロトコルを利用して、当該データを掃除機100Aに送信する。
一方、当該データが常時接続サーバ200Aと常時接続中の家電に向けたものでない場合、常時接続補助サーバ400は、当該データの送信先としての家電(たとえば、エアコン100D)が常時接続中の常時接続サーバ200Bを特定する。常時接続補助サーバ400は、当該データを、送信先に指定されたエアコン100Bが常時接続中の常時接続サーバ200Bへと転送する。常時接続サーバ200Bは、Webソケットプロトコルを利用して、当該データをエアコン100Bに送信する。
図2を参照して、掃除機100Aと常時接続中の常時接続サーバ200Aが正常に稼働しなくなる場合がある。すなわち、常時接続サーバ200Aが、メンテナンスのために、一時停止したり、予期しない異常により稼働を停止した場合など、掃除機100Aが常時接続サーバ200Aと常時接続通信を行えなくなる場合がある。
このような場合は、図3を参照して、掃除機100Aは、他の常時接続サーバ200と常時接続を開始するために、まず、HTTPプロトコルを利用して、負荷分散装置600を介して常時接続サーバ200のいずれかに、稼働中の常時接続サーバ200のアドレスが格納されたノードリストを要求する。たとえば、掃除機100Aは、当該ノードリストに基づいて、Webソケットプロトコルを利用して、稼働中のノード2としての常時接続サーバ200Bと常時接続を開始するための処理を実行する。
しかしながら、掃除機100Aだけでなく、常時接続不能となった常時接続サーバ200Aと常時接続していた多数のクライアント100が、一斉に負荷分散装置600や他の常時接続サーバ200Bにアクセスする可能性がある。このような事態を回避するために、本実施の形態にかかるネットワークシステム1においては、常時接続不能となった常時接続サーバ200Aに常時接続していた多数のクライアント100が、同じタイミングで負荷分散装置600や他の常時接続サーバ200にアクセスする可能性を低減するように構成されている。
具体的には、本実施の形態においては、常時接続不能となった常時接続サーバ200Aに常時接続していた多数のクライアント100が、互いに異なるタイミングで負荷分散装置600を介して常時接続サーバ200A,200Bのいずれかにノードリストを要求し、互いに異なるタイミングで常時接続サーバ200との常時接続するための処理を実行する。図4は、クライアントが負荷分散装置600にアクセスするタイミングを示すイメージ図である。
図4を参照して、本実施の形態においては、常時接続サーバ200は、ノードリスト配信時にクライアント100に再接続間隔T(秒)を与える。そして、クライアント100は、1(秒)〜再接続間隔T(秒)までの間で、ランダムに待ち時間を決定する。ただし、後述の第3の実施の形態のように、常時接続サーバ200が、待ち時間を決定してもよい。そして、常時接続サーバ200が、クライアント100に待ち時間を送信しても良い。
クライアント100は、常時接続サーバ200から与えられた再接続間隔に基づいた待ち時間だけ待機した後、負荷分散装置600を介して常時接続サーバ200にノードリストを要求する。そして、正常にノードリストが取得できない場合、クライアント100は、常時接続サーバ200から与えられた再接続間隔だけ待機した後、再度、負荷分散装置600を介して常時接続サーバ200にノードリストを要求する。正常にノードリストが取得できるまで、クライアント100は、再接続間隔待機することとリストの要求とを繰り返す。
クライアント100は、取得したノードリストから常時接続サーバ200Aを選択する。クライアント100は、選択した常時接続サーバ200Aとの常時接続の開始処理を実行する。常時接続サーバ200Aに接続できない場合、クライアント100は、常時接続サーバ200のいずれかから与えられた再接続間隔だけ待機した後、ノードリストに記述されている他の常時接続サーバ200Bとの常時接続の開始処理を実行する。正常に常時接続サーバ200のいずれかへの接続が成功するまで、クライアント100は、再接続間隔待機することと常時接続開始処理とを繰り返す。
このように、本実施の形態にかかるネットワークシステム1では、常時接続サーバ200との常時接続が切断された多数のクライアント100が待ち時間だけ待機してから、再接続処理を開始する。すなわち、多数のクライアント100が一斉に負荷分散装置600や常時接続サーバ200にアクセスしてくることを防止することができる。その結果、クライアント100と常時接続サーバ200との再接続処理がスムーズに進行し、常時接続状態への復旧が速やかに行われる。
以下、このような機能を実現するためのネットワークシステム1の具体的な構成について詳述する。
<クライアント100のハードウェア構成>
まず、クライアント100のハードウェア構成の一態様について説明する。図5は、本実施の形態にかかるクライアント100のハードウェア構成を表わすブロック図である。
図5を参照して、クライアント100は、主たる構成要素として、CPU110と、メモリ120と、ボタン130と、ディスプレイ140と、家電制御回路150と、通信インターフェイス160とを含む。
CPU110は、メモリ120あるいは図示されていない外部の記憶媒体に記憶されているプログラムを実行することによって、クライアント100の各部を制御する。より詳細には、CPU110は、メモリ120のプログラムを実行することによって後述するクライアントAPP111(図14および図15を参照。)およびクライアントAPI112(図10、図11、図14、図15を参照。)として動作する。より詳細には、クライアントAPP111は、クライアント100の各部を制御するものであって、いわゆる端末用のアプリケーションプログラムのことである。クライアントAPI112は、後述する通信インターフェイスを介して、HTTPプロトコルを使用して通信したり、HTTPプロトコル上で利用されるWebソケットプロトコルを使用して通信したりする。
メモリ120は、各種のRAM(Random Access Memory)、各種のROM(Read-Only Memory)や、フラッシュメモリーなどによって実現される。なお、メモリ120は、インターフェイスを介して利用される、USB(Universal Serial Bus)(登録商標)メモリ、CD(Compact Disc)、DVD(Digital Versatile Disk)、メモリカード、ハードディスク、IC(Integrated Circuit)カード、光カード、マスクROM、EPROM(Erasable Programmable Read Only Memory)、EEPROM(Electronically Erasable Programmable Read-Only Memory)などの記憶媒体などによっても実現される。
メモリ120は、CPU110によって実行されるプログラムや、CPU110によるプログラムの実行により生成されたデータ、ボタン130を介して入力されたデータ、掃除機またはエアコンなどのようなクライアントとして動作するAPP(Application software)データ、クライアントAPPとデータをやり取りしながら常時接続サーバ200と通信するためのAPI(Application Programming Interface)データを記憶する。具体的には、メモリ120は、常時接続サーバの接続先、アプリケーションサーバ接続先、サービス識別コード、サービス認証トークン、接続ID、クライアント識別IDなどを記憶する。
ボタン130は、ユーザからの命令を受け付けて、当該命令をCPU110に入力する。
ディスプレイ140は、液晶パネルなどによって実現され、CPU110からの信号に基づいて、文字や画像を出力する。
家電制御回路150は、CPU110からの信号に基づいて、家電としてのクライアントの各部(モータなど)を制御する。
通信インターフェイス160は、IEEE802.11a/b/g/n/acなどの無線LAN通信、ZigBee(登録商標)、BlueTooth(登録商標)、あるいは、イーサネット(登録商標)などの有線LANなどの通信モジュールによって実現される。通信インターフェイス160は、有線通信あるいは無線通信によって他の装置との間でデータをやり取りする。CPU110は、通信インターフェイス160を介して、他の装置からプログラム、制御命令、画像データ、テキストデータなどを受信したり、他の装置にテキストデータ、画像データなどを送信したりする。
<常時接続サーバ200のハードウェア構成>
次に、常時接続サーバ200のハードウェア構成の一態様について説明する。図6は、本実施の形態にかかる常時接続サーバ200のハードウェア構成を表わすブロック図である。なお、常時接続サーバ200は、apache、tomcat、mysqlなど、一般的なサーバモジュールで担保できる機能は標準的に利用可能である。
図6を参照して、常時接続サーバ200は、主たる構成要素として、CPU210と、メモリ220と、キーボード230と、ディスプレイ240と、通信インターフェイス260とを含む。常時接続サーバ200のハードウェア構成は、クライアント100のハードウェア構成と比較して、ボタン130の代わりにキーボード230を有する点、家電の各部を制御するための家電制御回路150を有さない点、CPU210の動作、メモリ220に格納されているデータに関して異なる。以下では、CPU210の動作とメモリ220が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU210は、メモリ220あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、常時接続サーバ200の各部を制御する。具体的には、CPU210は、メモリ220に記憶されているプログラムを実行することによって、後述するWSサーバ212,212A,212B(図10、図11、図14、図15を参照。)として動作する。WSサーバ212は、ソフトウェアとしての常時接続サーバのことを言い、Webソケットプロトコルを使用してクライアント100との常時接続通信を制御したり、HTTPプロトコルを使用して常時接続補助サーバ400または複数のアプリケーションサーバ300との通信を制御したりする。
メモリ220は、CPU210によって実行されるプログラムや、CPU210によるプログラムの実行により生成されたデータ、キーボード230を介して入力されたデータ、サービスID、サービス名、アプリケーションサーバ300の接続先URL、サービス認証トークン生成情報、認証情報(ワンタイムキー)、接続IDなどを記憶する。
<アプリケーションサーバ300のハードウェア構成>
次に、アプリケーションサーバ300のハードウェア構成の一態様について説明する。図7は、本実施の形態にかかるアプリケーションサーバ300のハードウェア構成を表わすブロック図である。なお、アプリケーションサーバ300は、apache、tomcat、mysqlなど、一般的なサーバモジュールで担保できる機能は標準的に利用可能である。
図7を参照して、アプリケーションサーバ300は、主たる構成要素として、CPU310と、メモリ320と、キーボード330と、ディスプレイ340と、通信インターフェイス360とを含む。アプリケーションサーバ300のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU310の動作、メモリ320に格納されているデータに関して異なる。よって、以下では、CPU310の動作と、メモリ320が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU310は、メモリ320あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、アプリケーションサーバ300の各部を制御する。具体的には、CPU310は、メモリ320に記憶されているプログラムを実行することによって、後述するサーバAPPおよびサーバAPI312(図11、図14、図15を参照。)として動作する。
サーバAPPは、ソフトウェアとしてのアプリケーションサーバのことを言い、クライアント100やスマートフォンなどにサービスを提供する。サーバAPI312は、HTTPプロトコルを利用した常時接続補助サーバ400または常時接続サーバ200との通信を制御する。
メモリ320は、CPU310によって実行されるプログラムや、CPU310によるプログラムの実行により生成されたデータ、キーボード330を介して入力されたデータ、アプリケーションサーバ300として動作するためのAPPデータ、サーバAPPとデータをやり取りしながら常時接続サーバ200と通信するためのAPIデータを記憶する。具体的には、メモリ320は、常時接続サーバのURL、サービスIDとサービス認証トークン、認証情報(ワンタイムキー)生成情報、接続ID、待機サブルーチンの実行中を示す一時的なフラグ情報(後述)などを記憶する。
<対応関係DB>
次に、本実施形態にかかるネットワークシステム1で利用される対応関係DB500について説明する。図16は、本実施の形態にかかる対応関係DB500のデータ構造を示すイメージ図である。
図16を参照して、対応関係DB500は、クライアント100とアプリケーションサービスとの組み合わせ毎に、クライアント100を特定するための接続IDと、アプリケーションサーバ300が提供するサービスを特定するためのサービスID(アプリケーション定義データともいう。)と、常時接続サーバ200を特定するためのノード名(常時接続サーバ200のアドレスに対応付けられてもよいし、常時接続サーバ200のアドレスそのものであってもよい。)と、常時接続の開示時刻と、常時接続の利用回数との対応関係を含む。そして、対応関係DB500は、本実施形態にかかるネットワークシステム1に含まれる複数のアプリケーションサーバ300、常時接続補助サーバ400、および複数の常時接続サーバ200から参照可能になっている。
<常時接続補助サーバ400のハードウェア構成>
次に、常時接続補助サーバ400のハードウェア構成の一態様について説明する。図8は、本実施の形態にかかる常時接続補助サーバ400のハードウェア構成を表わすブロック図である。
図8を参照して、常時接続補助サーバ400は、主たる構成要素として、CPU410と、メモリ420と、キーボード430と、ディスプレイ440と、通信インターフェイス460とを含む。常時接続補助サーバ400のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU410の動作、メモリ420に格納されているデータに関して異なる。よって、以下では、CPU410の動作と、メモリ420が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU410は、メモリ420あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、常時接続補助サーバ400の各部を制御する。具体的には、CPU410は、メモリ420に記憶されているプログラムを実行することによって、常時接続補助機能411(図10を参照。)を実現する。常時接続補助機能411は、対応関係DB500を参照して、アプリケーションサーバ300からのデータの宛先であるクライアント100がどの常時接続サーバ200と常時接続中であるかを特定する。常時接続補助機能411は、通信インターフェイス460を介して、アプリケーションサーバ300からのデータを特定された常時接続サーバ200に転送する。
メモリ420は、CPU410によって実行されるプログラムや、CPU410によるプログラムの実行により生成されたデータ、キーボード430を介して入力されたデータ、を記憶する。
<負荷分散装置600のハードウェア構成>
負荷分散装置600のハードウェア構成の一態様について説明する。図9は、本実施の形態にかかる負荷分散装置600のハードウェア構成を表わすブロック図である。
図9を参照して、負荷分散装置600は、主たる構成要素として、CPU610と、メモリ620と、キーボード630と、ディスプレイ640と、通信インターフェイス660とを含む。負荷分散装置600のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU610の動作、メモリ620に格納されているデータに関して異なる。よって、以下では、CPU610の動作と、メモリ620が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU610は、メモリ620あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、負荷分散装置600の各部を制御する。具体的には、CPU610は、メモリ620に記憶されているプログラムを実行することによって、HTTPプロトコルを利用してクライアント100および他の装置から受信したデータを複数の常時接続サーバ200に割り振る。
メモリ620は、CPU610によって実行されるプログラムや、CPU610によるプログラムの実行により生成されたデータ、キーボード630を介して入力されたデータ、を記憶する。当該データとして、常時接続サーバ200から収集した負荷状態を格納する。
<ネットワークシステム1の機能構成>
次に、本実施の形態にかかるネットワークシステム1全体の機能構成について説明する。図10は、本実施の形態にかかるネットワークシステム1全体の機能構成を示すブロック図である。
図10を参照して、クライアント100は、Webソケットプロトコルを使用してノード1としての常時接続サーバ200Aと常時接続する。他の多数のクライアント100も、Webソケットプロトコルを使用してノード1としての常時接続サーバ200Aと常時接続する。さらに別の多数のクライアント100は、Webソケットプロトコルを使用してノード2としての常時接続サーバ200Bと常時接続する。なお、クライアント100は、HTTPプロトコルを使用して、アプリケーションサーバ300A,300B、負荷分散装置600を経由して、常時接続サーバ200A,200Bと通信することができる。
より詳細には、クライアントAPI112は、常時接続サーバ200のいずれかと常時接続を開始する際に、HTTPプロトコルを利用して、通信インターフェイス160を介して負荷分散装置600にノードリストを要求する。本実施の形態においては、クライアントAPI112は、HTTPプロトコルを利用して、負荷分散装置600を介して常時接続サーバ200にノードリストを要求する。
すなわち、負荷分散装置600は、クライアント100からの要求に応じて、常時接続サーバ200A,または200Bのいずれかに最新のノードリストの要求を転送する。
クライアントAPI112は、受信したノードリストの一番目の常時接続サーバ200を選択する。あるいは、クライアントAPI112は、ノードリストからランダムに常時接続サーバ200を選択する。あるいは、ノードリストに各常時接続サーバ200の負荷または接続中のクライアントの数などが含まれている場合、クライアントAPI112は、負荷または接続中のクライアントの数が小さい常時接続サーバ200を選択する。
クライアントAPI112は、通信インターフェイス160を介して、選択された常時接続サーバ200と常時接続を開始する。
常時接続サーバ200A,200BのWSサーバ212A,212Bは、CPU210によって実現されるものであって、Webソケットサーバとして、Webソケットプロトコルを利用して、通信インターフェイス260を介して、クライアント100と常時接続する。WSサーバ212A,212Bは、HTTPサーバとして、HTTPプロトコルを利用して、通信インターフェイス260を介して、他の常時接続サーバ200、アプリケーションサーバ300、負荷分散装置600などともデータ通信を行う。
常時接続サーバ200A,200BのWSサーバ212A,212Bは、負荷分散装置600からの要求に応じて、通信インターフェイス260を利用することによって、対応関係DB500に最新のノードリストを要求する。対応関係DB500は、常時接続サーバ200A,200Bのいずれかからの要求に応じて、複数の常時接続サーバ200A,200Bに接続確認を行うことによってノードリストを更新する。
なお、本実施形態においては、常時接続サーバ200は、ノードリストを含む、以下のようなデータをクライアント100に送信する。
{"status":0,"reConInterval":600,"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo"]}
ここで、"reConInterval":600というは、再接続間隔が600秒であることを示す。"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo"]というのは、複数の常時接続サーバのアドレスを含むノードリストを示す。
そして、本実施の形態にかかる常時接続サーバ200に関しては、WSサーバ212が、定期的に、対応関係DB500に格納されているデータから複数の常時接続サーバ200に接続されているクライアント100の全数、1つの常時接続サーバ200の一秒当たりの再接続可能数、稼働中の常時接続サーバ200の数を取得する。そして、WSサーバ212は、以下の式(1)に基づいて再接続間隔T(秒)を計算する。
(再接続間隔)=(接続済みクライアント数+α)÷(1秒当たりの再接続可能数)÷(稼働中の常時接続サーバ数)…(1)
そして、WSサーバ212は、通信インターフェイス260を介して、クライアント100のノードリスト要求時に、再接続間隔を常時接続サーバ200と常時接続しているクライアント100に配信する。
本実施形態においては、常時接続サーバ200がノードリストと同時に再接続間隔を送る。しかしながら、常時接続サーバ200は、ノードリストと再接続間隔とを同時に送る必要はない。たとえば、常時接続サーバ200は、予め、再接続間隔だけをクライアント100に送信してもよい。
<常時接続に関する装置間のデータのやり取り>
次に、本実施の形態にかかるネットワークシステム1における常時接続に関する装置間のデータのやり取りの概要について説明する。なお、図11は、本実施の形態にかかるネットワークシステム1における常時接続に関する装置間のデータのやり取りの処理手順を示すシーケンス図である。
まず、クライアントAPI112は、常時接続を開始する際に、通信インターフェイス160を利用することによって、負荷分散装置600を介して常時接続サーバ200にノードリストを要求する。クライアントAPI112は、ノードリストを参照して、常時接続する常時接続サーバ200を選択する。
図11を参照して、クライアントAPI112は、HTTPプロトコルを使用して、通信インターフェイス160を介して、アプリケーションサーバ300に認証情報を要求する(ステップS002)。このとき、クライアントAPI112は、アプリケーションサーバ300に、認証に利用されるクライアントIDを送信する。アプリケーションサーバ300のサーバAPI312は、当該要求に応じてHTTPプロトコルを使用して、通信インターフェイス360を介して認証情報を送信する(ステップS004)。
サーバAPI312は、通信インターフェイス360を介して、選択された常時接続サーバ200にも認証情報を送信する(ステップS006)。常時接続サーバ200のWSサーバ212は、アプリケーションサーバ300から受信した認証情報を保存する(ステップS008)。
クライアント100と常時接続サーバ200とは、Webソケットプロトコルを使用して、Webソケットを利用した常時接続状態を確立する(ステップS010、ステップS012)。具体的には、クライアントAPI112は、通信インターフェイス160を介して常時接続サーバ200にハンドシェイク要求を送る。WSサーバ212は、通信インターフェイス260を介してハンドシェイク応答を返す。これによって、クライアント100と常時接続サーバ200との間で、Webソケットプロトコルによる常時接続が有効になる。
クライアントAPI112は、通信インターフェイス160を介して認証情報を常時接続サーバ200に送信する(ステップS014)。WSサーバ212は、クライアント100からの認証情報と予め保存している認証情報とに基づいて、クライアント100を認証する(ステップS016)。認証に成功すると、WSサーバ212は、アプリケーションサーバ300がクライアント100を識別するための接続IDを発行するとともに保存している認証情報を削除する。また、WSサーバ212は、図16に示すように、接続IDと常時接続サーバ200Aを特定する情報とアプリケーションサービスを特定する情報とを対応付けて、通信インターフェイス260を介して当該対応関係を、対応関係DB500に登録する。(ステップS018)。
クライアント100は、接続IDを受信して、記憶する(ステップS020)。アプリケーションサーバ300も、接続IDを受信して、クライアントIDと対応付けて記憶する(ステップS022)。
その後、サーバAPI312は、サーバAPPからの要求に応じて、データ本体と、ステップS022で記憶した、送り先のクライアント100のクライアントIDに対応する接続IDとを通信インターフェイス360を介して常時接続サーバ200に送信する(ステップS032)。
本実施の形態においては、ステップS033として、アプリケーションサーバ300からのデータは、常時接続補助サーバ400が受信する。常時接続補助サーバ400のCPU410によって実現されるクライアント接続ノード転送機能411は、対応関係DB500に登録されている接続IDと常時接続サーバとの対応関係に基づいてデータを送信すべき常時接続サーバ200を選択する。クライアント接続ノード転送411は、通信インターフェイス460を介して、選択された常時接続サーバ200にデータを転送する。
常時接続サーバ200は、常時接続補助サーバ400からデータ本体と接続IDとを受信する(ステップS034)。WSサーバ212は、接続IDに基づいてクライアント100を特定する(ステップS036)。
WSサーバ212は、Webソケットプロトコルを使用して、通信インターフェイス260を介して、特定されたクライアント100にデータ本体を送信する(ステップS038)。クライアント100は、データ本体を受信する(ステップS040)。
クライアント100は、Webソケットプロトコルを使用して、受信結果を常時接続サーバ200に送信する(ステップS042)。常時接続サーバ200は、受信結果を受信すると、当該受信結果をアプリケーションサーバ300に送信する(ステップS044)。アプリケーションサーバ300は、受信結果を受信する(ステップS046)。
そして、本実施の形態においては、クライアントAPI112が、常時接続サーバ200との常時接続通信が行えなくなったときに、待ち時間だけ待機してから、通信インターフェイス160を利用することによって負荷分散装置600を介して常時接続サーバ200に最新のノードリストを要求する。常時接続サーバ200からのノードリストの取得に失敗した場合、もしくは、ノードリストの取得に成功したが、Webソケット接続に失敗した場合、クライアントAPI112は、再接続間隔待機してから、再度、通信インターフェイス160を介して、負荷分散装置600に最新のノードリストを要求する。以降、ノードリストの取得とWebソケット接続に成功するまで、クライアントAPI112は、再接続間隔だけ待機してから、負荷分散装置600を介して常時接続サーバ200に最新のノードリストを要求する処理を繰り返す。
つまり、常時接続サーバ200との常時接続通信が行えなくなったとき、クライアントAPI112は、待ち時間だけ待機してから、ステップS002からの処理を繰り返す。ただし、後述する第2の実施の形態において説明するように、既に取得している接続IDに基づいて、認証処理を簡略化することも可能である。
<クライアント100における再接続処理>
次に、本実施の形態にかかるクライアント100における再接続処理の処理手順について説明する。図12は、本実施の形態にかかるクライアント100における再接続処理の処理手順を示すフローチャートである。より詳細には、以下では、主に、クライアント100のCPU110がプログラムを実行することによって実現されるクライアントAPI112の動作について説明する。
図12を参照して、クライアントAPI112はクライアントAPP111からの接続開始要求を受け付ける(ステップS102)。クライアントAPI112は、当該要求に応じて、クライアントAPP111を特定するクライアントIDの設定が必要である場合、クライアントIDをメモリ120に格納する(ステップS104)。クライアントAPI112は、これから行う予定の常時接続処理が、通常の新たな常時接続処理(初回接続処理ともいう。)であるか、予期せぬ切断による再接続処理であるか否かを判断する(ステップS106)。
たとえば、クライアントAPI112は、クライアントAPP111から渡されるデータが、クライアントIDとして設定されているかどうかで、初回接続処理と再接続処理とを区別する。
本実施の形態においては、クライアントAPI112が初回接続である(あるいは、再接続でない)と判断した場合(ステップS106にてYESである場合)、初回接続処理として、クライアントAPI112は、WS接続用認証情報の取得処理を実施し、アプリケーションサーバ300から認証情報を取得し、ステップS132からの処理を実行する(S110)。
一方、クライアントAPI112が再接続である(あるいは、初回接続でない)と判断した場合(ステップS106にてNOである場合)、クライアントAPI112は、再接続処理として、メモリ120から再接続間隔を読み出す(ステップS112)。
本実施の形態においては、上述したように、クライアント100は、常時接続サーバ200からノードリストを取得した時に、ノードリストとともに再接続間隔を取得する。ただし、クライアントAPI112は、再接続間隔を未だ取得していない場合、再接続間隔を自身に組み込まれたデフォルト値(たとえば600秒)とする。
クライアントAPI112は、後述する待機サブルーチンを実行する(ステップS120)。その後、クライアントAPI112は、通信インターフェイス160を利用して、負荷分散装置600を介して常時接続サーバ200に、複数の常時接続サーバ200の情報を含むノードリストと最新の再接続間隔とを要求する(ステップS132)。
クライアントAPI112は、常時接続サーバ200からノードリストを取得できなかった場合(ステップS134にてNOの場合)、ステップS106からの処理を繰り返す。一方、クライアントAPI112は、常時接続サーバ200からノードリストと再接続間隔を取得できた場合(ステップS134にてYESの場合)、メモリ120に最新の再接続間隔を記憶する(ステップS136)。このとき、クライアントAPI112は、後述する待機サブルーチンの実行中を示すフラグをOFFする。
クライアントAPI112は、取得したノードリストに基づいて、常時接続する常時接続サーバ200を選択する。クライアントAPI112は、通信インターフェイス160を介して、選択された常時接続サーバ200との常時接続を開始するための処理を実行する(ステップS138、図11のステップS010からの処理を参照。)。
クライアントAPI112は、最大で、ノードリストに含まれる常時接続サーバ200の件数分だけ、上記処理を繰り返す。なお、本実施の形態においては、クライアントAPI112は、ステップS138において、ノードリスト上で未だ常時接続を試みていない常時接続サーバ200との常時接続を試みる。
クライアントAPI112は、選択されたすべての常時接続サーバ200との常時接続に失敗すると(ステップS140にてNOの場合)、ステップS106からの処理を繰り返す。
クライアントAPI112は、選択された常時接続サーバ200との常時接続に成功すると(ステップS140にてYESである場合)、認証処理を実行する(ステップS142、図11のステップS014からの処理を参照)。
<クライアント100における待機サブルーチン>
次に、本実施の形態にかかるクライアント100における待機サブルーチンの処理手順について説明する。図13は、本実施の形態にかかるクライアント100における待機サブルーチンの処理手順を示すフローチャートである。以下では、主に、クライアント100のCPU110がプログラムを実行することによって実現されるクライアントAPI112の動作について説明する。
図13を参照して、クライアントAPI112は、待機サブルーチンの実行が初めてか否かを判断する(ステップS122)。たとえば、クライアントAPI112は、待機サブルーチンの実行中を示すフラグがONであるか否かを確認し、OFFの場合を1回目であるとし、ONの場合は2回目以降であるとする。
待機サブルーチンの実行が1回目である場合(ステップS122にてYESである場合)、クライアントAPI112は、待機サブルーチンの実行中を示すフラグをONする。クライアントAPI112は、待ち時間を生成する(ステップS124)。より詳細には、クライアントAPI112は、1秒から再接続間隔T秒までの間で、待ち時間をランダムに設定する。クライアントAPI112は、待ち時間だけ待機して(ステップS126)、待機サブルーチンから再接続処理に戻る。
待機サブルーチンの実行が2回目以降である場合(ステップS122にてNOである場合)、クライアントAPI112は、再接続間隔を待ち時間とする(ステップS128)。クライアントAPI112は、待ち時間だけ待機して(ステップS126)、待機サブルーチンから再接続処理に戻る。
このように、本実施の形態にかかるネットワークシステム1では、常時接続サーバ200との常時接続が切断された多数のクライアント100の各々が、待ち時間だけ待機してから、再接続処理を開始する。すなわち、多数のクライアント100が一斉に負荷分散装置600や常時接続サーバ200にアクセスしてくることを防止することができる。その結果、クライアント100と常時接続サーバ200との再接続処理がスムーズに進行し、常時接続状態への復旧が速やかに行われる。
<第2の実施の形態>
次に、第2の実施の形態について説明する。第1の実施の形態にかかるネットワークシステム1では、再接続処理を行う際には、再度認証処理を行う必要があった。しかしながら、本実施の形態においては、接続IDを利用することによって認証処理を簡略化するものである。
本実施の形態にかかるネットワークシステム1の全体構成や各部のハードウェア構成は、第1の実施の形態のそれと同様であるため、説明を繰り返さない。以下では、本実施の形態にかかるネットワークシステム1における初回接続処理の処理手順と再接続処理の処理手順とについて説明する。
<初回接続処理の処理手順>
まず、本実施の形態にかかる初回接続処理の処理手順について説明する。図14は、本実施の形態にかかる初回接続処理の処理手順を示すシーケンス図である。
図14を参照して、クライアントAPP111は、アプリケーションサーバ300との常時接続を開始するための要求を、クライアントAPI112に受け渡す(ステップS202)。このとき、クライアントAPP111は、クライアントAPI112にクライアントIDを受け渡す。クライアントAPI112は、クライアントIDを受け取らなかったときは、以下のように、初期接続処理を実行する。
クライアントAPI112は、クライアントAPP111にアプリケーションサーバ300への接続を要求する(ステップS204)。クライアントAPP111は、通信インターフェイス160を介して、HTTPプロトコルを利用してアプリケーションサーバ300に接続開始を要求する(ステップS206)。クライアントAPP111は、アプリケーションサーバ300から認証情報を受信して、当該認証情報をクライアントAPI112に受け渡す。
クライアントAPI112は、通信インターフェイス160を利用することによって、負荷分散装置600を介していずれかの常時接続サーバ200にノードリストを要求する(ステップS208)。クライアントAPI112は、ノードリストに基づいて、常時接続を試みる常時接続サーバ200を選択する。クライアントAPI112は、常時接続サーバ200との常時接続を開始するための処理を実行するためにWS接続スレッドを起動する(ステップS210)。
クライアントAPI112は、通信インターフェイス160を利用することによって、Webソケットプロトコルを使用して、常時接続サーバ200にWebソケットハンドシェイク要求を送信する(ステップS212)。WSサーバ212は、通信インターフェイス260を介して、ハンドシェイク応答をクライアント100に返す(ステップS216)。これによって、クライアント100と常時接続サーバ200とのWebソケットプロトコルによる常時接続が開始される。
なお、クライアントAPI112は、常時接続サーバ200とのハンドシェイクに失敗すると、再度ノードリストに基づいて、他の常時接続サーバ200を選択する。そして、クライアントAPI112は、ステップS212からの処理を繰り返す。
クライアントAPI112は、通信インターフェイス160を介して、Webソケットプロトコルを使用して、常時接続サーバ200に認証情報を送信する(ステップS218)。WSサーバ212は、アプリケーションサーバ300からの認証情報とクライアント100からの認証情報とに基づいてクライアント100を認証する。
認証に成功すると、WSサーバ212は、接続IDを発行する。WSサーバ212は、通信インターフェイス260を介して、接続確立状況としてクライアント100の接続IDをアプリケーションサーバ300とクライアント100とに送信する(ステップS220)。
クライアントAPI112は、クライアントAPP111に常時接続が開始された旨を通知する(ステップS224)。なお、常時接続サーバ200が認証に失敗した場合は、クライアントAPI112は、ステップS204からの処理を繰り返す。
<再接続処理の処理手順>
次に、本実施の形態にかかる再接続処理の処理手順について説明する。図15は、本実施の形態にかかる再接続処理の処理手順を示すシーケンス図である。
図15を参照して、クライアントAPP111は、アプリケーションサーバ300との常時接続を開始するための要求を、クライアントAPI112に受け渡す(ステップS252)。このとき、クライアントAPP111は、クライアントAPI112にクライアントIDを受け渡す。クライアントAPP111は、クライアントIDを受け取ったときは、以下のように、再接続処理を実行する。
クライアントAPI112は、前述した待機サブルーチンを実行し、待ち時間だけ待機する(ステップS257)。クライアントAPI112は、待機後、通信インターフェイス160を利用することによって、負荷分散装置600を介していずれかの常時接続サーバ200にノードリストを要求する(ステップS258)。
クライアントAPI112は、ノードリストを取得できなかった場合、再接続間隔だけ待機してから、再度、通信インターフェイス160を利用することによって、負荷分散装置600を介していずれかの常時接続サーバ200にノードリストを要求する。
クライアントAPI112は、ノードリストを取得できた場合、ノードリストに含まれる再接続間隔を記憶し、ノードリストに含まれるノードのリストに基づいて、常時接続を試みる常時接続サーバ200を選択する。クライアントAPI112は、常時接続サーバ200との常時接続を開始するための処理を実行するためにWS接続スレッドを起動する(ステップS260)。
クライアントAPI112は、通信インターフェイス160を利用することによって、Webソケットプロトコルを使用して、常時接続サーバ200にハンドシェイク要求を送信する(ステップS262)。WSサーバ212は、通信インターフェイス260を介して、ハンドシェイク応答をクライアント100に返す(ステップS266)。これによって、クライアント100と常時接続サーバ200とのWebソケットプロトコルによる常時接続が開始される。
なお、クライアントAPI112は、常時接続サーバ200とのハンドシェイクに失敗すると、再度ノードリストに基づいて、他の常時接続サーバ200を選択する。そして、クライアントAPI112は、ステップS260からの処理を繰り返す。
クライアントAPI112は、通信インターフェイス160を介して、Webソケットプロトコルを使用して、常時接続サーバ200にクライアントIDを送信する(ステップS268)。WSサーバ212は、接続IDをアプリケーションサーバ300に送信することによって、クライアント100を認証する。
認証に成功すると、WSサーバ212は、認証に成功した旨をクライアント100とアプリケーションサーバ300とに通知する(ステップS270)。クライアントAPI112は、クライアントAPP111に常時接続が開始された旨を通知する(ステップS274)。
なお、常時接続サーバ200が認証に失敗した場合は、クライアントAPI112は、初回接続処理のステップS204(図14を参照。)からの処理を繰り返す。
このように、本実施の形態にかかるネットワークシステム1においても、常時接続サーバ200との常時接続が切断された多数のクライアント100の各々が、待ち時間だけ待機してから、再接続処理を開始する。すなわち、多数のクライアント100が一斉に負荷分散装置600や常時接続サーバ200にアクセスしてくることを防止することができる。その結果、クライアント100と常時接続サーバ200との再接続処理がスムーズに進行し、常時接続状態への復旧が速やかに行われる。
<第3の実施の形態>
上記の第1および第2の実施の形態では、常時接続サーバ200が再接続間隔を計算し、クライアント100が再接続間隔に基づいて待ち時間を計算するものであった。つまり、常時接続サーバ200が、再接続間隔をクライアント100に配信するものであった。
しかしながら、第3の実施の形態にかかるネットワークシステムとして、常時接続サーバ200が再接続間隔を計算し、再接続間隔に基づいて待ち時間までも計算してもよい。つまり、常時接続サーバ200が、再接続間隔と一緒に、待ち時間もクライアント100に配信してもよい。
<第4の実施の形態>
上記の第1から第3の実施の形態では、クライアント100が、1(秒)〜再接続間隔T(秒)までの間で、ランダムに待ち時間を決定するものであった。
しかしながら、第4の実施の形態にかかるネットワークシステムとして、常時接続サーバ200のCPU210、アプリケーションサーバ300のいずれかが、常時接続によるデータ送受信の頻度に基づいて、待ち時間を決定してもよい。より詳細には、それらのCPUは、クライアント100と常時接続サーバ200(あるいはサーバAPP)との組み合わせ毎の、単位時間当たりのWebソケットプロトコルを利用したデータ送受信の回数(頻度)を対応関係DB500に格納する。そして、CPUは、Webソケットプロトコルを利用した送受信の頻度が高い組み合わせほど、待ち時間が短くなるように、待ち時間を設定する。たとえば、CPUは、存在するクライアント全数に対する当該クライアントの送受信の回数の相対度数を算出し、これと再接続間隔T(秒)との積を求めることにより、待ち時間を決定する。
これによって、常時接続によるデータの送受信を頻繁に行うクライアント100と常時接続サーバ200との組み合わせほど、常時接続が早く復旧する。その結果、常時接続が切断された場合に、アプリケーションサーバ300からクライアント100に情報をプッシュできないことによる不具合が生じる可能性を低減することができる。
<第5の実施の形態>
上記の第1および第2の実施の形態では、負荷分散装置600が稼働中の常時接続サーバ200のアドレスが格納されたノードリストをクライアント100に送信するものであった。そして、クライアント100が、ノードリストに基づいて、常時接続を開始する常時接続サーバ200を選択するものであった。
しかしながら、第5の実施の形態として、常時接続サーバ200が、稼働中の常時接続サーバ200のアドレスが格納されたノードリストに基づいて、クライアント100と常時接続すべき(たとえば、現在の負荷が小さい)常時接続サーバ200を選択してもよい。この場合は、常時接続サーバ200は、選択された常時接続サーバ200のみを含むノードリストをクライアント100に送信する。そして、クライアント100は、ノードリストに指定された常時接続サーバ200と常時接続を開始する。
<第6の実施の形態>
上記の第1および第2の実施の形態では、負荷分散装置600は、クライアント100からノードリストの要求を受け付けたときに、常時接続サーバ200にノードリストを要求する。さらに、常時接続サーバ200は、その他複数の常時接続サーバ200に接続確認用データ(ping)を送信し、その応答に基づいて対応関係DB500のノードリストを更新する。さらに、常時接続サーバ200は、負荷分散装置600から転送された要求に応じて対応関係DB500からノードリストを取得する。
しかしながら、第6の実施の形態として、常時接続サーバ200は、定期的に、その他複数の常時接続サーバ200に接続確認用データ(ping)を送信し、その応答に基づいて対応関係DB500のノードリストを更新しておく。そして、常時接続サーバ200は、負荷分散装置600からの要求に応じて対応関係DB500からノードリストを取得してもよい。
<第7の実施の形態>
あるいは、第7の実施の形態として、常時接続サーバ200が、定期的に、その他複数の常時接続サーバ200に接続確認用データ(ping)を送信し、その応答に基づいてノードリストを更新し、更新した最新のノードリストをその他の常時接続サーバ200に送信しておき、さらに、常時接続サーバ200が、クライアント100からの要求に応じて、予め受信していたノードリストをクライアント100に送信してもよい。
<第8の実施の形態>
上記の実施の形態では、クライアント100は、負荷分散装置600を介して常時接続サーバ200から再接続用間隔およびノードリストを取得するものであった。しかしながら、第8の実施の形態として、クライアント100は、サービスを提供しているアプリケーションサーバ300を介して、常時接続サーバ200から再接続用間隔およびノードリストを取得してもよい。
具体的には、クライアント100は、常時接続サーバ200との常時接続が切断されると、HTTPプロトコルを利用して、アプリケーションサーバ300にノードリスト要求および/または再接続用間隔要求を送信する。アプリケーションサーバ300は、複数の常時接続サーバ200のいずれかまたは対応関係DB500にノードリストおよび/または再接続間隔を要求する。複数の常時接続サーバ200のいずれかまたは対応関係DB500は、ノードリストおよび/または再接続間隔をアプリケーションサーバ300に返す。アプリケーションサーバ300は、HTTPプロトコルを利用して、クライアント100にノードリストおよび/または再接続間隔を送信する。
<第9の実施の形態>
上記の実施の形態では、クライアント100は、常時接続サーバ200との常時接続が切断されると、再接続時間待機してから、常時接続サーバ200と再接続するための処理を開始するものであった。しかしながら、第9の実施の形態として、クライアント100は、常時接続サーバ200との常時接続が切断されると、所定の条件を満たした場合にのみ再接続時間待機してから常時接続サーバ200と再接続するための処理を開始し、所定の条件を満たさない場合は待機せずに即時に常時接続サーバ200と再接続するための処理を開始してもよい。
たとえば、常時接続サーバ200を起因とする常時接続の切断の時だけ、クライアント100は再接続用間隔待機する。逆に、クライアント100が原因となって常時接続を切断した場合は、クライアント100は即時に再接続のための処理を開始する。
具体例として、常時接続サーバ200が常時接続を切断した場合以外の理由で常時接続が切断された場合(クライアントAPIの再起動など)に、クライアント100がフラグ情報を一時領域に記憶(フラグをON)する。そして、再接続時に、クライアント100は、このフラグ情報がONか否かを判断する。クライアント100は、フラグ情報がONの場合、即時に再接続のための処理を開始する。クライアント100は、再接続に成功したときにフラグをOFFする。一方、クライアント100は、フラグ情報がOFFの場合、再接続用間隔待機してから再接続のための処理を開始する。
換言すれば、クライアント100が原因で常時接続が切断された場合(クライアントAPIの再起動など)に、クライアント100がフラグ情報を一時領域に記憶(フラグをON)する。
これにより、再接続を分散させる必要の無い時に、待ち時間、すなわち常時接続を利用した機能が利用できない時間を低減することが可能になる。
<第10の実施の形態>
上記の実施の形態では、ネットワークシステム1が複数の常時接続サーバ200を含むものであった。しかしながら、ネットワークシステム1は、1つの常時接続サーバ200を含むものであってもよい。
この場合は、クライアント100は、常時接続サーバ200にノードリストを要求する必要がない。しかしながら、クライアント100は、常時接続サーバ200から再接続用間隔を受信する必要がある。すなわち、クライアント100は、常時接続が切断された際に、1〜再接続用間隔(秒)の間の待ち時間または再接続用間隔だけ待機してから、ノードリストを要求することなく、以前に常時接続していた常時接続サーバ200とハンドシェイク処理を開始する。
そして、本実施の形態にかかる常時接続サーバ200に関しては、WSサーバ212が、定期的に、対応関係DB500または常時接続サーバ200に格納されているデータから常時接続サーバ200に接続されているクライアント100の数、常時接続サーバ200の一秒当たりの再接続可能数を取得する。そして、WSサーバ212は、以下の式(2)基づいて再接続間隔T(秒)を計算する。
(再接続間隔)=(接続済みクライアント数+α)÷(1秒当たりの再接続可能数)…(2)
<その他の応用例>
本発明は、システム或いは装置にプログラムを供給することによって達成される場合にも適用できることはいうまでもない。そして、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記憶媒体(あるいはメモリ)を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の効果を享受することが可能となる。
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わる他の記憶媒体に書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。