以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同じである。したがって、それらについての詳細な説明は繰り返さない。
また、以下では、常時接続の一例として、WebSocketプロトコルを利用した通信について説明する。しかしながら、アプリケーションサーバから任意のタイミングでクライアントにデータをプッシュできればよく、本発明はWebSocketプロトコルを利用する常時接続に限定されるものではない。
<第1の実施の形態>
<ネットワークシステムの全体構成>
まず、本実施の形態にかかるネットワークシステム1の全体構成について説明する。図1は、本実施の形態にかかるネットワークシステム1の全体構成を示すイメージ図である。
図1を参照して、本実施形態にかかるネットワークシステム1は、住居またはオフィスなどに配置される複数の家電100A,100Dと、ネットワークを介して家電100A,100Dと接続される複数の常時接続サーバ200A,200Bと、家電100A,100Dに関する様々なサービスを提供する複数のアプリケーションサーバ300A,300Bと、常時接続サーバ200A,200Bにかかる負荷を分散するための負荷分散サーバ400とを含む。
なお、以下では、常時接続サーバ200A,200Bが2つの場合について説明するが、常時接続サーバは1つであってもよいし3つ以上であっても良い。アプリケーションサーバも1つであってもよいし3つ以上であっても良い。家電も1つであってもよいし3つ以上であってもよい。負荷分散装置は2つ以上であってもよい。
ここで、家電としては、たとえば、掃除機100A、エアコン100D、テレビ、洗濯機、冷蔵庫、炊飯器、空気清浄器、床暖房、IH(Induction Heating)クッキングヒーター、などが挙げられる。さらに、家電は、住居内またはオフィス内の通信機器であればよく、たとえば、パーソナルコンピュータ、テレビ以外のAV機器、インターホンシステムなどを含んでもよい。また、常時接続サーバ200A,200Bとアプリケーションサーバ300A,300Bと負荷分散サーバ400とは、家電と同じ住居内、オフィス内、ビル内、会社あるいは学校の構内に存在するサーバなどを含んでもよい。
また、家電と各サーバ間は、光ファイバ等の回線を経由し、途中に、光回線終端装置、無線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は、WebSocketプロトコルを利用して、ノード1としての常時接続サーバ200Aと常時接続する。これによって、掃除機100Aは、常時接続サーバ200Aを介して、掃除機用のアプリケーションサーバ300Aにデータを送信することができる。逆に、掃除機用のアプリケーションサーバ300Aも、任意のタイミングで常時接続サーバ200Aを介して、掃除機100Aにデータをプッシュすることができる。
同様に、エアコン100Dは、WebSocketプロトコルを利用して、ノード2としての常時接続サーバ200Bと常時接続する。すなわち、エアコン100Dは、常時接続サーバ200Bを介して、エアコン用のアプリケーションサーバ300Bにデータを送信することができる。逆に、エアコン用のアプリケーションサーバ300Bも、任意のタイミングで常時接続サーバ200Bを介して、掃除機エアコン100Dにデータをプッシュすることができる。
本実施形態においては、常時接続サーバ200A,200Bとアプリケーションサーバ300A,300Bの間に、負荷分散サーバ400が配備される。負荷分散サーバ400は、複数の常時接続サーバ200A,200Bの一部のみに大きな負荷がかかり、複数の常時接続サーバ200A,200Bの他の部分に小さな負荷しかからないという状況を避けるために利用される。
たとえば、負荷分散サーバ400は、アプリケーションサーバ300A,300Bのいずれかからデータを受信したときに、常時接続サーバ200A,200Bの負荷を調べる。そして、負荷分散サーバ400は、負荷が少ない方の常時接続サーバ200に当該データを送信する。
本実施形態においては、常時接続サーバ200Aは、負荷分散サーバ400からデータを受信したときに、当該データが常時接続サーバ200Aと常時接続中の家電100Aに向けたものであるかを判断する。そして、当該データが常時接続サーバ200Aと常時接続中の家電100Aに向けたものである場合、常時接続サーバ200Aは、WebSocketプロトコルを利用して、当該データを家電100Aに送信する。
一方、当該データが自身と常時接続中の家電100Aに向けたものでない場合、常時接続サーバ200Aは、当該データの送信先としての家電100Bが常時接続中の常時接続サーバ200Bを特定する。常時接続サーバ200Aは、当該データを、送信先に指定された家電100Bと常時接続中の常時接続サーバ200Bへと転送する。常時接続サーバ200Bは、当該データが自身と常時接続中の家電100Bに向けたものであるため、WebSocketプロトコルを利用して、当該データを家電100Bに送信する。
このように、本実施形態にかかるネットワークシステム1では、クライアント100が常時接続サーバ200と常時接続するシステムであるにかかわらず、負荷分散サーバ400が複数の常時接続サーバ200にかかる負荷を分散することができる。
以下、このような機能を実現するためのネットワークシステム1の具体的な構成について詳述する。
<クライアント100のハードウェア構成>
まず、クライアント100のハードウェア構成の一態様について説明する。図2は、本実施の形態にかかるクライアント100のハードウェア構成を表わすブロック図である。
図2を参照して、クライアント100は、主たる構成要素として、CPU110と、メモリ120と、入出力部130と、家電制御回路150と、通信インターフェイス160とを含む。
CPU110は、メモリ120あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、クライアント100の各部を制御する。より詳細には、CPU110は、メモリ120のプログラムを実行することによって後述するクライアントAPPおよびクライアントAPI112(図7および図12を参照。)として動作する。より詳細には、クライアントAPPは、クライアント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(Application software)データ、クライアントAPPとデータをやり取りしながら常時接続サーバ200と通信するためのAPI(Application Programming Interface)データを記憶する。APPデータは、アプリケーションサーバ300と情報を送受信するためのサービス接続情報を含む。APIデータは、WebSocketクライアントAPI設定情報と、認証情報と、接続先サービス設定情報と、接続状態情報とを含む。
入出力部130は、ユーザからの命令を受け付けて、当該命令をCPU110に入力する。また、入出力部130は、CPU110からの信号に基づいて、文字や画像を出力する。
家電制御回路150は、CPU110からの信号に基づいて、家電としてのクライアントの各部(モータなど)を制御する。
通信インターフェイス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,212A,212B(図6、図7、図12を参照。)およびWS接続バランシング機能211,211A,211B(図6、図7、図12を参照。)として動作する。WSサーバコア212は、ソフトウェアとしての常時接続サーバのことを言い、WebSocketプロトコルを使用してクライアント100との常時接続通信を制御したり、HTTPプロトコルを使用して負荷分散サーバ400または複数のアプリケーションサーバ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に記憶されているプログラムを実行することによって、後述するサーバAPP311A、311B(図6を参照。)およびサーバAPI312,312A,312B(図6、図7を参照。)として動作する。
サーバAPP311A,311Bは、ソフトウェアとしてのアプリケーションサーバのことを言い、クライアント100やスマートフォン500などにサービスを提供する。サーバAPI312,312A,312Bは、HTTPプロトコルを利用した負荷分散サーバ400または常時接続サーバ200との通信を制御する。
メモリ320は、CPU310によって実行されるプログラムや、CPU310によるプログラムの実行により生成されたデータ、キーボード330を介して入力されたデータ、アプリケーションサーバ300として動作するAPPデータ、サーバAPPとデータをやり取りしながら常時接続サーバ200と通信するためのAPIデータを記憶する。APPデータは、自身が管理すべきクライアント100に関する情報を含むクライアント情報と、常時接続中のクライアント100との接続に関するクライアント接続情報と、新たに常時接続を開始するための接続確率テンポラリ情報とを含む。APIデータは、WebSocketサーバAPI設定情報と、認証管理情報と、サービス設定情報と、クライアント接続状態情報とを含む。
<対応関係DB>
次に、本実施形態にかかるネットワークシステム1で利用される対応関係DB500について説明する。図13は、本実施の形態にかかる対応関係DB500のデータ構造を示すイメージ図である。
図13を参照して、対応関係DB500は、クライアント100とアプリケーションサービスとの組み合わせ毎に、クライアント100を特定するための接続IDと、アプリケーションサーバ300が提供するサービスを特定するためのサービスID(アプリケーション定義データともいう。)と、常時接続サーバ200を特定するためのノード名(常時接続サーバ200のアドレスに対応付けられてもよいし、常時接続サーバ200のアドレスそのものであってもよい。)と、常時接続の開示時刻と、常時接続の利用回数との対応関係を含む。そして、対応関係DB500は、本実施形態にかかるネットワークシステム1に含まれる複数のアプリケーションサーバ300および複数の常時接続サーバ200から参照可能になっている。
<負荷分散サーバ400のハードウェア構成>
次に、負荷分散サーバ400のハードウェア構成の一態様について説明する。図5は、本実施の形態にかかる負荷分散サーバ400のハードウェア構成を表わすブロック図である。
図5を参照して、負荷分散サーバ400は、主たる構成要素として、CPU410と、メモリ420と、キーボード430と、ディスプレイ440と、通信インターフェイス460とを含む。負荷分散サーバ400のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU410の動作、メモリ420に格納されているデータに関して異なる。よって、以下では、CPU410の動作と、メモリ420が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU410は、メモリ420あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、負荷分散サーバ400の各部を制御する。具体的には、CPU410は、メモリ420に記憶されているプログラムを実行することによって、後述するロードバランサ機能411(図6および図7を参照。)を実現する。
メモリ420は、CPU410によって実行されるプログラムや、CPU410によるプログラムの実行により生成されたデータ、キーボード430を介して入力されたデータ、負荷分散サーバ400として動作するための常時接続サーバリストおよび常時接続サーバ負荷状態とを記憶する。常時接続サーバリストは、現在、負荷分散サーバ400と通信可能な常時接続サーバ200毎のアドレスを格納する。常時接続サーバ負荷状態は、現在、負荷分散サーバ400と通信可能な常時接続サーバ200毎にかかっている負荷を格納する。
<ネットワークシステム1の機能構成>
次に、本実施の形態にかかるネットワークシステム1全体の機能構成について説明する。図6は、本実施の形態にかかるネットワークシステム1全体の機能構成を示すブロック図である。なお、以下では、説明を解りやすくするために、家電として、クライアント100A〜100Fが常時接続されているものとする。
図6を参照して、クライアント100A〜100Cは、WebSocketプロトコルを使用してノード1としての常時接続サーバ200Aと常時接続している。クライアント100D〜100Fは、WebSocketプロトコルを使用してノード2としての常時接続サーバ200Bと常時接続している。なお、クライアント100A〜100Fは、HTTPプロトコルを使用して常時接続サーバ200A,200Bおよびアプリケーションサーバ300A,300Bと通信することもできる。
アプリケーションサーバ300A,300Bの各々に関して、サーバAPP311A,311BはCPU310によって実現されるものであって、サーバAPI312A,312Bに他の装置とのデータのやり取りを依頼する。本実施形態においては、ネットワークシステム1は、掃除機100Aを制御するためのサーバAPP311Aと、エアコン100Dを制御するためのサーバAPP311Bとを含む。
サーバAPI312A,312Bは、CPU310によって実現されるものであって、通信インターフェイス360を利用することによって、負荷分散サーバ400、対応関係DB500、他のデータベース900、スマートフォン700などとデータの送受信を行う。本実施の形態においては、アプリケーションサーバ300A,300Bは、常時接続サーバ200A,200Bを介して、クライアント100A〜100Fに任意のタイミングでデータを送信できる。
負荷分散サーバ400に関して、ロードバランサ機能411は、CPU410によって実現されるものであって、複数の常時接続サーバ200A,200Bから、より小さな負荷がかかっている常時接続サーバ200A,200Bを選択する。そして、ロードバランサ機能411は、アプリケーションサーバ300A,300Bからのデータを、選択された常時接続サーバ200A,200Bに送信する。
常時接続サーバ200A,200Bに関して、WSサーバコア212A,212Bは、CPU210によって実現されるものであって、WebSocketプロトコルを利用して、通信インターフェイス260を介して、クライアント100A〜100Fと常時接続する。WSサーバコア212A,212Bは、HTTPプロトコルを利用して、通信インターフェイス260を介して、他の常時接続サーバ200、負荷分散サーバ400、アプリケーションサーバ300などともデータ通信を行う。
WS接続バランシング機能211A,211Bは、CPU210によって実現される。以下では、常時接続サーバ200AのWS接続バランシング機能211Aの機能について説明する。WS接続バランシング機能211Aは、負荷分散サーバ400からデータを受信したときに、当該データに含まれる接続IDとサービスIDとに基づいて、常時接続サーバ200Aと常時接続中のクライアント100A〜100Cに向けられたものであるか否かを判断する。なお、接続IDは、クライアント100A〜100FとサーバAPP311A,311Bとの組み合わせ毎かつサービス毎に設定されるものである。
当該データが常時接続サーバ200Aと常時接続中のクライアント100A〜100Cのいずれかに向けたものである場合、WS接続バランシング機能211Aは、WSサーバコア212Aに当該データをクライアント100へ送信するように依頼する。WSサーバコア212Aは、WebSocketプロトコルを利用して、通信インターフェイス260を介して当該データをクライアント100に送信する。
一方、当該データが常時接続サーバ200Aと常時接続中のクライアント100A〜100Cに向けられたものでない場合、WS接続バランシング機能211Aは、当該データの送信先としてのクライアント100と常時接続中の常時接続サーバ200Bを特定する。具体的には、WS接続バランシング機能211Aは、WSサーバコア212Aと通信インターフェイス260とを介して、外部の対応関係DB500にアクセスする。ここで、対応関係DB500は、多数のクライアントと複数の常時接続サーバとの接続状態を格納している。WS接続バランシング機能211Aは、接続IDに対応するクライアント100D〜100Fが常時接続中の常時接続サーバ200Bを特定する情報を取得する。WS接続バランシング機能211Aは、通信インターフェイス260を介して、常時接続サーバ200Bにデータと接続IDとを転送する。
常時接続サーバ200BのWSサーバコア212Bは、常時接続サーバ200Aから転送されてきたデータを、接続IDに基づいて常時接続サーバ200Bと常時接続中のクライアント100D〜100Fのいずれかへとプッシュする。
<常時接続に関する装置間のデータのやり取り>
次に、本実施の形態にかかるネットワークシステム1における常時接続に関する装置間のデータのやり取りの概要について説明する。なお、図7は、本実施の形態にかかるネットワークシステム1における常時接続に関する装置間のデータのやり取りの処理手順を示すシーケンス図である。
図7を参照して、クライアント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と常時接続サーバ200とは、HTTPプロトコルを使用して、WebSocketを利用した常時接続状態を確立する(ステップS010、ステップS012)。具体的には、クライアントAPI112は、HTTPプロトコルを使用して、通信インターフェイス160を介して常時接続サーバ200にハンドシェイク要求を送る。WSサーバコア212は、通信インターフェイス260を介してハンドシェイク応答を返す。これによって、クライアント100と常時接続サーバ200との間で、WebSocketプロトコルによる常時接続が有効になる。
クライアントAPI112は、通信インターフェイス160を介して認証情報を常時接続サーバ200に送信する(ステップS014)。WSサーバコア212またはWS接続バランシング機能211は、クライアント100からの認証情報と予め保存している認証情報とに基づいて、クライアント100を認証する(ステップS016)。認証に成功すると、WSサーバコア212またはWS接続バランシング機能211は、アプリケーションサーバ300がクライアント100を識別するための接続IDを発行する(ステップS018)。
すなわち、WSサーバコア212またはWS接続バランシング機能211は、常時接続中のクライアント100と接続IDとの対応関係を、接続状態管理情報として記憶する。クライアント100は、接続IDを受信して、記憶する(ステップS020)。アプリケーションサーバ300も、接続IDを受信して、記憶する(ステップS022)。このとき、WSサーバコア212またはWS接続バランシング機能211は、接続IDと常時接続サーバ200Aを特定する情報とアプリケーションサービスを特定する情報とを対応付けて、通信インターフェイス260を介して当該対応関係を対応関係DB500に登録する。
その後、サーバAPI312は、サーバAPP311からの要求に応じて、データ本体と送り先のクライアント100を特定するための接続IDとを通信インターフェイス360を介して常時接続サーバ200に送信する(ステップS032)。
本実施の形態においては、ステップS033として、アプリケーションサーバ300からのデータは、負荷分散サーバ400が受信する。負荷分散サーバ400のロードバランサ機能411は、常時接続サーバ200のそれぞれの負荷を取得して、当該負荷に基づいてデータを送信すべき常時接続サーバ200を選択する。ロードバランサ機能411は、通信インターフェイス460を介して、選択された常時接続サーバ200にデータを送信する。
たとえば、ロードバランサ機能411は、複数の常時接続サーバ200のうちの、現在かかっている負荷が小さい常時接続サーバ200に優先的にデータを送信する。あるいは、ロードバランサ機能411は、常時接続中のクライアント100の数が少ない常時接続サーバ200に優先的にデータを送信してもよい。あるいは、ロードバランサ機能411は、ランダムにデータを送信してもよい。
常時接続サーバ200は、負荷分散サーバ400からデータ本体と接続IDとを受信する(ステップS034)。WS接続バランシング機能211は、接続状態管理情報を参照して、接続IDに基づいてクライアント100を特定する(ステップS036)。
接続IDに対応するクライアント100が常時接続サーバ200と常時接続中である場合、WS接続バランシング機能211はWSサーバコア212にクライアントへのデータ送信を依頼する。すなわち、WSサーバコア212は、WebSocketプロトコルを使用して、通信インターフェイス260を介して、特定されたクライアント100にデータ本体を送信する(ステップS038−1)。クライアント100は、データ本体を受信する(ステップS040)。
クライアント100は、WebSocketプロトコルを使用して、受信結果を常時接続サーバ200に送信する(ステップS042)。常時接続サーバ200は、受信結果を受信すると、当該受信結果をアプリケーションサーバ300に送信する(ステップS044)。アプリケーションサーバ300は、受信結果を受信する(ステップS046)。
一方、接続IDに対応するクライアント100が常時接続サーバ200と常時接続中でない場合、WS接続バランシング機能211はWSサーバコア212に他の常時接続サーバ200へのデータ転送を依頼する。すなわち、WS接続バランシング機能211は、通信インターフェイス260を介して、対応関係DB500を参照することによって、接続IDに対応するクライアント100と常時接続中の他の常時接続サーバ200を特定する。
WS接続バランシング機能211は、WSサーバコア212に他の常時接続サーバ200へのデータ送信を依頼する。WSサーバコア212は、HTTPプロトコルを利用して、通信インターフェイス260を介して、特定された常時接続サーバ200にデータを転送する(ステップS038−1)。他の常時接続サーバ200のWSサーバコア212は、WebSocketプロトコルを利用して、通信インターフェイス260を介して接続IDに対応するクライアント100にデータを送信する(ステップS039)。
このように、本実施形態にかかるネットワークシステム1では、クライアント100が常時接続サーバ200と常時接続している最中であっても、負荷分散サーバ400が複数の常時接続サーバ200の間で負荷を分散することができる。
<第2の実施の形態>
<ネットワークシステムの全体構成>
次に、第2の実施の形態について説明する。本実施の形態にかかるネットワークシステム1Bは、第1の実施の形態のネットワークシステム1に後述する負荷分散サーバ600を追加したものである。
まず、本実施の形態にかかるネットワークシステム1Bの全体構成について説明する。図8は、本実施の形態にかかるネットワークシステム1Bの全体構成と動作概要とを示す第1のイメージ図である。図9は、本実施の形態にかかるネットワークシステム1Bの全体構成と動作概要とを示す第2のイメージ図である。図10は、本実施の形態にかかるネットワークシステム1Bの全体構成と動作概要とを示す第3のイメージ図である。
図8を参照して、ネットワークシステム1Bは、住居またはオフィスなどに配置される複数の家電100A,100Dと、ネットワークを介して家電100A,100Dと接続される複数の常時接続サーバ200A,200Bと、家電100A,100Dに関する様々なサービスを提供する複数のアプリケーションサーバ300A,300Bと、常時接続サーバ200A,200Bにかかる負荷を分散するための負荷分散サーバ400と、クライアント100が常時接続サーバ200A,200Bと再接続するための負荷分散サーバ600とを含む。
なお、以下では、常時接続サーバ200A,200Bが2つの場合について説明するが、常時接続サーバは1つであってもよいし、3つ以上であっても良い。アプリケーションサーバも1つであってもよいし、3つ以上であっても良い。家電も1つであってもよいし、3つ以上であってもよい。負荷分散装置と常時接続補助サーバは2つ以上であってもよい。
家電、常時接続サーバ、アプリケーションサーバ、負荷分散サーバの定義は、第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
そして、本実施の形態においては、掃除機100Aおよびエアコン100Dの各々が、常時接続サーバ200A,200Bのいずれかと常時接続される。これによって、掃除機用のアプリケーションサーバ300Aおよびエアコン用のアプリケーションサーバ300Bは、常時接続サーバ200A,200Bを介して任意のタイミングで掃除機100Aおよびエアコン100Dにデータをプッシュ送信することができる。
すなわち、本実施形態にかかるネットワークシステム1Bも、多数の家電の各々が、自身に適したサービスを提供する複数のアプリケーションサーバの全てと、直接的に常時接続する必要がない。また、逆に、複数のアプリケーションサーバの各々が、対応する多数の家電の全てと、直接的に常時接続する必要がない。
<ネットワークシステムの動作概要>
次に、本実施の形態にかかるネットワークシステム1Bの動作概要について説明する。なお、以下では、説明の重複をさけるために、掃除機100A、エアコン100Dなどの家電を総称して、クライアント100ともいう。同様に、ノード1の常時接続サーバ200Aと、ノード2の常時接続サーバ200Bとを総称して、常時接続サーバ200ともいう。同様に、掃除機用のアプリケーションサーバ300Aおよびエアコン用のアプリケーションサーバ300Bなどのような、各種のサービスをクライアント100およびユーザなどに提供するためのアプリケーションサーバを総称して、アプリケーションサーバ300ともいう。
まず、図8を参照して、掃除機100Aは、常時接続サーバ200A,200Bのいずれかと常時接続を開始するために、まず、HTTPプロトコルを利用して、負荷分散サーバ600を介して常時接続サーバ200に、複数の稼働中の常時接続サーバ200のアドレスが格納されたノードリストを要求する。
常時接続サーバ200は、負荷分散サーバ600からのノードリスト要求に応じて対応関係DB500にノードリストを要求する。あるいは、常時接続サーバは、ノードリスト要求を受け付けた際に、複数の常時接続サーバ200A,200Bに接続確認用データ(ping)を送信し、その応答に応じてノードリストを作成する。掃除機100Aは、常時接続サーバ200から負荷分散サーバ600を介して受信した当該ノードリストに基づいて、WebSocketプロトコルを利用して、ノード1としての常時接続サーバ200Aと常時接続を開始する。
このようにして、掃除機100Aは、常時接続サーバ200Aを介して、掃除機用のアプリケーションサーバ300Aにデータを送信することができる。逆に、掃除機用のアプリケーションサーバ300Aも、常時接続サーバ200Aを介して、掃除機100Aにデータをプッシュすることができる。
同様に、エアコン100Dは、WebSocketプロトコルを利用して、ノード2としての常時接続サーバ200Bと常時接続している。すなわち、エアコン100Dは、常時接続サーバ200Bを介して、エアコン用のアプリケーションサーバ300Bにデータを送信することができる。逆に、エアコン用のアプリケーションサーバ300Bも、常時接続サーバ200Bを介して、掃除機エアコン100Dにデータをプッシュすることができる。
第1の実施の形態と同様に、本実施形態においても、常時接続サーバ200A,200Bとアプリケーションサーバ300A,300Bの間に、負荷分散サーバ400が配備される。負荷分散サーバ400は、複数の常時接続サーバ200A,200Bの一部のみに大きな負荷がかかり、複数の常時接続サーバ200A,200Bの他の部分に小さな負荷しかからないという状況を避けるために利用される。
たとえば、負荷分散サーバ400は、アプリケーションサーバ300A,300Bのいずれかからデータを受信したときに、常時接続サーバ200A,200Bの負荷を調べる。そして、負荷分散サーバ400は、負荷が少ない方の常時接続サーバ200に優先的にデータを送信する。
あるいは、負荷分散サーバ400は、常時接続中のクライアント100の数が少ない常時接続サーバ200に優先的にデータを送信してもよい。あるいは、負荷分散サーバ400は、ランダムにデータを送信してもよい。あるいは、負荷分散サーバ400と時間帯の常時接続サーバ200の優先順位を記憶しておき、時間帯ごとに優先順位が高い常時接続サーバ200に優先的にデータを送信してもよい。
第1の実施の形態と同様に、本実施形態においても、常時接続サーバ200Aは、負荷分散サーバ400からデータを受信したときに、当該データが常時接続サーバ200Aと常時接続中の家電に向けたものであるかを判断する。そして、当該データが常時接続サーバ200Aと常時接続中の家電(たとえば、掃除機100A)に向けたものである場合、常時接続サーバ200Aは、WebSocketプロトコルを利用して、当該データを掃除機100Aに送信する。
一方、当該データが常時接続サーバ200Aと常時接続中の家電に向けたものでない場合、常時接続サーバ200Aは、当該データの送信先としての家電(たとえば、エアコン100D)が常時接続中の常時接続サーバ200Bを特定する。常時接続サーバ200Aは、当該データを、送信先に指定されたエアコン100Bが常時接続中の常時接続サーバ200Bへと転送する。常時接続サーバ200Bは、当該データが自身と常時接続中のエアコン100Bに向けたものであるため、WebSocketプロトコルを利用して、当該データをエアコン100Bに送信する。
ただし、負荷分散サーバ400が、対応関係DB500を参照することによって、データの送信先である家電と常時接続中の常時接続サーバ200を特定するものであってもよい。この場合、負荷分散サーバ400が、データの送信先である家電(たとえば、エアコン100D)と常時接続中の常時接続サーバ200Bにデータを送信することができるため、常時接続サーバ200Aに第1の実施の形態のようなWS接続バランシング機能211を搭載する必要がない。
図9を参照して、掃除機100Aと常時接続中の常時接続サーバ200Aが正常に稼働しなくなる場合がある。すなわち、掃除機100Aが常時接続サーバ200Aと常時接続通信を行えなくなる場合がある。
このような場合は、図10を参照して、掃除機100Aは、他の常時接続サーバ200Bと常時接続を開始するために、まず、HTTPプロトコルを利用して、負荷分散サーバ600を介して常時接続サーバ200のいずれかに、複数の稼働中の常時接続サーバ200のアドレスが格納されたノードリストを要求する。掃除機100Aは、当該ノードリストに基づいて、WebSocketプロトコルを利用して、稼働中のノード2としての常時接続サーバ200Bと常時接続を開始する。
これによって、掃除機100Aは、常時接続サーバ200Bを介して、再度、掃除機用のアプリケーションサーバ300Aにデータを送信することができる。逆に、掃除機用のアプリケーションサーバ300Aも、常時接続サーバ200Bを介して、再度、掃除機100Aにデータをプッシュすることができる。
このように、本実施形態にかかるネットワークシステム1Bでは、クライアントが1つの常時接続サーバと通信できなくなった場合でも、アプリケーションサーバが別の常時接続サーバを介してクライアントに情報をプッシュできるようにすることができる。なお、本実施形態にかかるネットワークシステム1Bにおいても、第1の実施の形態と同様に、クライアント100が常時接続サーバ200と常時接続するシステムであるにかかわらず、負荷分散サーバ400が複数の常時接続サーバ200にかかる負荷を分散することができる。
以下、このような機能を実現するためのネットワークシステム1Bの具体的な構成について詳述する。
<クライアント100のハードウェア構成>
クライアント100のハードウェア構成は、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
<常時接続サーバ200のハードウェア構成>
常時接続サーバ200のハードウェア構成も、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
<アプリケーションサーバ300のハードウェア構成>
アプリケーションサーバ300のハードウェア構成も、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
<対応関係DB>
対応関係DBの構成も、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
<負荷分散サーバ400のハードウェア構成>
負荷分散サーバ400のハードウェア構成も、第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
<負荷分散サーバ600のハードウェア構成>
負荷分散サーバ600のハードウェア構成の一態様について説明する。図11は、本実施の形態にかかる負荷分散サーバ600のハードウェア構成を表わすブロック図である。
図11を参照して、負荷分散サーバ600は、主たる構成要素として、CPU610と、メモリ620と、入出力部630と、通信インターフェイス660とを含む。負荷分散サーバ600のハードウェア構成は、常時接続サーバ200のハードウェア構成と比較して、CPU610の動作、メモリ620に格納されているデータに関して異なる。よって、以下では、CPU610の動作と、メモリ620が記憶するデータとについて説明するものとし、その他のハードウェア構成については説明を繰り返さない。
CPU610は、メモリ620あるいは外部の記憶媒体に記憶されているプログラムを実行することによって、負荷分散サーバ600の各部を制御する。具体的には、CPU610は、メモリ620に記憶されているプログラムを実行することによって、HTTPプロトコルを利用してクライアント100および他の装置から受信したデータを複数の常時接続サーバ200や複数のアプリケーションサーバ300に割り振る。
メモリ620は、CPU610によって実行されるプログラムや、CPU610によるプログラムの実行により生成されたデータ、入出力部630を介して入力されたデータ、対応関係DB500から取得した稼働中の常時接続サーバ200の情報を格納するノードリストを記憶する。
<ネットワークシステム1Bの機能構成>
次に、本実施の形態にかかるネットワークシステム1B全体の機能構成について説明する。図12は、本実施の形態にかかるネットワークシステム1B全体の機能構成を示すブロック図である。なお、本実施形態にかかるクライアント100、常時接続サーバ200、アプリケーションサーバ300、負荷分散サーバ400は、第1の実施の形態のそれらが有する機能と同様の機能を有している。よって、以下では、第1の実施の形態と比較して本実施形態にのみ追加された機能について説明する。
図12を参照して、クライアントAPI112は、常時接続サーバ200A,200Bのいずれかと常時接続を開始する際に、通信インターフェイス160を利用することによって、負荷分散サーバ600を介して常時接続サーバ200A,200Bのいずれかにノードリストを要求する。
常時接続サーバ200A,200BのWSサーバコア212A,212Bは、予め、あるいはノードリスト要求を受けた際に、対応関係DB500から複数の常時接続サーバ200のアドレスのリスト(ノードリスト)を取得する。WSサーバコア212A,212Bは、ノードリスト要求を受けた際に、当該ノードリストをクライアント100に送信する。
あるいは、WSサーバコア212A,212Bは、ノードリスト要求を受けた際に、予めメモリ220に記憶されている複数の常時接続サーバ200のアドレスのリストをノードリストとしてクライアント100に送信する。
あるいは、WSサーバコア212A,212Bは、予め、あるいはノードリスト要求を受けた際に、複数の常時接続サーバ200A,200Bに接続確認用データ(ping)を送信し、その応答に応じて稼働中の常時接続サーバ200のみのアドレスを含むノードリストを作成する。WSサーバコア212A,212Bは、ノードリスト要求を受けた際に、当該ノードリストをクライアント100に送信する。
あるいは、WSサーバコア212A,212Bは、予め、あるいはノードリスト要求を受けた際に、複数の常時接続サーバ200に接続確認用データ(ping)を送信し、その応答として複数の常時接続サーバ200の負荷および/または接続中のクライアント100の数を取得する。WSサーバコア212A,212Bは、ノードリストとして、稼働中の常時接続サーバ200のみに関する、負荷および/または接続中のクライアント100の数を格納するリストを作成する。あるいは、WSサーバコア212A,212Bは、ノードリストとして、予め登録されている常時接続サーバ200に関する、負荷および/または接続中のクライアント100の数を格納するリストを作成する。WSサーバコア212A,212Bは、ノードリスト要求を受けた際に、当該ノードリストをクライアント100に送信する。
あるいは、WSサーバコア212A,212Bは、予め、あるいはノードリスト要求を受けた際に、常時接続サーバ200の負荷に基づいて、負荷の小さい順に常時接続サーバ200をソートしたリストをノードリストとして作成する。WSサーバコア212A,212Bは、ノードリスト要求を受けた際に、当該ノードリストをクライアント100に送信する。
あるいは、WSサーバコア212A,212Bは、予め、あるいはノードリスト要求を受けた際に、常時接続サーバ200に接続中のクライアント100の数に基づいて、接続中のクライアントが少ない順に常時接続サーバ200をソートしたリストをノードリストとして作成する。WSサーバコア212A,212Bは、ノードリスト要求を受けた際に、当該ノードリストをクライアント100に送信する。
WSサーバコア212A,212Bは、ノードリストをクライアント100に送信する際に、他の常時接続サーバ200が参照可能なように、対応関係DB500に格納(更新)してもよい。
クライアントAPI112は、ノードリストに格納されている稼働中の常時接続サーバ200と接続する。
そして、再接続可能な常時接続サーバが複数あった時は、例えば、クライアントAPI112は、常時接続サーバ200でソートされているノードリストの一番目の常時接続サーバ200を選択する。あるいは、クライアントAPI112は、負荷が最も小さい常時接続サーバ200を選択する。あるいは、クライアントAPI112は、接続中のクライアント100の数が最も少ない常時接続サーバ200を選択する。あるいは、クライアントAPI112は、ランダムに常時接続サーバ200を選択する。クライアントAPI112は、選択された常時接続サーバ200と常時接続を開始する。
<常時接続に関する装置間のデータのやり取り>
次に、本実施の形態にかかるネットワークシステム1Bにおける常時接続に関する装置間のデータのやり取りの概要について説明する。本実施の形態に係る常時接続に関する装置間のデータのやり取りは、第1の実施の形態のそれと比較して、クライアント100が常時接続サーバ200と再接続を開始するときの動作のみが異なる。その他の動作は第1の実施の形態のそれらと同様であるため、ここでは説明を繰り返さない。
まず、クライアント100のクライアントAPI112は、常時接続を開始する際に、負荷分散サーバ600を介して常時接続サーバ200のいずれかにノードリストを要求する。クライアントAPI112は、ノードリストを参照して、常時接続する常時接続サーバ200を選択する。
図7を参照して、クライアントAPI112は、HTTPプロトコルを使用して、通信インターフェイス160を介して、アプリケーションサーバ300に認証情報を要求する(ステップS002)。このとき、クライアントAPI112は、アプリケーションサーバ300に、認証に利用されるクライアントIDと選択された常時接続サーバ200を特定するための情報とを送信する。アプリケーションサーバ300のサーバAPI312は、当該要求に応じてHTTPプロトコルを使用して、通信インターフェイス360を介して認証情報を送信する(ステップS004)。
サーバAPI312は、通信インターフェイス360を介して、選択された常時接続サーバ200にも認証情報を送信する(ステップS006)。常時接続サーバ200のWSサーバコア212は、アプリケーションサーバ300から受信した認証情報を保存する(ステップS008)。これ以降の動作(ステップS010〜ステップS046)は第1の実施の形態のそれと同様であるため、ここでは説明を繰り返さない。
本実施形態においては、クライアントAPI112が、常時接続サーバ200との常時接続通信が行えなくなったときに、再度、負荷分散サーバ600を介して常時接続サーバ200に最新のノードリストを要求する。クライアントAPI112は、最新のノードリストを参照して、常時接続する常時接続サーバ200を選択する。そして、クライアントAPI112は、ステップS002からの処理を繰り返す。
このように、本実施形態にかかるネットワークシステム1Bでは、クライアントが常時接続サーバと通信できなくなった場合でも、アプリケーションサーバがクライアントに情報をプッシュできるようにすることができる。そして、クライアント100が常時接続サーバ200と常時接続するシステムであるにもかかわらず、負荷分散サーバ400が複数の常時接続サーバ200の間で負荷を分散することができる。
<第3の実施の形態>
上記の第2の実施の形態では、ネットワークシステム1Bが、2つの負荷分散サーバ400,600とWS接続バランシング機能211を含むものであった。
しかしながら、第3の実施の形態として、ネットワークシステムは、負荷分散サーバ600のみを含み、負荷分散サーバ400とWS接続バランシング機能211(第1の実施の形態に含まれる部分)を有さない構成であっても良い。すなわち、クライアント100が常時接続サーバ200Aと通信できなくなった場合に、クライアント100が別の常時接続サーバ200Bと常時接続できる構成だけであってもよい。
<第4の実施の形態>
上記の第1および第2の実施の形態では、負荷分散サーバ400は、アプリケーションサーバ300A,300Bのいずれかからデータを受信したときに、常時接続サーバ200A,200Bの負荷および/または接続中のクライアント100の数を調べるものであった。
しかしながら、第4の実施の形態として、負荷分散サーバ400は、定期的に常時接続サーバ200A,200Bの負荷を調べてもよい。あるいは、負荷分散サーバ400は、同様の構成にした系を複数用意して処理要求を順番に割り振る、いわゆるラウンドロビン方式でデータを常時接続サーバ200A,200Bに割り振ってもよい。
<第5の実施の形態>
上記の第1および第2の実施の形態では、接続IDと常時接続サーバ200を特定する情報とアプリケーションサービスを特定する情報との対応関係を常時接続サーバ200の外部の対応関係DB500に格納するものであった。そして、常時接続サーバ200が、他の常時接続サーバ200にデータを転送する際に、対応関係DB500を参照して他の常時接続サーバ200を選択していた。
しかしながら、第5の実施の形態として、接続IDと常時接続サーバ200を特定する情報とアプリケーションサービスを特定する情報との対応関係を常時接続サーバ200が自身のメモリ220に格納してもよい。そして、常時接続サーバ200同士で当該対応関係をやり取りしてもよい。
<第6の実施の形態>
上記の第2の実施の形態では、常時接続サーバ200のいずれかが複数の稼働中の常時接続サーバ200のアドレスが格納されたノードリストをクライアント100に送信するものであった。そして、クライアント100が、ノードリストに基づいて、常時接続を開始する常時接続サーバ200を選択するものであった。
しかしながら、第6の実施の形態として、常時接続サーバ200のいずれかが、複数の常時接続サーバ200のアドレスが格納されたノードリストに基づいて、クライアント100と常時接続すべき(たとえば、現在の負荷が小さい)常時接続サーバ200を選択してもよい。この場合は、常時接続サーバ200のいずれかは、選択された常時接続サーバ200を特定する情報をクライアント100に送信する。そして、クライアント100は、常時接続サーバ200のいずれかに指定された常時接続サーバ200と常時接続を開始する。
<第7の実施の形態>
上記の第2の実施の形態では、常時接続サーバ200が、予め、あるいはノードリストの要求があったときに、複数の常時接続サーバ200に接続確認用データ(ping)を送信し、その応答に基づいてノードリストを更新していた。
しかしながら、対応関係DB500のコンピュータが、予め、あるいはノードリストの要求があったときに、複数の常時接続サーバ200に接続確認用データ(ping)を送信し、その応答に基づいてノードリストを更新してもよい。この場合、ノードリストのソートは、常時接続サーバ200が行ってもよいし、対応関係DB500のコンピュータが行ってもよい。
<その他の応用例>
本発明は、システム或いは装置にプログラムを供給することによって達成される場合にも適用できることはいうまでもない。そして、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記憶媒体(あるいはメモリ)を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読出し実行することによっても、本発明の効果を享受することが可能となる。
この場合、記憶媒体から読出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
また、コンピュータが読出したプログラムコードを実行することにより、前述した実施の形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているOS(オペレーティングシステム)などが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わる他の記憶媒体に書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によって前述した実施の形態の機能が実現される場合も含まれることは言うまでもない。
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記した説明ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。