以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
また、以下では、常時接続の一例として、WebSocketプロトコルを利用した通信について説明する。しかしながら、アプリケーションサーバから任意のタイミングでクライアントにデータをプッシュできればよく、本発明はWebSocketプロトコルを利用する常時接続に限定されるものではない。
<第1の実施の形態>
<ネットワークシステムの全体構成>
まず、本実施の形態にかかるネットワークシステム1の全体構成について説明する。図1は、本実施の形態にかかるネットワークシステム1の全体構成を示すイメージ図である。
図1を参照して、本実施の形態にかかるネットワークシステム1は、住居またはオフィスなどに配置される複数の家電100A,100B,100Cと、ネットワークを介して家電100A,100B,100Cと接続される複数の常時接続サーバ200A,200B,200C,200Dと、家電100A,100B,100Cに関する様々なサービスを提供する複数のアプリケーションサーバ300A,300B,300Cと、複数の家電100A,100B,100Cに常時接続サーバ200A,200B,200C,200Dに関するリストを提供する第1の補助サーバ400と、アプリケーションサーバ300A,300B,300Cからのデータを常時接続サーバ200A,200B,200C,200Dに割り振るための第2の補助サーバ500とを含む。
なお、以下では家電100A,100B,100Cを総称してクライアント100ともいう。また、常時接続サーバ200A,200B,200C,200Dを総称して常時接続サーバ200ともいう。また、アプリケーションサーバ300A,300B,300Cを総称してアプリケーションサーバ300ともいう。
ここで、クライアント100としては、たとえば、掃除機100A、エアコン100B、テレビ100C、洗濯機、冷蔵庫、炊飯器、空気清浄器、床暖房、IH(Induction Heating)クッキングヒーター、などが挙げられる。さらに、クライアント100は、住居内またはオフィス内の通信機器であればよく、たとえば、パーソナルコンピュータ、テレビ以外のAV機器、インターホンシステムなどを含んでもよい。また、常時接続サーバ200とアプリケーションサーバ300と第1の補助サーバ400と第2の補助サーバ500とは、クライアント100と同じ住居内、オフィス内、ビル内、会社あるいは学校の構内に存在するサーバなどであってもよい。
また、クライアント100と各サーバ間は、光ファイバ等の回線を経由して接続されており、途中に、光回線終端装置、無線LAN通信を行うためのアクセスポイント、ルータ等が接続されてもよい。家電は、ネットワークに接続する手段として、IEEE802.11a/b/g/n/acなどの無線LAN通信、あるいは、有線LANなどが用いられるが、接続方法はこれらに限定されるものではない。
本実施の形態においては、1つのアプリケーションサーバ300または1つのサービスに対して、1つ以上の常時接続サーバ200が対応付けられている。そして、1つの常時接続サーバ200にして、1つ以上のアプリケーションサーバ300または1つ以上のサービスが対応付けられている。つまり、本実施形態にかかるネットワークシステム1は、サービス対常時接続サーバがN対Nであってもよい。
ただし、1つのアプリケーションサーバ300または1つのサービスに対して、複数の常時接続サーバ200が対応付けられ、1つの常時接続サーバ200に対しては1つだけのアプリケーションサーバ300または1つだけのサービスが対応付けられるものであってもよい。つまり、サービス対常時接続サーバが1対Nは許容されるが、サービス対常時接続サーバがN対Nは許容されないシステムであってもよい。
逆に、1つのアプリケーションサーバ300または1つのサービスに対して、1つだけの常時接続サーバ200が対応付けられ、1つの常時接続サーバ200に対しては複数のアプリケーションサーバ300または複数のサービスが対応付けられるものであってもよい。つまり、サービス対常時接続サーバがN対1は許容されるが、サービス対常時接続サーバがN対Nは許容されないシステムであってもよい。
本実施の形態においては、そして、サービスと常時接続サーバ200が実現するノードに関する情報との対応関係がサービス/ノード対応関係DB600に格納されている。そして、クライアント100の各々は、サービス/ノード対応関係DB600からのデータを利用して、自身が利用するサービスに対応する常時接続サーバ200のいずれかと常時接続する。
以下では、説明のために、1つのアプリケーションサーバ300が1つのサービスを提供するものとし、1つのサービスは1つのアプリケーションサーバ300から提供されるものとする。すなわち、本実施の形態においては、アプリケーションサーバ300とサービスとが1対1で対応するものとする。
なお、ここでのノードに関する情報は、常時接続サーバ200のアドレスであってもよいし、常時接続サーバ200を特定するIDであってもよい。ノードに関する情報が、常時接続サーバ200を特定するIDである場合には、サービス/ノード対応関係DB600は、常時接続サーバ200を特定するIDと常時接続サーバ200のアドレスとの対応関係を記憶する。
たとえば、第1のアプリケーションサーバ300Aが掃除機100Aに掃除機用のサービスを提供し、第2のアプリケーションサーバ300Bがエアコン100Bにエアコン用のサービスを提供し、第3のアプリケーションサーバ300Cがテレビ100Cにテレビ用のサービスを提供する場合を想定する。そして、ある時点において、第1のアプリケーションサーバ300Aが第1の常時接続サーバ200Aと第2の常時接続サーバ200Bとに対応付けられており、第2のアプリケーションサーバ300Bが第3の常時接続サーバ200Cと第4のアプリケーションサーバとに対応付けられており、第3のアプリケーションサーバ300Cが第3の常時接続サーバ200Cと第4の常時接続サーバ200Dとに対応付けられているとする。
この状況において、掃除機100Aが掃除機用のサービスの利用を試みる場合、すなわち掃除機100Aが常時接続の開始を試みる場合、掃除機100Aは第1の補助サーバ400から掃除機用のサービスに対応する常時接続サーバ200のリストを取得する。掃除機100Aは、当該リストを参照して、掃除機用のサービスに対応する第1の常時接続サーバ200Aまたは第2の常時接続サーバ200Bとの常時接続を行う。これによって、第1のアプリケーションサーバ300Aは、第1の常時接続サーバ200Aまたは第2の常時接続サーバ200Bを介して、掃除機100Aに各種のデータをPUSHすることができるようになる。すなわち、掃除機用のサービスを利用する複数のクライアント100は、第1の常時接続サーバ200Aまたは第2の常時接続サーバ200Bを介して、第1のアプリケーションサーバ300AからのデータPUSHを受け付ける。
同様に、エアコン100Bがエアコン用のサービスの利用を試みる場合、すなわちエアコン100Bが常時接続の開始を試みる場合、エアコン100Bは第1の補助サーバ400からエアコン用のサービスに対応する常時接続サーバ200のリストを取得する。エアコン100Bは、当該リストを参照して、エアコンのサービスに対応する第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dとの常時接続を行う。これによって、第2のアプリケーションサーバ300Bは、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dを介して、エアコン100Bに各種のデータをPUSHすることができるようになる。すなわち、エアコン用のサービスを利用する複数のクライアント100は、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dを介して、第2のアプリケーションサーバ300BからのデータPUSHを受け付ける。
同様に、テレビ100Cがテレビ用のサービスの利用を試みる場合、すなわちテレビ100Cが常時接続の開始を試みる場合、テレビ100Cは第1の補助サーバ400からテレビ用のサービスに対応する常時接続サーバ200のリストを取得する。テレビ100Cは、当該リストを参照して、テレビのサービスに対応する第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dとの常時接続を行う。これによって、第3のアプリケーションサーバ300Cは、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dを介して、テレビ100Cに各種のデータをPUSHすることができるようになる。すなわち、テレビ用のサービスを利用する複数のクライアント100は、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dを介して、第3のアプリケーションサーバ300CからのデータPUSHを受け付ける。
このようにして、クライアント100は、自身が利用するサービスに対応する常時接続サーバ200を介して、アプリケーションサーバ300とデータをやりとりする。本実施の形態においては、クライアント100とアプリケーションサーバ300との組み合わせに対して接続IDが設定される。そして、接続IDと常時接続サーバ200との対応関係が、接続ID/ノード対応関係DB700に格納され。
さらに、本実施の形態においては、監視サーバ800が、接続ID/ノード対応関係DB700を参照することによって、一部の常時接続サーバ200だけに負荷が集中していないか監視している。換言すれば、監視サーバ800は、一部のサービスに関する負荷が、当該一部のサービスに割り当てられている常時接続サーバ200の数に対して、大き過ぎないか否かを判断する。
そして、監視サーバ800は、負荷が集中している常時接続サーバ200に対応するサービス(たとえば、第1のサービス)に割り当てられる常時接続サーバ200の数を増やし、負荷が集中していない常時接続サーバ200に対応するサービス(第2のサービス)に割り当てられる常時接続サーバ200の数を減らす。本実施の形態においては、監視サーバ800は、サービス/ノード対応関係DB600における、第2のサービスに割り当てられていた常時接続サーバ200の対応先を第1のサービスに変更する。
すなわち、本実施の形態にかかるネットワークシステム1では、アプリケーションサーバ300またはサービスと常時接続サーバ200とが対応づけられているため、一部のサービスのみに対応する常時接続サーバ200をスリープさせたりメンテナンスしたり、一部のサービスのみに対応する常時接続サーバ200のスペックを高くしたり低くしたり、一部のサービスのみに対応する常時接続サーバ200の台数を増やしたり減らしたりすることができる。
そして、動的に、アプリケーションサーバ300またはサービスと常時接続サーバ200との関係を変更することができるため、人気のサービスのみにアクセスが集中することによってクライアント100がサービスを利用できなくなる可能性や、常時接続によるデータの送受信がスムーズに行えなくなる可能性を低減することができる。つまり、本実施の形態にかかるネットワークシステム1では、サービス毎に常時接続サーバ200をメンテナンスすることを可能にしつつ、一部の常時接続サーバ200のみに負荷が集中する可能性を低減することができる。
以下、このような機能を実現するためのネットワークシステム1の具体的な構成について詳述する。
<クライアント100のハードウェア構成>
まず、クライアント100のハードウェア構成の一態様について説明する。図2は、本実施の形態にかかるクライアント100のハードウェア構成を表わすブロック図である。
図2を参照して、クライアント100は、主たる構成要素として、CPU110と、メモリ120と、入出力部130と、家電制御回路150と、通信インターフェイス160とを含む。
CPU110は、メモリ120あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、クライアント100の各部を制御する。より詳細には、CPU110は、メモリ120のプログラムを実行することによって後述するクライアントAPP(Application software)およびクライアントAPI(Application Programming Interface)112(図13を参照。)として動作する。より詳細には、クライアントAPPは、家電制御回路150を介してクライアント100の各部を制御する。クライアントAPI112は、後述する通信インターフェイスを介して、HTTPプロトコルを使用して通信したり、HTTPプロトコル上で利用されるWebSocketプロトコルを使用して通信したりする。
メモリ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データ、クライアントAPPとデータをやり取りしながら常時接続サーバ200と通信するためのAPIデータを記憶する。APPデータは、アプリケーションサーバ300と情報を送受信するためのサービス接続情報を含む。APIデータは、WebSocketクライアントAPI設定情報と、認証情報と、接続先サービス設定情報と、接続状態情報とを含む。
入出力部130は、ユーザからの命令を受け付けて、当該命令をCPU110に入力する。また、入出力部130は、CPU110からの信号に基づいて、文字や画像や音声を出力する。
家電制御回路150は、CPU110からの信号に基づいて、掃除機100A・エアコン100B・テレビ100Cなどの家電としてのクライアント100の各部(モータなど)を制御する。
通信インターフェイス160は、IEEE802.11a/b/g/n/acなどの無線LAN通信、ZigBee(登録商標)、BlueTooth(登録商標)、あるいは、イーサネット(登録商標)などの有線LANなどの通信モジュールによって実現される。通信インターフェイス160は、有線通信あるいは無線通信によって他の装置との間でデータをやり取りする。CPU110は、通信インターフェイス160を介して、他の装置からプログラム、制御命令、画像データ、テキストデータ、音声データなどを受信したり、他の装置に画像データ、テキストデータ、音声データなどを送信したりする。
<常時接続サーバ200のハードウェア構成>
次に、常時接続サーバ200のハードウェア構成の一態様について説明する。図3は、本実施の形態にかかる常時接続サーバ200のハードウェア構成を表わすブロック図である。
図3を参照して、常時接続サーバ200は、主たる構成要素として、CPU210と、メモリ220と、入出力部230と、通信インターフェイス260とを含む。常時接続サーバ200のハードウェア構成は、クライアント100のハードウェア構成と比較して、家電の各部を制御するための家電制御回路150を有さない点、CPU210の動作、メモリ220に格納されているデータに関して異なる。よって、以下では主に、CPU210の動作とメモリ220が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU210は、メモリ220あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、常時接続サーバ200の各部を制御する。具体的には、CPU210は、メモリ220に記憶されているプログラムを実行することによって、後述するWSサーバコア212(図13を参照。)として動作する。WSサーバコア212は、ソフトウェアとしての常時接続サーバのことを言い、WebSocketプロトコルを使用してクライアント100との常時接続通信を制御したり、HTTPプロトコルを使用して第1の補助サーバ400、第2の補助サーバ500、複数のアプリケーションサーバ300との通信を制御したりする。
メモリ220は、CPU210によって実行されるプログラムや、CPU210によるプログラムの実行により生成されたデータ、入出力部230を介して入力されたデータ、サービスマスタ情報、一時認証情報、接続状態管理情報、接続グループ情報、接続グループ参加情報などを記憶する。
<アプリケーションサーバ300のハードウェア構成>
次に、アプリケーションサーバ300のハードウェア構成の一態様について説明する。図4は、本実施の形態にかかるアプリケーションサーバ300のハードウェア構成を表わすブロック図である。
図4を参照して、アプリケーションサーバ300は、主たる構成要素として、CPU310と、メモリ320と、入出力部330と、通信インターフェイス360とを含む。アプリケーションサーバ300のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU310の動作、メモリ320に格納されているデータに関して異なる。よって、以下では主に、CPU310の動作と、メモリ320が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU310は、メモリ320あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、アプリケーションサーバ300の各部を制御する。具体的には、CPU310は、メモリ320に記憶されているプログラムを実行することによって、後述するサーバAPPおよびサーバAPI312(図13を参照。)として動作する。
サーバAPPは、ソフトウェアとしてのアプリケーションサーバのことを言い、クライアント100やスマートフォンなどにサービスを提供する。サーバAPI312は、HTTPプロトコルを利用して、第2の補助サーバ500または常時接続サーバ200との通信を制御する。
メモリ320は、CPU310によって実行されるプログラムや、CPU310によるプログラムの実行により生成されたデータ、入出力部330を介して入力されたデータ、アプリケーションサーバ300として動作するAPPデータ、サーバAPPとデータをやり取りしながら常時接続サーバ200と通信するためのAPIデータを記憶する。APPデータは、自身が管理すべきクライアント100に関する情報を含むクライアント情報と、常時接続中のクライアント100との接続に関するクライアント接続情報と、新たに常時接続を開始するための接続確率テンポラリ情報とを含む。APIデータは、WebSocketサーバAPI設定情報と、認証管理情報と、サービス設定情報と、クライアント接続状態情報とを含む。
<第1の補助サーバ400のハードウェア構成>
次に、第1の補助サーバ400のハードウェア構成の一態様について説明する。図5は、本実施の形態にかかる第1の補助サーバ400のハードウェア構成を表わすブロック図である。
図5を参照して、第1の補助サーバ400は、主たる構成要素として、CPU410と、メモリ420と、入出力部430と、通信インターフェイス460とを含む。第1の補助サーバ400のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU410の動作、メモリ420に格納されているデータに関して異なる。よって、以下では主に、CPU410の動作と、メモリ420が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU410は、メモリ420あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、第1の補助サーバ400の各部を制御する。具体的には、CPU410は、メモリ420に記憶されているプログラムを実行することによって、ノードリスト提供機能を実現する。たとえば、CPU110は、サービス/ノード対応関係DB600を参照することによってノードリストを作成する。また、CPU110は、通信インターフェイス460を介して、作成されたノードリストをクライアント100に送信する。
メモリ420は、CPU410によって実行されるプログラムや、CPU410によるプログラムの実行により生成されたデータ、入出力部430を介して入力されたデータなどを記憶する。
<サービス/ノード対応関係DB>
次に、本実施の形態にかかるネットワークシステム1で利用されるサービス/ノード対応関係DB600について説明する。図6は、本実施の形態にかかるサービス/ノード対応関係DB600に含まれるデータの構造を示すイメージ図である。
図6を参照して、サービス/ノード対応関係DB600は、アプリケーションサーバ300が提供するサービスと常時接続サーバ200のノードに関する情報との対応関係620を含む。
ここで、ノードに関する情報は、常時接続サーバ200のアドレスであってもよいし、常時接続サーバ200を特定するIDであってもよい。ノードに関する情報が、常時接続サーバ200を特定するIDである場合には、サービス/ノード対応関係DB600Bは、常時接続サーバ200を特定するIDと常時接続サーバ200のアドレスとの対応関係も記憶する。
これによって、第1の補助サーバ400が、サービス/ノード対応関係DB600を参照することにより、クライアント100からの要求に応じてクライアント100が利用しようとするサービスに対応するノードのリストを作成することができる。本実施の形態においては、第1の補助サーバ400は、クライアント100から指定されたサービスに対応する常時接続サーバ200のアドレスをサービス/ノード対応関係DB600から抽出することによって、ノードリストを作成する。
そして、第1の補助サーバ400は、ノードリストとして、たとえば、"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。
<第2の補助サーバ500のハードウェア構成>
次に、第2の補助サーバ500のハードウェア構成の一態様について説明する。図7は、本実施の形態にかかる第2の補助サーバ500のハードウェア構成を表わすブロック図である。
図7を参照して、第2の補助サーバ500は、主たる構成要素として、CPU510と、メモリ520と、入出力部530と、通信インターフェイス560とを含む。第2の補助サーバ500のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU510の動作、メモリ520に格納されているデータに関して異なる。よって、以下では主に、CPU510の動作と、メモリ520が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU510は、メモリ520あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、第2の補助サーバ500の各部を制御する。具体的には、CPU510は、メモリ520に記憶されているプログラムを実行することによって、後述するデータ割り振り機能511(図13を参照。)を実現する。
メモリ520は、CPU510によって実行されるプログラムや、CPU510によるプログラムの実行により生成されたデータ、入出力部530を介して入力されたデータなどを記憶する。
<接続ID/ノード対応関係DB>
次に、本実施の形態にかかるネットワークシステム1で利用される接続ID/ノード対応関係DB700について説明する。図8は、本実施の形態にかかる接続ID/ノード対応関係DB700に含まれるデータの構造を示すイメージ図である。
図8を参照して、接続ID/ノード対応関係DB700は、常時接続においてクライアント100を特定するための接続IDと常時接続サーバ200が実現するノードとの対応関係720を含む。これによって、第2の補助サーバ500は、複数のクライアント100の各々がどの常時接続サーバ200と常時接続しているかを認識することができる。つまり、第2の補助サーバ500は、接続ID/ノード対応関係DB700を参照することによって、アプリケーションサーバ300からのクライアント100へのPUSHデータをどの常時接続サーバ200に割り振るべきか特定することができる。
<監視サーバ800のハードウェア構成>
次に、監視サーバ800のハードウェア構成の一態様について説明する。図9は、本実施の形態にかかる監視サーバ800(800B,800C,800D,800E)のハードウェア構成を表わすブロック図である。
図9を参照して、監視サーバ800は、主たる構成要素として、CPU810と、メモリ820と、入出力部830と、通信インターフェイス860とを含む。監視サーバ800のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU810の動作、メモリ820に格納されているデータに関して異なる。よって、以下では主に、CPU810の動作と、メモリ820が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU810は、メモリ820あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、監視サーバ800の各部を制御する。具体的には、CPU810は、メモリ820に記憶されているプログラムを実行することによって、複数の常時接続サーバ200の各々の接続クライアントの個数、PUSH頻度、送信データ量、負荷などを測定したり取得したりする。そして、CPU810は、複数の常時接続サーバ200の各々の接続クライアントの個数、PUSH頻度、送信データ量、負荷などが所定値を超えているか否かを判断する。CPU810は、複数の常時接続サーバ200の各々の接続クライアントの個数、PUSH頻度、送信データ量、負荷などが所定値を超えている場合、サービス/ノード対応関係DB600におけるサービスとノードとの組み合わせを変更する。
メモリ520は、CPU510によって実行されるプログラムや、CPU510によるプログラムの実行により生成されたデータ、入出力部530を介して入力されたデータなどを記憶する。
<常時接続開始に関するネットワークシステム1の機能構成>
次に、本実施の形態にかかる常時接続開始に関するネットワークシステム1全体の機能構成について説明する。図10は、第1の実施の形態にかかるネットワークシステム1全体の機能構成を示す第1のブロック図である。図11は、第1の実施の形態にかかるネットワークシステム1全体の機能構成を示す第2のブロック図である。図12は、第1の実施の形態にかかるネットワークシステム1全体の機能構成を示す第3のブロック図である。
図10を参照して、クライアント100A〜100Cの各々は、常時接続を開始する際に、HTTPプロトコルを利用して、第1の補助サーバ400にノードリストを要求する。具体的には、第1のサービスを利用しようとするクライアント100Aは、第1のサービスを特定するサービスIDを第1の補助サーバ400に送信する。
第1の補助サーバ400は、サービス/ノード対応関係DB600を参照して、第1のサービスに関するノードリストを作成する。ノードリストは、第1のサービスに対応する常時接続サーバ200のアドレスを含む。第1の補助サーバ400は、ノードリストをクライアント100Aに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。
図11に示すように、クライアント100Aは、ノードリストを参照して、第1のサービスに対応する常時接続サーバ200Aに接続を試みる。常時接続の開始時の処理については、後述する。
同様にして、図10を参照して、第2のサービスを利用しようとするクライアント100Bは、第2のサービスを特定するサービスIDを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600を参照して、第2のサービスに関するノードリストを作成する。ノードリストは、第2のサービスに対応する常時接続サーバ200のアドレスを含む。第1の補助サーバ400は、ノードリストをクライアント100Bに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example03.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。図11に示すように、クライアント100Bは、ノードリストを参照して、第2のサービスに対応する常時接続サーバ200Dに接続を試みる。常時接続の開始時の処理については、後述する。
同様にして、図10を参照して、第3のサービスを利用しようとするクライアント100Cは、第3のサービスを特定するサービスIDを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600を参照して、第3のサービスに関するノードリストを作成する。ノードリストは、第3のサービスに対応する常時接続サーバ200のアドレスを含む。第1の補助サーバ400は、ノードリストをクライアント100Cに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example04.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。図11に示すように、クライアント100Cは、ノードリストを参照して、第3のサービスに対応する常時接続サーバ200Cに接続を試みる。常時接続の開始時の処理については、後述する。
このようにして、複数のクライアント100の各々は、自身が利用するサービスに対応する常時接続サーバ200との常時接続を確立する。たとえば、図12に示すように、複数のクライアント100A〜100Gの各々が、複数の常時接続サーバ200のうちのクライアント100A〜100Gの各々が利用するサービスに対応する常時接続サーバ200との常時接続を確立する。
ここでは、第1のサービスに第1の常時接続サーバ200Aと第2の常時接続サーバ200Bとが対応付けられている。そして、第1のサービスを利用するクライアント100A,100D,100Eが、第1の常時接続サーバ200Aまたは第2の常時接続サーバ200Bのいずれかと常時接続する。これによって、第1のサービスを提供するアプリケーションサーバ300Aは、第1の常時接続サーバ200Aまたは第2の常時接続サーバ200Bを介して、クライアント100A,100D,100EにデータをPUSHすることができる。
同様に、第2のサービスに第3の常時接続サーバ200Cと第4の常時接続サーバ200Dとが対応付けられている。そして、第2のサービスを利用するクライアント100B,100Fが、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dのいずれかと常時接続する。これによって、第2のサービスを提供するアプリケーションサーバ300Bは、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dを介して、クライアント100B,100FにデータをPUSHすることができる。
同様に、第3のサービスに第3の常時接続サーバ200Cと第4の常時接続サーバ200Dとが対応付けられている。そして、第3のサービスを利用するクライアント100C,100Gが、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dのいずれかと常時接続する。これによって、第3のサービスを提供するアプリケーションサーバ300Cは、第3の常時接続サーバ200Cまたは第4の常時接続サーバ200Dを介して、クライアント100C,100GにデータをPUSHすることができる。
<常時接続に関する装置間のデータのやり取り>
ここで、本実施の形態にかかるネットワークシステム1における常時接続に関する装置間のデータのやり取りについて詳細に説明する。なお、図13は、本実施の形態にかかるネットワークシステム1における常時接続に関する装置間のデータのやり取りの処理手順を示すシーケンス図である。
図13を参照して、クライアント100によって実現されるクライアントAPI112は、HTTPプロトコルを使用して、通信インターフェイス160を介して、アプリケーションサーバ300に認証情報を要求する(ステップS002)。このとき、クライアントAPI112は、アプリケーションサーバ300に、認証に利用されるクライアントIDを送信する。アプリケーションサーバ300のサーバAPI312は、当該要求に応じてHTTPプロトコルを使用して、通信インターフェイス360を介してクライアント100に認証情報を送信する(ステップS004)。
サーバAPI312は、通信インターフェイス360を介して、常時接続サーバ200にも認証情報を送信する(ステップS006)。常時接続サーバ200のWSサーバコア212は、アプリケーションサーバ300から受信した認証情報を保存する(ステップS008)。
クライアント100は、第1の補助サーバ400からノードリストを取得する(ステップS009)。より詳細には、クライアント100は、HTTPプロトコルを利用して、第1の補助サーバ400にサービスIDを送信する。第1の補助サーバ400は、サービス/ノード対応関係DBを参照して、サービスに対応するノードリストを作成し、当該ノードリストをクライアント100に送信する。クライアント100は、ノードリストから1つの常時接続サーバ200を選択する。
クライアント100に選択された常時接続サーバ200とクライアント100とは、HTTPプロトコルを使用して、WebSocketを利用した常時接続状態を確立する(ステップS010、ステップS012)。具体的には、クライアントAPI112は、HTTPプロトコルを使用して、通信インターフェイス160を介して常時接続サーバ200にハンドシェイク要求を送る。WSサーバコア212は、通信インターフェイス260を介してクライアント100にハンドシェイク応答を返す。これによって、クライアント100と常時接続サーバ200との間で、WebSocketプロトコルによる常時接続が有効になる。
クライアントAPI112は、通信インターフェイス160を介して認証情報を常時接続サーバ200に送信する(ステップS014)。WSサーバコア212は、クライアント100からの認証情報と予め保存している認証情報とに基づいて、クライアント100を認証する(ステップS016)。認証に成功すると、WSサーバコア212は、アプリケーションサーバ300がクライアント100を識別するための接続IDを発行する(ステップS018)。
すなわち、WSサーバコア212は、常時接続中のクライアント100と接続IDとの対応関係を、接続状態管理情報として記憶する。クライアント100は、接続IDを受信して、記憶する(ステップS020)。アプリケーションサーバ300も、接続IDを受信して、記憶する(ステップS022)。このとき、WSサーバコア212は、通信インターフェイス260を介して、接続IDと常時接続サーバ200を特定する情報(ノードに関する情報)とアプリケーションサービスを特定する情報との対応関係を接続ID/ノード対応関係DB700に登録する。
その後、サーバAPI312は、サーバAPP311からの要求に応じて、データ本体と送り先のクライアント100を特定するための接続IDとを通信インターフェイス360を介して常時接続サーバ200に送信する(ステップS032)。
本実施の形態においては、ステップS033として、アプリケーションサーバ300からのデータは、第2の補助サーバ500が受信する。第2の補助サーバ500の割り振り機能511は、接続ID/ノード対応関係DB700を参照して、送信先のクライアント100に対応する常時接続サーバ200を特定する。第2の補助サーバ500のCPU510は、通信インターフェイス560を介して、特定された常時接続サーバ200にデータを送信する。
常時接続サーバ200は、第1の補助サーバ400からデータ本体と接続IDとを受信する(ステップS034)。WSサーバコア212は、接続状態管理情報を参照して、接続IDに基づいてクライアント100を特定する(ステップS036)。WSサーバコア212は、通信インターフェイス260を介して、データ本体をクライアント100にPUSH送信する(ステップS038)。
クライアント100は、データ本体を受信する(ステップS040)。クライアント100は、WebSocketプロトコルを使用して、受信結果を常時接続サーバ200に送信する(ステップS042)。常時接続サーバ200は、受信結果を受信すると、当該受信結果をアプリケーションサーバ300に送信する(ステップS044)。アプリケーションサーバ300は、受信結果を受信する(ステップS046)。
<サービス/ノード対応関係の変更に関するネットワークシステム1の機能構成>
次に、本実施の形態にかかるサービス/ノード関係の変更に関するネットワークシステム1全体の機能構成について説明する。図14は、第1の実施の形態にかかるネットワークシステム1全体の機能構成を示す第4のブロック図である。図15は、第1の実施の形態にかかるネットワークシステム1全体の機能構成を示す第5のブロック図である。
図14を参照して、第1のサービスに対応する第1の常時接続サーバ200Aと第2の常時接続サーバ200Bが多くのクライアント100と常時接続し、第2のサービスに対応する第3の常時接続サーバ200Cと第4の常時接続サーバ200Dとが少ないクライアント100と常時接続する場合がある。換言すれば、第1のサービスに対応する常時接続サーバ200一台当たりの常時接続中のクライアント100の個数と、第2のサービスに対応する常時接続サーバ200一台当たりの常時接続中のクライアント100の個数とが大きく異なる場合がある。
本実施の形態にかかる監視サーバ800は、接続ID/ノード対応関係DB700を参照することによって、接続中のクライアント100の個数が常時接続サーバ200によって大きく異なっているか否かを判断する。そして、監視サーバ800は、判断結果に基づいて、接続中のクライアントの個数が常時接続サーバ200間で大きく異ならないように、サービス/ノードの対応関係を変更する。
たとえば、監視サーバ800は、複数の常時接続サーバ200毎に接続中のクライアント100の個数が所定値よりも多いか否かを判断してもよい。そして、いずれかの常時接続サーバ200の接続中のクライアントの個数が所定値よりも多い場合に、監視サーバ800は、サーバ/ノード対応関係D600において、接続中のクライアントの個数が所定値よりも多い第1の常時接続サーバ200Aに対応するサービスに対応する常時接続サーバ200を増やす。具体的には、接続中のクライアント100の個数が少ない第3の常時接続サーバ200Cに対応するサービスを、接続中のクライアントの個数が所定値よりも多い第1の常時接続サーバ200Aに対応するサービスへと変更する。あるいは、監視サーバ800は、休止中の常時接続サーバ200を起動させて、当該常時接続サーバ200に対応するサービスを接続中のクライアントの個数が所定値よりも多い第1の常時接続サーバ200Aに対応するサービスに設定する。
あるいは、監視サーバ800は、接続中のクライアント100の個数が多い第1の常時接続サーバ200Aと、接続中のクライアント100の個数が少ない第3の常時接続サーバ200とに関して、第1の常時接続サーバ200の接続中のクライアントの個数が第3の常時接続サーバ200Cの接続中のクライアント100の個数の2倍以上であるか否かを判断してもよい。そして、第1の常時接続サーバ200Aの接続中のクライアントの個数が第3の常時接続サーバ200Cの接続中のクライアント100の個数の2倍以上である場合に、監視サーバ800は、サーバ/ノード対応関係D600において、第3の常時接続サーバ200Cに対応するサービスに対応する常時接続サーバ200を減らし、第1の常時接続サーバ200Aに対応するサービスに対応する常時接続サーバ200を増やしてもよい。
これによって、図15に示すように、第1のサービスを利用するクライアント100が第3の常時接続サーバ200Cの方に流れ、第2および第3のサービスを利用するクライアント100が第4の常時接続サーバ200Dに集まる。すなわち、人気のサービス(たとえば、第1のサービス)に対応する常時接続サーバ200(たとえば、第1の常時接続サーバ200Aと第2の常時接続サーバ200B)だけ、接続中のクライアント100の個数が増え過ぎることを防止することができる。
<クライアントにおけるノード選択処理>
次に、本実施の形態にかかるクライアント100におけるノード選択処理について説明する。図16は、本実施の形態にかかるクライアント100におけるノード選択処理を示すフローチャートである。
図16を参照して、CPU110は、メモリ120に格納されているプログラムに含まれる指示に基づいて、以下の処理を実行する。CPU110は、サービスを利用するための常時接続を開始する際に、当該サービスを特定する情報、たとえばサービスID、を含むノードリスト要求を通信インターフェイス160を介して第1の補助サーバ400に送信する(ステップS102)。CPU110は、通信インターフェイス160を介して、第1の補助サーバ400からノードリストを受信したか否かを判断する(ステップS104)。CPU110は、第1の補助サーバ400からノードリストを受信していないとき(ステップS104にてNOの場合)、ステップS102からの処理を繰り返す。
CPU110は、第1の補助サーバ400からノードリストを受信したとき(ステップS104にてYESである場合)、当該ノードリストから1つの常時接続サーバ200を選択する(ステップS106)。CPU110は、Webソケットプロトコルを利用して、通信インターフェイス160を介して、選択された常時接続サーバ200との常時接続を開始する(ステップS108)。すなわち、CPU110は、図13におけるステップS010からの処理を実行する。
<第1の補助サーバ400におけるノードリスト提供処理>
次に、本実施の形態にかかる第1の補助サーバ400におけるノードリスト提供処理について説明する。図17は、本実施の形態にかかるクライアント100におけるノードリスト提供処理を示すフローチャートである。
図17を参照して、CPU410は、メモリ420に格納されているプログラムに含まれる指示に基づいて、以下の処理を実行する。CPU410は、通信インターフェイス460を介して、クライアント100からのノードリスト要求を受け付けたか否かを判断する(ステップS202)。CPU410は、クライアント100からノードリスト要求を受信するまで(ステップS202にてNOの場合)、ステップS202の処理を繰り返す。
CPU410は、クライアント100からのノードリスト要求を受信すると(ステップS202にてYESである場合)、サービス/ノード対応関係DB600を参照することによって、ノードリスト要求に含まれるサービスIDに対応する常時接続サーバ200のアドレスのリストをノードリストとして作成する(ステップS204)。CPU410は、通信インターフェイス460を介して、ノードリストをクライアント100に送信する(ステップS206)。
<監視サーバ800におけるサービス/ノード対応関係変更処理>
次に、本実施の形態にかかる監視サーバ800におけるサービス/ノード対応関係変更処理について説明する。図18は、本実施の形態にかかる監視サーバ800における対応関係変更処理を示すフローチャートである。
図18を参照して、CPU810は、メモリ820に格納されているプログラムに含まれる指示に基づいて、以下の処理を実行する。CPU810は、図示しない時計を参照して、前回の対応関係の変更の要否の判断時から所定時間が経過したか否かを判断する(ステップS302)。CPU810は、所定時間が経過するまで(ステップS302にてNOの場合)、ステップS302の処理を繰り返す。
CPU810は、所定時間が経過した場合(ステップS302にてYESである場合)、接続ID/ノード対応関係DB700のデータを取得する(ステップS304)。CPU810は、サービスと常時接続サーバ200と対応関係を変更する必要があるか否かを判断する(ステップS306)。ここでは、CPU810は、接続中のクライアント100の個数が多過ぎる常時接続サーバ200が無いか否かを判断する。ただし、後述するように、CPU810は、1つの常時接続サーバ200当たりのPUSH頻度、1つの常時接続サーバ200当たりの送信データ量、1つの常時接続サーバ200当たりの負荷などに基づいて、対応関係の変更の要否を判断しても良い。
CPU810は、サービスと常時接続サーバ200と対応関係を変更する必要がないと判断した場合(ステップS308にてNOである場合)、ステップS302からの処理を繰り返す。
CPU810は、サービスと常時接続サーバ200と対応関係を変更する必要があると判断した場合(ステップS308にてYESである場合)、通信インターフェイス160を介して、サービス/ノード対応関係DB600におけるサービスIDと常時接続サーバ200との対応関係を変更する(ステップS310)。CPU810は、ステップS302からの処理を繰り返す。
このように、本実施の形態にかかるネットワークシステム1では、アプリケーションサーバ300またはサービスと常時接続サーバ200とが対応づけられているため、一部のアプリケーションサーバ300または一部のサービスのみに関する常時接続サーバ200をメンテナンスしたり、一部のアプリケーションサーバ300または一部のサービスのみの常時接続サーバ200のスペックを高くしたり、一部のアプリケーションサーバ300または一部のサービスのみに対応する常時接続サーバ200を増やしたり減らしたりすることができる。
また、動的に、アプリケーションサーバ300またはサービスと常時接続サーバ200との関係を変更することができるため、人気のサービスのみにアクセスが集中することによってクライアント100がサービスを利用できなくなる可能性や、常時接続によるデータの送受信がスムーズに行えなくなる可能性を低減することができる。つまり、本実施の形態にかかるネットワークシステム1では、サービス毎に常時接続サーバ200をメンテナンスすることを可能にしつつ、一部の常時接続サーバ200のみに負荷が集中する可能性を低減することができる。
<第2の実施の形態>
次に、第2の実施の形態について説明する。第1の実施の形態にかかるネットワークシステム1は、単純にサービス/ノードの対応関係を利用するものであった。しかしながら、本実施の形態にかかるネットワークシステム1は、サービスと課金の有無とで常時接続サーバ200が異なるものである。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続に関する装置間のデータのやり取りとに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード対応関係DB>
まず、本実施の形態にかかるネットワークシステム1で利用されるサービス/ノード対応関係DB600Bについて説明する。なお、図19は、第2の実施の形態にかかるネットワークシステム1全体の機能構成を示すブロック図である。
図19を参照して、サービス/ノード対応関係DB600Bは、アプリケーションサーバ300が提供するサービスと常時接続サーバ200が実現するノードに関する情報と有料サービスか否かを示す情報との対応関係620Bを含む。さらに、サービス/ノード対応関係DB600Bは、クライアントを特定するための情報、すなわちクライアントIDと課金の有無を示す情報との対応関係620Cも含む。
なお、ここでのノードに関する情報は、常時接続サーバ200のアドレスであってもよいし、常時接続サーバ200を特定するIDであってもよい。ノードに関する情報が、常時接続サーバ200を特定するIDである場合には、サービス/ノード対応関係DB600Bは、常時接続サーバ200を特定するIDと常時接続サーバ200のアドレスとの対応関係を記憶する。
これによって、第1の補助サーバ400は、クライアント100からの要求に応じて、クライアント100が利用しようとするサービスに対応するノードのリストを作成することができる。本実施の形態においては、第1の補助サーバ400は、クライアント100から指定されたサービスに対応する常時接続サーバ200のアドレスのリストを、サービス/ノード対応関係DB600Bから抽出する。
<常時接続開始に関するネットワークシステム1の機能構成>
次に、本実施の形態にかかる常時接続開始に関するネットワークシステム1全体の機能構成について説明する。
図19を参照して、クライアント100A〜100Cの各々は、HTTPプロトコルを利用して、第1の補助サーバ400にノードリストを要求する。具体的には、有料の第1のサービスを利用しようとするクライアント100Aは、第1のサービスを特定するサービスIDとクライアントIDとを第1の補助サーバ400に送信する。
第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Cを参照して、クライアントIDに基づいて課金サービスか否かを判断する。第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Bを参照して、サービスIDと課金の有無とに基づいて、第1のサービスのうちの有料サービス用のノードリストを作成する。第1の補助サーバ400は、ノードリストをクライアント100Aに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。
クライアント100Aは、ノードリストを参照して、有料の第1のサービスに対応する常時接続サーバ200Aに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
同様にして、無料の第1のサービスを利用しようとするクライアント100Bは、第1のサービスを特定するサービスIDとクライアントIDとを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Cを参照して、クライアントIDに基づいて課金サービスか否かを判断する。第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Bを参照して、サービスIDと課金の有無とに基づいて、第1のサービスのうちの無料サービス用のノードリストを作成する。
第1の補助サーバ400は、ノードリストをクライアント100Bに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example03.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。クライアント100Bは、ノードリストを参照して、無料の第1のサービスに対応する常時接続サーバ200Dに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
同様にして、無料の第2のサービスを利用しようとするクライアント100Cは、第2のサービスを特定するサービスIDとクライアントIDとを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Cを参照して、クライアントIDに基づいて課金サービスか否かを判断する。第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Bを参照して、サービスIDと課金の有無とに基づいて、第2のサービスのうちの無料サービス用のノードリストを作成する。第1の補助サーバ400は、ノードリストをクライアント100Cに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example04.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。クライアント100Cは、ノードリストを参照して、無料の第2のサービスに対応する常時接続サーバ200Dに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
このようにして、複数のクライアント100の各々は、利用するサービスに対応する常時接続サーバ200との常時接続を確立する。常時接続開始後の機能および処理は、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
換言すれば、第1の実施に形態における第1のサービスが本実施の形態における有料の第1のサービスに対応し、第1の実施に形態における第2のサービスが本実施の形態における無料の第1のサービスに対応し、第1の実施に形態における第3のサービスが本実施の形態における無料の第2のサービスに対応している。
<第3の実施の形態>
次に、第3の実施の形態について説明する。第1の実施の形態にかかるネットワークシステム1は、クライアント100が第1の補助サーバ400にサービスIDを送るものであった。そして、第1の補助サーバ400が、サービスIDに対応するノードリストを作成するものであった。しかしながら、本実施の形態においては、クライアント100は、サービスIDを送らずに、クライアントIDを送る。すなわち、第1の補助サーバ400が、クライアントIDに対応するサービスを特定して、当該サービスに対応するノードリストを作成するものである。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続に関する装置間のデータのやり取りとに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード対応関係DB>
まず、本実施の形態にかかるネットワークシステム1で利用されるサービス/ノード対応関係DB600Cについて説明する。なお、図20は、第3の実施の形態にかかるネットワークシステム1全体の機能構成を示すブロック図である。
図20を参照して、サービス/ノード対応関係DB600Cは、アプリケーションサーバ300が提供するサービスと常時接続サーバ200が実現するノードに関する情報との対応関係620を含む。さらに、サービス/ノード対応関係DB600Cは、クライアントを特定するための情報、すなわちクライアントIDとアプリケーションサーバ300が提供するサービスとの対応関係620Dも含む。
なお、ここでのノードに関する情報は、常時接続サーバ200のアドレスであってもよいし、常時接続サーバ200を特定するIDであってもよい。ノードに関する情報が、常時接続サーバ200を特定するIDである場合には、サービス/ノード対応関係DB600Cは、常時接続サーバ200を特定するIDと常時接続サーバ200のアドレスとの対応関係を記憶する。
これによって、第1の補助サーバ400は、クライアント100からの要求に応じて、クライアント100が利用しようとするサービスに対応するノードのリストを作成することができる。本実施の形態においては、第1の補助サーバ400は、クライアント100が利用するサービスに対応する常時接続サーバ200のアドレスのリストを、サービス/ノード対応関係DB600Cから抽出する。
<常時接続開始に関するネットワークシステム1の機能構成>
次に、本実施の形態にかかる常時接続開始に関するネットワークシステム1全体の機能構成について説明する。
図20を参照して、クライアント100A〜100Cの各々は、HTTPプロトコルを利用して、第1の補助サーバ400にノードリストを要求する。具体的には、第1のサービスを利用しようとするクライアント100Aは、クライアントを特定するためのクライアントIDを第1の補助サーバ400に送信する。
第1の補助サーバ400は、サービス/ノード対応関係DB600Cの対応関係620Dを参照して、クライアントIDに対応するサービスIDを特定する。そして、第1の補助サーバ400は、サービス/ノード対応関係DB600Cの対応関係620を参照して、当該サービスIDに対応するノードリストを作成する。第1の補助サーバ400は、ノードリストをクライアント100Aに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo","ws://example03.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。
クライアント100Aは、ノードリストを参照して、第1のサービスに対応する常時接続サーバ200Aに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
同様にして、第2のサービスを利用しようとするクライアント100Bは、クライアントIDを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600Cの対応関係620Dを参照して、クライアントIDに対応するサービスIDを特定する。第1の補助サーバ400は、サービス/ノード対応関係DB600Cの対応関係620を参照して、当該サービスIDに対応するノードリストを作成する。第1の補助サーバ400は、ノードリストをクライアント100Bに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example04.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。クライアント100Bは、ノードリストを参照して、第2のサービスに対応する常時接続サーバ200Dに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
同様にして、第3のサービスを利用しようとするクライアント100Cは、クライアントIDを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600Bの対応関係620Dを参照して、クライアントIDに対応するサービスIDを特定する。第1の補助サーバ400は、サービス/ノード対応関係DB600Cの対応関係620を参照して、当該サービスIDに対応するノードリストを作成する。ここでは、ノードリストは、第3のサービスに対応する第5の常時接続サーバ(図示せず。)のアドレスを含む。第1の補助サーバ400は、ノードリストをクライアント100Cに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example05.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。クライアント100Cは、ノードリストを参照して、第3のサービスに対応する第5の常時接続サーバに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
このようにして、複数のクライアント100は、複数の常時接続サーバ200との常時接続を確立する。常時接続開始後の機能および処理は、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<第4の実施の形態>
次に、第4の実施の形態について説明する。第2の実施の形態にかかるネットワークシステム1は、クライアント100が第1の補助サーバ400にサービスIDとクライアントIDとを送るものであった。そして、第1の補助サーバ400が、サービスIDとクライアントIDに対応するノードリストを作成するものであった。しかしながら、本実施の形態においては、クライアント100は、サービスIDを送らずに、クライアントIDを送る。すなわち、第1の補助サーバ400が、クライアントIDに対応するサービスを特定して、当該サービスに対応するノードリストを作成するものである。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続に関する装置間のデータのやり取りとに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード対応関係DB>
まず、本実施の形態にかかるネットワークシステム1で利用されるサービス/ノード対応関係DB600Cについて説明する。なお、図21は、第4の実施の形態にかかるネットワークシステム1全体の機能構成を示すブロック図である。
図21を参照して、サービス/ノード対応関係DB600Dは、アプリケーションサーバ300が提供するサービスと常時接続サーバ200が実現するノードに関する情報と有料サービスか否かを示す情報との対応関係620Bを含む。さらに、サービス/ノード対応関係DB600Dは、クライアントを特定するための情報、すなわちクライアントIDとアプリケーションサーバ300が提供するサービスと課金の有無を示す情報との対応関係620Eも含む。
なお、ここでのノードに関する情報は、常時接続サーバ200のアドレスであってもよいし、常時接続サーバ200を特定するIDであってもよい。ノードに関する情報が、常時接続サーバ200を特定するIDである場合には、サービス/ノード対応関係DB600Dは、常時接続サーバ200を特定するIDと常時接続サーバ200のアドレスとの対応関係を記憶する。
これによって、第1の補助サーバ400は、クライアント100からの要求に応じて、クライアント100が利用しようとするサービスに対応するノードのリストを作成することができる。本実施の形態においては、第1の補助サーバ400は、クライアント100が利用するサービスに対応する常時接続サーバ200のアドレスのリストを、サービス/ノード対応関係DB600Dから抽出する。
<常時接続開始に関するネットワークシステム1の機能構成>
次に、本実施の形態にかかる常時接続開始に関するネットワークシステム1全体の機能構成について説明する。
図21を参照して、クライアント100A〜100Cの各々は、HTTPプロトコルを利用して、第1の補助サーバ400にノードリストを要求する。具体的には、有料の第1のサービスを利用しようとするクライアント100Aは、クライアントを特定するためのクライアントIDを第1の補助サーバ400に送信する。
第1の補助サーバ400は、サービス/ノード対応関係DB600Dの対応関係620Eを参照して、クライアントIDに対応するサービスIDと課金の有無とを特定する。そして、第1の補助サーバ400は、サービス/ノード対応関係DB600Dの対応関係620Bを参照して、当該サービスIDと課金の有無に対応するノードリストを作成する。ここでは、ノードリストは、有料の第1のサービスに対応する第1の常時接続サーバ200Aのアドレスと、第2の常時接続サーバ200Bのアドレスとを含む。第1の補助サーバ400は、ノードリストをクライアント100Aに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example01.com:18080/cpush-server/echo","ws://example02.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。
クライアント100Aは、ノードリストを参照して、有料の第1のサービスに対応する常時接続サーバ200Aに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
同様にして、無料の第1のサービスを利用しようとするクライアント100Bは、クライアントIDを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600Dの対応関係620Eを参照して、クライアントIDに対応するサービスIDと課金の有無とを特定する。第1の補助サーバ400は、サービス/ノード対応関係DB600Dの対応関係620Bを参照して、当該サービスIDと課金の有無に対応するノードリストを作成する。ここでは、ノードリストは、無料の第1のサービスに対応する第3の常時接続サーバ200Cのアドレスを含む。第1の補助サーバ400は、ノードリストをクライアント100Bに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example03.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。クライアント100Bは、ノードリストを参照して、無料の第1のサービスに対応する常時接続サーバ200Cに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
同様にして、無料の第2のサービスを利用しようとするクライアント100Cは、クライアントIDを第1の補助サーバ400に送信する。第1の補助サーバ400は、サービス/ノード対応関係DB600Dの対応関係620Eを参照して、クライアントIDに対応するサービスIDと課金の有無とを特定する。第1の補助サーバ400は、サービス/ノード対応関係DB600Dの対応関係620Bを参照して、当該サービスIDと課金の有無とに対応するノードリストを作成する。ここでは、ノードリストは、無料の第2のサービスに対応する第4の常時接続サーバ200のアドレスを含む。第1の補助サーバ400は、ノードリストをクライアント100Cに送信する。たとえば、第1の補助サーバは、ノードリストとして、"handshakeUrl":["ws://example04.com:18080/cpush-server/echo"]というデータをクライアント100に送信する。クライアント100Cは、ノードリストを参照して、無料の第2のサービスに対応する常時接続サーバ200Dに接続を試みる。常時接続の開始処理については、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
このようにして、複数のクライアント100は、複数の常時接続サーバ200との常時接続を確立する。常時接続開始後の機能および処理は、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
換言すれば、第3の実施に形態における第1のサービスが本実施の形態における有料の第1のサービスに対応し、第3の実施に形態における第2のサービスが本実施の形態における無料の第1のサービスに対応し、第3の実施に形態における第3のサービスが本実施の形態における無料の第2のサービスに対応している。
<第5の実施の形態>
次に、第5の実施の形態について説明する。第1の実施の形態では、常時接続サーバ200と常時接続中のクライアント100の個数によって、サービスとノードとの対応関係を変更するものであった。しかしながら、第1の実施の形態において簡単に例示したが、本実施の形態にかかるネットワークシステム1は、常時接続サーバ200のPUSH頻度に基づいて、サービスとノードとの対応関係を変更するものである。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、サービス/ノード対応関係DB600と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続開始に関するネットワークシステム1の機能構成と、常時接続に関する装置間のデータのやり取りと、クライアントにおけるノード選択処理と、第1の補助サーバ400におけるノードリスト提供処理と、監視サーバ800における対応関係変更処理とに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード関係変更に関するネットワークシステム1の機能構成>
以下では、主に、サービス/ノード関係変更に関するネットワークシステム1の機能構成について説明する。図22は、第5の実施の形態にかかるネットワークシステム1全体の機能構成を示す第1のブロック図である。図23は、第5の実施の形態にかかるネットワークシステム1全体の機能構成を示す第2のブロック図である。
図22を参照して、第1のサービスに対応する第1の常時接続サーバ200Aと第2の常時接続サーバ200BとのデータPUSHの頻度が高く、第2のサービスに対応する第3の常時接続サーバ200Cと第4の常時接続サーバ200DとのデータPUSHの頻度が低い場合がある。それは、第1のサービスに対応する常時接続サーバ200のうちの一台当たりの常時接続中のクライアント100の個数が多く、第2のサービスに対応する常時接続サーバ200のうちの一台当たりの常時接続中のクライアント100の個数が少ないことが原因かもしれない。あるいは、第1のサービスが頻繁にデータのPUSHを必要とするものであって、第2のサービスは時々しかデータのPUSHを必要としないかもしれない。
本実施の形態においては、ネットワークシステム1が、サービスID毎の単位時間当たりのPUSH回数を格納する監視用DB900Bを含む。そして、本実施の形態にかかる監視サーバ800Bが、サービス毎のPUSH回数を参照することによって、サービス/ノードの対応関係の変更が必要か否かを判断する。
たとえば、監視サーバ800Bは、サービスID毎の単位時間当たりのPUSH回数を当該サービスに対応する常時接続サーバ200の個数で割る。そして、単位時間当たりの1つの常時接続サーバ200のPUSH回数が多いサービスに対応する常時接続サーバ200を増やし、単位時間当たりの1つの常時接続サーバ200のPUSH回数が少ないサービスに対応する常時接続サーバ200を減らすように、監視サーバ800Bはサービス/ノード対応関係DB600を更新する。すなわち、図23に示すように、監視サーバ800Bは、PUSH頻度が高かった第1のサービスに対応する常時接続サーバ200の個数を増やし、PUSH頻度が低かった第2のサービスに対応する常時接続サーバ200の個数を減らす。
なお、後述するように、監視サーバ800Bは、単位時間当たりの1つの常時接続サーバ200のPUSH回数が少ないサービスに対応する常時接続サーバ200のいずれかをスリープまたは電源OFFさせてもよい。これによって、ネットワークシステム1のランニングコストを低減することができる。
<第6の実施の形態>
第5の実施の形態においては、複数の常時接続サーバ200の各々のPUSH頻度に応じてサービスとノードとの対応関係を変更するものであった。しかしながら、第1の実施の形態において簡単に例示したが、本実施の形態のように、PUSH頻度の代わりに複数の常時接続サーバ200の各々がWebSocketプロトコルを利用して送信するデータ量に応じてサービスとノードとの対応関係を変更するものであってもよい。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、サービス/ノード対応関係DB600と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続開始に関するネットワークシステム1の機能構成と、常時接続に関する装置間のデータのやり取りと、クライアントにおけるノード選択処理と、第1の補助サーバ400におけるノードリスト提供処理と、監視サーバ800における対応関係変更処理とに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード関係変更に関するネットワークシステム1の機能構成>
以下では、主に、サービス/ノード関係変更に関するネットワークシステム1の機能構成について説明する。図24は、第6の実施の形態にかかるネットワークシステム1全体の機能構成を示す第1のブロック図である。図25は、第6の実施の形態にかかるネットワークシステム1全体の機能構成を示す第2のブロック図である。
図24を参照して、第1のサービスに対応する第1の常時接続サーバ200Aと第2の常時接続サーバ200Bからの送信データ量が多く、第2のサービスに対応する第3の常時接続サーバ200Cと第4の常時接続サーバ200Dからの送信データ量が少ない場合がある。それは、第1のサービスに対応する常時接続サーバ200のうちの一台当たりの常時接続中のクライアント100の個数が多く、第2のサービスに対応する常時接続サーバ200のうちの一台当たりの常時接続中のクライアント100の個数が少ないことが原因かもしれない。あるいは、第1のサービスが頻繁にデータのPUSHを必要とするものであって、第2のサービスは時々しかデータのPUSHを必要としないかもしれない。あるいは、第1のサービスが大容量のデータのPUSHを必要とするものであって、第2のサービスは小容量のデータのPUSHだけで足りるのかもしれない。
本実施の形態においては、ネットワークシステム1が、サービスID毎の単位時間当たりの送信データ量を格納する監視用DB900Cを含む。そして、本実施の形態にかかる監視サーバ800Cが、サービス毎の送信データ量を参照することによって、サービス/ノードの対応関係の変更が必要か否かを判断する。
たとえば、監視サーバ800Cは、サービスID毎の単位時間当たりの送信データ量を当該サービスに対応する常時接続サーバ200の個数で割る。そして、単位時間当たりの1つの常時接続サーバ200の送信データ量が多いサービスに対応する常時接続サーバ200を増やし、単位時間当たりの1つの常時接続サーバ200の送信データ量が少ないサービスに対応する常時接続サーバ200を減らすように、監視サーバ800Cはサービス/ノード対応関係DB600を更新する。すなわち、図25に示すように、監視サーバ800Cは、送信データ量が多かった第1のサービスに対応する常時接続サーバ200の個数を増やし、送信データ量が少なかった第2のサービスに対応する常時接続サーバ200の個数を減らす。
なお、後述するように、監視サーバ800Cは、単位時間当たりの1つの常時接続サーバ200の送信データ量が少ないサービスに対応する常時接続サーバ200のいずれかをスリープまたは電源OFFさせてもよい。これによって、ネットワークシステム1のランニングコストを低減することができる。
<第7の実施の形態>
第6の実施の形態においては、複数の常時接続サーバ200の各々の送信データ量に応じてサービスとノードとの対応関係を変更するものであった。しかしながら、第1の実施の形態において簡単に例示したが、本実施の形態のように、PUSH頻度の代わりに複数の常時接続サーバ200の各々にかかる負荷に応じてサービスとノードとの対応関係を変更するものであってもよい。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、サービス/ノード対応関係DB600と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続開始に関するネットワークシステム1の機能構成と、常時接続に関する装置間のデータのやり取りと、クライアントにおけるノード選択処理と、第1の補助サーバ400におけるノードリスト提供処理と、監視サーバ800における対応関係変更処理とに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード関係変更に関するネットワークシステム1の機能構成>
以下では、主に、サービス/ノード関係変更に関するネットワークシステム1の機能構成について説明する。図26は、第7の実施の形態にかかるネットワークシステム1全体の機能構成を示す第1のブロック図である。図27は、第7の実施の形態にかかるネットワークシステム1全体の機能構成を示す第2のブロック図である。
図26を参照して、第1のサービスに対応する第1の常時接続サーバ200Aと第2の常時接続サーバ200Bにかかる負荷が重く、第2のサービスに対応する第3の常時接続サーバ200Cと第4の常時接続サーバ200Dにかかる負荷が軽い場合がある。それは、第1のサービスに対応する常時接続サーバ200のうちの一台当たりの常時接続中のクライアント100の個数が多く、第2のサービスに対応する常時接続サーバ200のうちの一台当たりの常時接続中のクライアント100の個数が少ないことが原因かもしれない。あるいは、第1のサービスが頻繁にデータのPUSHを必要とするものであって、第2のサービスは時々しかデータのPUSHを必要としないかもしれない。あるいは、第1のサービスが大容量のデータのPUSHを必要とするものであって、第2のサービスは小容量のデータのPUSHだけで足りるのかもしれない。
本実施の形態においては、ネットワークシステム1が、サービスID毎の負荷を格納する監視用DB900Dを含む。そして、本実施の形態にかかる監視サーバ800Dが、サービス毎の負荷を参照することによって、サービス/ノードの対応関係の変更が必要か否かを判断する。
たとえば、監視サーバ800Dは、サービスID毎の負荷を当該サービスに対応する常時接続サーバ200の個数で割る。そして、1つの常時接続サーバ200の負荷が重いサービスに対応する常時接続サーバ200を増やし、1つの常時接続サーバ200の負荷が軽いサービスに対応する常時接続サーバ200を減らすように、監視サーバ800Dはサービス/ノード対応関係DB600を更新する。すなわち、図27に示すように、監視サーバ800Dは、負荷が重かった第1のサービスに対応する常時接続サーバ200の個数を増やし、負荷が軽かった第2のサービスに対応する常時接続サーバ200の個数を減らす。
なお、後述するように、監視サーバ800Dは、1つの常時接続サーバ200の負荷が軽いサービスに対応する常時接続サーバ200のいずれかをスリープまたは電源OFFさせてもよい。これによって、ネットワークシステム1のランニングコストを低減することができる。
<第8の実施の形態>
第1〜7の実施の形態においては、複数のサービスと複数の常時接続サーバ200と組み合わせを変更するものであった。しかしながら、第1の実施の形態において簡単に例示したが、本実施の形態のように、状況に応じて稼働する常時接続サーバ200の全体の個数を変更してもよい。すなわち、常時接続によるデータの送受信が少ないときに、複数の常時接続サーバ200の一部をスリープ状態または電源OFF状態にするものであってもよい。
なお、ネットワークシステムの全体構成と、クライアント100のハードウェア構成と、常時接続サーバ200のハードウェア構成と、アプリケーションサーバ300のハードウェア構成と、第1の補助サーバ400のハードウェア構成と、サービス/ノード対応関係DB600と、第2の補助サーバ500のハードウェア構成と、接続ID/ノード対応関係DB700と、監視サーバ800のハードウェア構成と、常時接続開始に関するネットワークシステム1の機能構成と、常時接続に関する装置間のデータのやり取りと、クライアントにおけるノード選択処理と、第1の補助サーバ400におけるノードリスト提供処理と、監視サーバ800における対応関係変更処理とに関しては、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
<サービス/ノード関係変更に関するネットワークシステム1の機能構成>
以下では、主に、サービス/ノード関係変更に関するネットワークシステム1の機能構成について説明する。図28は、第8の実施の形態にかかるネットワークシステム1全体の機能構成を示す第1のブロック図である。図29は、第8の実施の形態にかかるネットワークシステム1全体の機能構成を示す第2のブロック図である。
図28を参照して、5つの常時接続サーバ200A、200B,200C,200D,200Eのうちの、1つの常時接続サーバ200Eがスリープ状態になっている。すなわち、4つの常時接続サーバ200A,200B,200C,200Dによって、3つのサービスに関する常時接続処理を十分に賄えている。たとえば、4つの常時接続サーバ200A,200B,200C,200Dの各々について、接続中のクライアント100の個数が1000以下である。
監視サーバ800Dは、1つの常時接続サーバ200当たりの常時接続中のクライアント100の数、または1つの常時接続サーバ200当たりのPUSH頻度、または1つの常時接続サーバ200当たりの送信データ量、または1つの常時接続サーバ200当たりの負荷を監視している。そして、1つの常時接続サーバ200当たりの常時接続中のクライアント100の数が所定値を超えたり、または1つの常時接続サーバ200当たりのPUSH頻度が所定値を超えたり、または1つの常時接続サーバ200当たりの送信データ量が所定値を超えたり、または1つの常時接続サーバ200当たりの負荷が所定値を超えたりした場合に、監視サーバ800Dは、それまで待機していた第5の常時接続サーバ200Eを起動させる。
それと同時に、図29に示すように、監視サーバ800Dは、サービス/ノード対応関係DB600において、起動させた第5の常時接続サーバ200Eのノードを、常時接続中のクライアント100の数が所定値を超えた常時接続サーバ200に対応するサービスに対応付ける。あるいは、監視サーバ800Dは、サービス/ノード対応関係DB600において、起動させた第5の常時接続サーバ200Eのノードを、PUSH頻度が所定値を超えた常時接続サーバ200に対応するサービスに対応付ける。あるいは、監視サーバ800Dは、サービス/ノード対応関係DB600において、起動させた第5の常時接続サーバ200Eのノードを、送信データ量が所定値を超えた常時接続サーバ200に対応するサービスに対応付ける。あるいは、監視サーバ800Dは、サービス/ノード対応関係DB600において、起動させた第5の常時接続サーバ200Eのノードを、負荷が所定値を超えた常時接続サーバ200に対応するサービスに対応付ける。これによって、これ以降に、当該サービスの利用を試みるクライアント100が、第5の常時接続サーバ200Eと常時接続するようになる。
なお、第5の常時接続サーバ200は、ホットスタンバイ状態で待機するものであっても良いし、コールドスタンバイ状態で待機するものであってもよい。本実施の形態においては、第5の常時接続サーバ200を常時接続サーバノード群に加える際は、監視サーバ800Dが単にサービス/ノード対応関係を更新するだけとしている。しかしながら、第5の常時接続サーバ200を常時接続サーバノード群に加える際は、監視サーバ800Dが、サービス/ノード対応関係を更新しつつDNS(Domain Name System)サーバの常時接続サーバ200のアドレスも変更するものであってもよい。
逆に、1つの常時接続サーバ200当たりの常時接続中のクライアント100の数が別の所定値を下回ったり、または1つの常時接続サーバ200当たりのPUSH頻度が別の所定値を下回ったり、または1つの常時接続サーバ200当たりの送信データ量が別の所定値を下回ったり、または1つの常時接続サーバ200当たりの負荷が別の所定値を下回ったりすると、監視サーバ800Eは、人気が無いサービスに対応する常時接続サーバ200(たとえば、第5の常時接続サーバ200E)をスリープ状態に移行させたり、電源をOFFにしたりする。
図28に示すように、監視サーバ800Eは、サービス/ノード対応関係DB600において、スリープ状態または電源をOFFにした第5の常時接続サーバ200Eのノードとサービスとのレコードを削除する。
<第9の実施の形態>
第2および第4の実施の形態においては、課金の有無によって常時接続サーバ200を分けるものであった。
本実施の形態においては、それに加えて、有料サービスには高いスペックな常時接続サーバ200を対応付けて、無料サービスには通常の常時接続サーバ200を対応付けてもよい。これによって、有料サービスを利用するクライアント100は、よりスムーズな常時接続のデータ送受信を行うことができる。
<第10の実施の形態>
第2および第4の実施の形態においては、課金の有無によって常時接続サーバ200を分けるものであった。
本実施の形態においては、それに加えて、有料サービスには1つの常時接続サーバ200当たりの接続クライアントの個数の上限が低く、無料サービスには1つの常時接続サーバ200当たりの接続クライアントの個数の上限が高く、設定されてもよい。すなわち、監視サーバ800が、有料サービスに関しては、1つの常時接続サーバ200当たりの接続クライアントの個数が増えると、対応する常時接続サーバ200の個数を早めに増加させる。逆に、監視サーバ800は、無料サービスに関しては、1つの常時接続サーバ200当たりの接続クライアントの個数が増えても、対応する常時接続サーバ200の個数をなかなか増加させない。
あるいは、有料サービスには1つの常時接続サーバ200当たりの接続クライアントの個数の上限が設定されて、無料サービスには1つの常時接続サーバ200当たりの接続クライアントの個数の上限が設定されないものであってもよい。
<第11の実施の形態>
第1〜第10の実施の形態においては、第2の補助サーバ500が、アプリケーションサーバ300からのデータを常時接続サーバ200に割り振る際に、接続ID/ノード対応関係DB700を参照することによって、PUSH先のクライアント100と常時接続中の常時接続サーバ200にデータを割り振るものであった。
しかしながら、本実施の形態においては、第2の補助サーバ500が、アプリケーションサーバ300からのデータを常時接続サーバ200に割り振る際に、サービス/ノード対応関係DB600を参照して、アプリケーションサーバ300に対応する常時接続サーバ200のうちのいずれかにデータを割り振る。たとえば、第2の補助サーバ500は、アプリケーションサーバ300に対応する常時接続サーバ200のうちの負荷が少ない常時接続サーバ200にデータを割り振る。
そして、常時接続サーバ200のCPU210が、通信インターフェイス260を利用することによって、接続ID/ノード対応関係DB700を参照することによって、PUSH先のクライアント100と常時接続中の常時接続サーバ200にデータを転送する。当然に、常時接続サーバ200のCPU210は、自身と常時接続中のクライアント100に対しては、WebSocketプロトコルを利用することによって、通信インターフェイス260を介してデータを直接PUSHする。
<第12の実施の形態>
第1〜第11の実施の形態においては、第1の補助サーバ400が、クライアント100からのデータに基づいて、クライアント100が利用するサービスに対応する常時接続サーバ200のリストを作成するものであった。
しかしながら、第1の補助サーバ400は、全ての常時接続サーバ200のアドレスのリストをクライアント100に提供しても良い。たとえば、第1の補助サーバ400は、対応関係620(620B,620C,620D,620E)をクライアント100に送信する。そして、クライアント100のCPU110が、対応関係620を参照して、自身が利用するサービスに対応する常時接続サーバ200を選択する。このとき、CPU110は、一旦、ノードリストを作成してもよいし、しなくてもよい。CPU110は、WebSocketプロトコルを利用して、通信インターフェイス160を介して選択された常時接続サーバ200と常時接続を行う。
<第13の実施の形態>
第1〜第12の実施の形態においては、第1の補助サーバ400が、常時接続サーバ200とアプリケーションサーバ300とは別の装置であった。
しかしながら、第1の補助サーバ400が、常時接続サーバ200のいずれか、またはアプリケーションサーバ300のいずれかと同じ装置であってもよい。すなわち、常時接続サーバ200のいずれか、またはアプリケーションサーバ300のいずれかが、第1の補助サーバ400の役割を兼ねてもよい。
<第14の実施の形態>
第1〜第13の実施の形態においては、監視サーバ800が、常時接続サーバ200とアプリケーションサーバ300と第1の補助サーバ400とは別の装置であった。
しかしながら、監視サーバ800が、常時接続サーバ200のいずれか、またはアプリケーションサーバ300のいずれか、または第1の補助サーバ400と同じ装置であってもよい。すなわち、常時接続サーバ200のいずれか、またはアプリケーションサーバ300のいずれか、または第1の補助サーバ400が、監視サーバ800の役割を兼ねてもよい。
<第15の実施の形態>
第1〜第14の実施の形態においては、アプリケーションサーバ300が1つのサービスを提供し、1つのサービスは1つのアプリケーションサーバ300から提供されるものであった。
しかしながら、1つのサービスが、複数のアプリケーションサーバ300から提供されても良い。この場合も、第1〜第14の実施の形態と同じように、常時接続サーバ200が、アプリケーションサーバ300に対応付けられていても良いし、サービスに対応付けられても良い。
逆に、アプリケーションサーバ300が、複数のサービスに対応付けられていても良い。この場合も、第1〜第14の実施の形態と同じように、常時接続サーバ200が、アプリケーションサーバ300に対応付けられていても良いし、サービスに対応付けられても良い。
<第16の実施の形態>
第1〜第15の実施の形態においては、図10のステップS009に示すように、クライアント100と常時接続サーバ200とが常時接続を開始する際に、クライアント100が、認証情報とは別に、第1の補助サーバ400からサービスに対応するノードリストを取得するものであった。
しかしながら、クライアント100は、クライアント100と常時接続サーバ200とが常時接続を開始する際に、認証情報とは別に、常時接続サーバ200またはアプリケーションサーバ300からサービスに対応するノードリストを取得してもよい(図10におけるステップS009)。すなわち、常時接続サーバ200またはアプリケーションサーバ300が、第1の補助サーバ400の役割の一部を兼ねてもよい。
より詳細には、常時接続サーバ200またはアプリケーションサーバ300は、クライアント100からノードリストの要求を受けた際に、サービスに対応するノードリストを作成する役割とノードリストをクライアント100に提供する役割とを負っても良い。あるいは、クライアント100からノードリストの要求を受けた際に、第1の補助サーバ400がノードリストの作成を行い、常時接続サーバ200またはアプリケーションサーバ300が、第1の補助サーバ400からノードリストを取得して、当該ノードリストをクライアント100へ提供する役割を負っても良い。
<第17の実施の形態>
第1〜第15の実施の形態においては、図10のステップS009に示すように、クライアント100と常時接続サーバ200とが常時接続を開始する際に、クライアント100が、認証情報とは別に、第1の補助サーバ400からサービスに対応するノードリストを取得するものであった。
しかしながら、クライアント100と常時接続サーバ200とが常時接続を開始する際に、アプリケーションサーバ300が、認証情報と共に、サービスに対応するノードリストをクライアント100に送信しても良い(図10におけるステップS004)。この場合は、図10におけるステップS009が不要である。
より詳細には、アプリケーションサーバ300は、クライアント100から認証情報の要求を受けた際に、サービスに対応するノードリストを作成する役割とノードリストをクライアント100に提供する役割とを負っても良い。あるいは、クライアント100から認証情報の要求を受けた際に、第1の補助サーバ400がノードリストの作成を行い、常時接続サーバ200またはアプリケーションサーバ300が、第1の補助サーバ400からノードリストを取得して、当該ノードリストをクライアント100へ提供する役割を負っても良い。
<その他の応用例>
本発明は、システム或いは装置にプログラムを供給することによって達成される場合にも適用できることはいうまでもない。そして、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記憶媒体(あるいはメモリ)を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の効果を享受することが可能となる。
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わる他の記憶媒体に書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。