(57)【特許請求の範囲】
【請求項１】
中継サーバを介して他の装置と通信を行う通信装置であって、
移行元の第１の中継サーバから移行先の第２の中継サーバに接続先を切り替える際に、
前記第２の中継サーバとの接続を確立した後に前記第１の中継サーバに該第２の中継サーバとの接続確立が完了した旨を示す接続完了通知を送信し、
前記第１の中継サーバからの、前記他の装置による前記接続完了通知を受信した場合に、メッセージの送信先を該第１の中継サーバから該第２の中継サーバに切り替え、
該第１の中継サーバとの接続を切断する、
接続管理部
を備える通信装置。
【請求項２】
前記接続管理部は、
前記メッセージの送信先を前記第１の中継サーバから前記第２の中継サーバに切り替えた後、該第１の中継サーバに送信終了通知を送信し、該第１の中継サーバからの、前記他の装置による送信終了通知を受信した場合に、該第１の中継サーバとの接続を切断する
請求項１に記載の通信装置。
【請求項３】
通信先となる前記他の装置を示す情報を管理する機器管理部をさらに備え、
前記接続管理部は、
前記機器管理部に管理される前記情報に基づき前記接続完了通知を受信する
請求項１または請求項２に記載の通信装置。
【請求項４】
前記接続管理部は、
前記機器管理部に管理される前記情報の数に応じた前記他の装置からの前記接続完了通知を受信した場合に、前記メッセージの送信先を該第１の中継サーバから該第２の中継サーバに切り替える
請求項３に記載の通信装置。
【請求項５】
前記接続管理部は、
前記機器管理部に管理される前記情報に対応する全ての前記他の装置からの前記接続完了通知を受信した場合に、前記メッセージの送信先を該第１の中継サーバから該第２の中継サーバに切り替える
請求項３に記載の通信装置。
【請求項６】
前記接続管理部は、
前記第２の中継サーバとの接続の確立の際に、自装置を識別する識別情報を含む新規接続通知を前記他の装置に向けて送信し、
前記機器管理部は、
前記他の装置から送信された前記新規接続通知に応じて前記情報を更新する
請求項３乃至請求項５の何れか１項に記載の通信装置。
【請求項７】
前記接続管理部は、
前記第１の中継サーバとの接続を切断する際に、自装置を識別する識別情報を含む離脱通知を前記他の装置に向けて送信し、
前記機器管理部は、
前記他の装置から送信された前記離脱通知に応じて前記情報を更新する
請求項３乃至請求項６の何れか１項に記載の通信装置。
【請求項８】
前記接続管理部は、
前記メッセージに、該メッセージ毎に所定増分が増加する値を付加して送信し、前記他の装置から受信した第１のメッセージに、既に受信済みの第２のメッセージに付加された最大の値に対して該所定増分が増加した値が付加される場合に、該第１のメッセージの送信元と該第２のメッセージの送信元とが異なるか否かを判定し、異なると判定された場合に、前記第１の中継サーバとの接続を切断する
請求項１に記載の通信装置。
【請求項９】
第１の中継サーバおよび第２の中継サーバを含む複数の中継サーバと、該複数の中継サーバの何れかを介して互いに通信を行う少なくとも２の通信装置とを含む通信システムであって、
前記通信装置は、
移行元の前記第１の中継サーバから移行先の前記第２の中継サーバに接続先を切り替える際に、
前記第２の中継サーバとの接続を確立した後に前記第１の中継サーバに該第２の中継サーバとの接続確立が完了した旨を示す接続完了通知を送信し、
前記第１の中継サーバからの、他の通信装置による前記接続完了通知を受信した場合に、メッセージの送信先を該第１の中継サーバから該第２の中継サーバに切り替え、
該第１の中継サーバとの接続を切断する、
接続管理部
を備える通信システム。
【請求項１０】
中継サーバを介して他の装置と通信を行う通信装置に搭載されるコンピュータに実行させるための通信プログラムであって、
移行元の第１の中継サーバから移行先の第２の中継サーバに接続先を切り替える際に、
前記第２の中継サーバとの接続を確立した後に前記第１の中継サーバに該第２の中継サーバとの接続確立が完了した旨を示す接続完了通知を送信し、
前記第１の中継サーバからの、前記他の装置による前記接続完了通知を受信した場合に、メッセージの送信先を該第１の中継サーバから該第２の中継サーバに切り替え、
該第１の中継サーバとの接続を切断する、
接続管理ステップ
を前記コンピュータに実行させるための通信プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、通信システムおよび通信プログラムに関する。
【背景技術】
【０００２】
複数のクライアント装置を、インターネット上の中継サーバを介して互いに接続させる双方向通信システムが知られている。複数のクライアント装置のうち第１のクライアント装置は、中継サーバとの間で接続の確立を行い、接続された状態を維持する。第２のクライアント装置も同様に、中継サーバとの間で接続を確立する。第１および第２のクライアント装置と中継サーバとの間で接続が確立された後、例えば第１のクライアント装置からメッセージが送出されると、中継サーバは、このメッセージを第２のクライアント装置に転送する。クライアント装置の台数が大規模化した際には、中継サーバの数が複数台となる構成を考えることもできる。
【０００３】
このような双方向通信システムにおいて、複数の中継サーバのうち所定数の中継サーバをシャットダウンする（スケールインと呼ぶ）ことがある。例えば、夜間など、利用ユーザが少ない時間帯にスケールインを行い、消費電力の節約や、中継サーバのメンテナンスを行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−０７７８９０号公報
【特許文献２】特開２００８−３１１８５２号公報
【０００５】
【非特許文献１】ＲＦＣ  ６４５５  Ｔｈｅ  ＷｅｂＳｏｃｋｅｔ  Ｐｒｏｔｏｃｏｌ、［平成２７年１２月８日検索］、インターネット（ＵＲＬ：http://tools.ietf.org/html/rfc6455）
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来では、上述のような双方向通信システムにおいてスケールインを実施する場合、シャットダウンされる中継サーバに接続中のクライアント装置において、瞬間的に通信不可状態になるという問題があった。
【０００７】
すなわち、中継サーバがシャットダウンされた場合、その中継サーバに接続中のクライアント装置はそのままでは通信が行えなくなるため、他の利用可能な中継サーバに接続を切り替える必要がある。中継サーバの切り替えの後、メッセージの送信側と受信側のクライアント装置の両方において接続が可能になるまでの間、クライアント装置間でメッセージの通信が行えない状態となる。
【０００８】
本発明が解決する課題は、双方向通信において複数の中継サーバを切り換える際に発生する通信不可状態を回避可能な通信装置、通信システムおよび通信プログラムを提供することにある。
【課題を解決するための手段】
【０００９】
第１の実施形態の通信装置は、中継サーバを介して他の装置と通信を行い、移行元の第１の中継サーバから移行先の第２の中継サーバに接続先を切り替える際に、第２の中継サーバとの接続を確立させた後に、メッセージの送信先を第１の中継サーバから第２の中継サーバに切り替え、その後、第１の中継サーバとの接続を切断する。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１の実施形態に適用可能な通信システムの一例の構成を概略的に示すブロック図である。
【図２】図２は、第１の実施形態に適用可能な通信システムの一例の構成をより具体的に示すブロック図である。
【図３】図３は、情報処理装置として構成されるクライアント装置のハードウェア構成の例を示すブロック図である。
【図４】図４は、宅内機器として構成されるクライアント装置のハードウェア構成の例を示すブロック図である。
【図５】図５は、第１の実施形態に係るクライアント装置の機能を説明するための一例の機能ブロック図である。
【図６】図６は、第１の実施形態に係る通信部の機能を説明するための一例の機能ブロック図である。
【図７】図７は、第１の実施形態に係るクライアント装置による接続確立処理およびメッセージ送信処理を説明するための図である。
【図８】図８は、第１の実施形態に係る機器リストの例を示す図である。
【図９】図９は、第１の実施形態に係るクライアント装置による接続終了処理を説明するための図である。
【図１０】図１０は、第１の実施形態に係る中継サーバの移行処理を概略的に示す図である。
【図１１】図１１は、第１の実施形態に係る中継サーバの移行処理の際のクライアント装置における手順を示す一例のシーケンス図である。
【図１２】図１２は、第１の実施形態の第１の変形例に係る通信システムの構成の例を示すブロック図である。
【図１３】図１３は、第１の実施形態の第２の変形例に係る通信システムの構成の例を示すブロック図である。
【図１４】図１４は、第１の実施形態の第３の変形例に係る通信システムの構成の例を示すブロック図である。
【図１５】図１５は、第１の実施形態に係る通信システムをメッセージブローカシステムに適用した場合の接続確立時および接続終了時の処理を説明するための図である。
【図１６】図１６は、既存技術による映像合成システムの構成を概略的に示す図である。
【図１７】図１７は、第１の実施形態のさらに他の適用例に係る映像合成システムにおける接続確立および接続終了処理について説明するための図である。
【図１８】図１８は、第２の実施形態に係る通信処理について説明するための図である。
【図１９】図１９は、第２の実施形態に係る収集部における処理を示す一例のフローチャートである。
【発明を実施するための形態】
【００１１】
以下、実施形態に係る通信装置、通信システムおよび通信プログラムについて説明する。
【００１２】
（第１の実施形態）
図１は、第１の実施形態に適用可能な通信システムの一例の構成を概略的に示す。図１に示される通信システムは、通信路を介して設備機器を遠隔の情報端末から制御する遠隔制御システムであって、複数のクライアント装置１０と、複数の中継サーバ２０と、指示部３００ａとを含む。この通信システムは、実際には、例えば図２により具体的に示されるように、複数のクライアント装置１０と、複数の中継サーバ２０と、指示部３００ａとして機能する調停サーバ３０とがインターネットなどのネットワーク４０により互いに通信可能に接続されて構成される。
【００１３】
クライアント装置１０は、通信装置であって、例えば携帯容易な情報処理装置であるスマートフォン（多機能携帯電話）やタブレット型コンピュータを適用可能である。これに限らず、クライアント装置１０は、デスクトップ型のコンピュータを適用してもよい。また、クライアント装置１０は、例えばユーザの自宅に設置された宅内機器のうち、ＣＰＵ(Central  Processing  Unit)および通信インタフェース（Ｉ／Ｆ）を備え、ネットワーク４０に接続可能な機器を適用してもよい。このような機器として、例えば録画装置やエアーコンディショナが考えられる。
【００１４】
各実施形態では、クライアント装置１０および中継サーバ２０が双方向通信を行うために用いるプロトコルとして、ＷｅｂＳｏｃｋｅｔに準じたプロトコルを用いる。ＷｅｂＳｏｃｋｅｔは、ＩＥＴＦ(The  Internet  Engineering  Task  Force)が策定に関与し、プロトコルの仕様はＲＦＣ６４５５として開示されている（非特許文献１参照）。ＷｅｂＳｏｃｋｅｔプロトコルは、ＴＣＰ(Transmission  Control  Protocol)上で動作する。
【００１５】
クライアント装置１０は、ＷｅｂＳｏｃｋｅｔクライアントとして機能する。また、中継サーバ２０は、ＷｅｂＳｏｃｋｅｔサーバとして機能する。図１の例では、複数のクライアント装置１０と、複数の中継サーバ２０のうち１台の中継サーバ２０とがＷｅｂＳｏｃｋｅｔ接続（図中に「ＷＳ」として示す）により接続されている。
【００１６】
図３および図４は、クライアント装置１０のハードウェア構成の例を示す。図３は、情報処理装置として構成されるクライアント装置１０ａのハードウェア構成の例を示す。
【００１７】
図３において、クライアント装置１０ａは、ＣＰＵ１０００と、ＲＯＭ(Read  Only  Memory)１００１と、ＲＡＭ(Random  Access  Memory)１００２と、グラフィクスＩ／Ｆ１００３と、ストレージ１００５と、入力デバイス１００６と、データＩ／Ｆ１００７と、通信Ｉ／Ｆ１００８とを含み、これら各部がバス１０１０により互いに通信可能に接続される。
【００１８】
ストレージ１００５は、ハードディスクドライブや、フラッシュメモリといった不揮発性メモリであって、ＣＰＵ１０００を動作させるためのプログラムや、各種のデータが記憶される。ＲＯＭ１００１は、例えばクライアント装置１０を起動させるために用いるプログラムおよびデータが予め記憶される。ＣＰＵ１０００は、ストレージ１００５およびＲＯＭ１００１に記憶されるプログラムに従い、ＲＡＭ１００２をワークメモリとして用いて、このクライアント装置１０ａの全体の動作を制御する。
【００１９】
グラフィクスＩ／Ｆ１００３は、ＣＰＵ１０００によりプログラムに従い生成された表示情報を表示信号に変換して表示デバイス１００４に供給する。表示デバイス１００４は、例えばＬＣＤ(Liquid  Crystal  Display)とＬＣＤを駆動する駆動回路とを含み、グラフィクスＩ／Ｆ１００３から供給された表示信号に従った画面を表示する。入力デバイス１００６は、ユーザ操作に応じた信号を出力する。入力デバイス１００６は、表示デバイス１００４と一体的に形成されたタッチパネルを用いることができる。
【００２０】
データＩ／Ｆ１００７は、外部機器との間でデータの入出力を行うためのインタフェースであって、例えばＵＳＢ(Universal  Serial  Bus)を適用することができる。通信Ｉ／Ｆ１００８は、ＴＣＰ／ＩＰ(Transmission  Control  Protocol/Internet  Protocol)を通信プロトコルとして用い、ネットワーク４０を介した通信を制御する。
【００２１】
図４は、宅内機器として構成されるクライアント装置１０ｂのハードウェア構成の例を示す。なお、図４において、上述の図３と共通する部分には同一の符号を付して、詳細な説明を省略する。図４に示されるように、クライアント装置１０ｂは、ＣＰＵ１０００、ＲＯＭ１００１、ＲＡＭ１００２、ストレージ１００５、入力デバイス１００６、データＩ／Ｆ１００７および通信Ｉ／Ｆ１００８を含み、図３に示した情報処理装置としてのクライアント装置１０ａと略同様の構成を持つ。
【００２２】
クライアント装置１０ｂは、上述のクライアント装置１０ａと異なる構成として、グラフィクスＩ／Ｆ１００３および表示デバイス１００４の代わりに、機能部Ｉ／Ｆ１０２０と機能部１０２１とを含む。機能部１０２１は、クライアント装置１０ｂの宅内機器としての機能を実現する。例えば、クライアント装置１０ｂが録画装置である場合には、機能部１０２１は、テレビジョン信号受信機能などを含む。機能部Ｉ／Ｆ１０２０は、機能部１０２１に対するＣＰＵ１０００のインタフェースである。
【００２３】
図５は、第１の実施形態に係るクライアント装置１０の機能を説明するための一例の機能ブロック図である。この図５に示す構成は、上述した情報処理装置としてのクライアント装置１０ａと、宅内機器としてのクライアント装置１０ｂとに共通して適用できる。
【００２４】
図５において、クライアント装置１０は、メッセージ生成部１０１と、振分部１０２と、メッセージ処理部１０３と、収集部１０４と、接続管理部１０５と、機器管理部１０６と、通信部１０７とを含む。
【００２５】
これらメッセージ生成部１０１、振分部１０２、メッセージ処理部１０３、収集部１０４、接続管理部１０５、機器管理部１０６および通信部１０７は、ＣＰＵ１０００上で動作する通信プログラムにより実現される。これに限らず、これらメッセージ生成部１０１、振分部１０２、メッセージ処理部１０３、収集部１０４、接続管理部１０５、機器管理部１０６および通信部１０７の一部または全部を、互いに協働して動作するハードウェア回路により構成してもよい。
【００２６】
通信部１０７は、例えば、図６に例示されるように、それぞれ固有の識別情報（識別ＩＤ）により識別される接続部１０７ａおよび１０７ｂを含む。なお、図中では、接続部１０７ａおよび１０７ｂは、それぞれ接続部（＃１）および接続部（＃２）としても示されている。接続部１０７ａおよび１０７ｂは、ＲＦＣ６４５５で定められたＷｅｂＳｏｃｋｅｔ接続に対応し、ＷｅｂＳｏｃｋｅｔによる接続要求に応じて形成され、ＷｅｂＳｏｃｋｅｔによる接続＃１および接続＃２を確立する。
【００２７】
メッセージ生成部１０１は、送信側のクライアント装置１０が受信側のクライアント装置１０に対して送信するメッセージの生成を行う。メッセージ生成部１０１は、例えば遠隔制御システムにおいては、制御コマンドを記したメッセージを生成する。
【００２８】
振分部１０２は、メッセージ生成部１０１から渡されたメッセージを通信部１０７に渡し、通信部１０７に対して、複数の中継サーバ２０のうち何れかに送信するように送信依頼する。例えば、振分部１０２は、通信部１０７に対して、メッセージを、複数の中継サーバ２０のうち第１の中継サーバ２０および第２の中継サーバ２０のうち何れかに送信するように送信依頼する。振分部１０２は、後述する接続管理部１０５から、振り分け先の接続部１０７ａまたは接続部１０７ｂの識別情報を入力されることで、以降の振分先を切り替えることができる。
【００２９】
メッセージ処理部１０３は、後述の収集部１０４から渡されたメッセージに基づき所定の処理を行う。メッセージ処理部１０３は、例えば遠隔制御システムにおいては、メッセージに記述された制御コマンドに基づき、クライアント装置１０自身の状態に変更を行う。
【００３０】
収集部１０４は、接続部１０７ａまたは接続部１０７ｂを通じて受信したメッセージをメッセージ処理部１０３に渡す。収集部１０４は、接続管理部１０５から、受信元となる接続部１０７ａおよび１０７ｂの何れかの識別情報を入力されることで、以降の受信元を切り替えることができる。
【００３１】
接続管理部１０５は、接続部１０７ａおよび１０７ｂによる接続の確立と終了とを行う。さらに、後述の指示部３００ａからの移行指示の受信を契機として、振分部１０２と収集部１０４とが使用する接続部１０７ａおよび１０７ｂの移行処理を行う。移行処理の詳細については、後述する。
【００３２】
機器管理部１０６は、自身のクライアント装置１０と双方向通信を行う相手のクライアント装置１０の識別情報をＲＡＭ１００２やストレージ１００５に記憶する。
【００３３】
なお、第１の実施形態に係る通信プログラムは、インターネットなどのネットワーク４０に接続されたコンピュータ上に格納し、ネットワーク４０経由でダウンロードさせることにより提供される。また、第１の実施形態に係る通信プログラムを、インターネットなどのネットワーク４０経由で提供または配布するように構成してもよい。
【００３４】
これに限らず、第１の実施形態に係る通信プログラムを、インストール可能な形式または実行可能な形式のファイルでＣＤ(Compact  Disk)、ＤＶＤ(Digital  Versatile  Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供してもよい。これに限らず、通信プログラムを、ＲＯＭ１００１に予め記憶させて提供してもよい。
【００３５】
第１の実施形態に係る通信プログラムは、上述した各部（メッセージ生成部１０１、振分部１０２、メッセージ処理部１０３、収集部１０４、接続管理部１０５、機器管理部１０６および通信部１０７）を含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ１０００が例えばストレージ１００５から当該通信プログラムを読み出して実行することにより上記各部が主記憶装置（例えばＲＡＭ１００２）上にロードされ、各部が主記憶装置上に生成されるようになっている。
【００３６】
第１の実施形態に係る中継サーバ２０は、ＣＰＵ、ＲＯＭ、ＲＡＭ、ストレージおよび通信Ｉ／Ｆを備え、一般的なコンピュータと同等の構成を適用できるので、ハードウェア構成の詳細な説明は、省略する。第１の実施形態に係る中継サーバ２０は、ＷｅｂＳｏｃｋｅｔサーバとして機能する。中継サーバ２０は、クライアント装置１０からＷｅｂＳｏｃｋｅｔ接続確立の要求を受けると、ＲＦＣ６４５５で定められた手順により当該クライアント装置１０との接続を確立する。
【００３７】
さらに、中継サーバ２０は、双方向通信を行うペアを構成するクライアント装置１０の識別情報の対応関係を記憶する。中継サーバ２０は、この対応関係を用いて、一方のクライアント装置１０から送信されたメッセージを、当該クライアント装置１０とペアをなす他方のクライアント装置１０に転送する。このように、中継サーバ２０は、複数のクライアント装置１０間の双方向通信の中継役として機能する。
【００３８】
第１の実施形態に係る指示部３００ａは、中継サーバ２０のそれぞれに対し、例えば定期的に、現在のＷｅｂＳｏｃｋｅｔ接続の総数の取得要求を送信する。中継サーバ２０は、この取得要求を受けて、自身に接続されるＷｅｂＳｏｃｋｅｔ接続の接続数を取得し、指示部３００ａに対して応答する。指示部３００ａは、各中継サーバ２０から得た接続数の情報に基づいて、中継サーバ２０のスケールアウトやスケールインを実施するかを判断する。
【００３９】
例えば、指示部３００ａは、中継サーバ２０の性能値から、接続可能なＷｅｂＳｏｃｋｅｔ接続の上限数を算出し、上限数に対する現状の接続数の割合を算出する。そして、算出した割合を閾値と比較し、当該割合が何れの中継サーバ２０においても閾値を超えている場合に、スケールアウト（新規の中継サーバ２０のインスタンスの追加）を行うと判定する。一方、特定の中継サーバ２０における割合が閾値を下回っている場合に、スケールイン（当該中継サーバ２０のインスタンスの破棄）を行うと判定する。
【００４０】
指示部３００ａは、スケールインを行うと判定した場合、インスタンスを破棄する中継サーバ２０に対し、持続中のクライアント装置１０の接続を、別の中継サーバ２０に移行させるよう、移行指示を出す。この移行指示は、接続を移行させる先の中継サーバ２０を識別する識別情報を含む。移行指示を受けた中継サーバ２０は、当該中継サーバ２０に接続される各クライアント装置１０に対して、移行指示を送信する。この移行指示は、各クライアント装置１０に受信され、それぞれ接続管理部１０５に渡される。クライアント装置１０において、接続管理部１０５は、移行指示の受信を契機として、後述する移行処理を開始する。
【００４１】
（第１の実施形態に係る接続および終了処理）
次に、第１の実施形態に係る通信システムにおけるクライアント装置１０の接続確立時および接続終了時の処理について説明する。図７を用いて、第１の実施形態に係るクライアント装置１０ａおよび１０ｂによる接続確立処理およびメッセージ送信処理を説明する。
【００４２】
図７（ａ）は、中継サーバ２０に対して、始めに例えば宅内機器としてのクライアント装置１０ｂがＷｅｂＳｏｃｋｅｔ接続を確立し、次に、クライアント装置１０ｂの通信相手となる、情報処理装置としてのクライアント装置１０ａがＷｅｂＳｏｃｋｅｔ接続を確立する様子を示している。
【００４３】
先ず、一方のクライアント装置１０ｂは、接続管理部１０５により、クライアント装置１０ｂに対するユーザ操作や、電源オン操作といった所定のイベントを契機として、中継サーバ２０に対する接続確立処理を開始する。すなわち、クライアント装置１０ｂにおいて、接続管理部１０５は、クライアント装置１０ｂ自身を識別するクライアント識別情報（「Ｂ」とする）を含む接続確立依頼を中継サーバ２０に送信し、通信部１０７において接続部１０７ａを形成する（ステップＳ１０）。
【００４４】
中継サーバ２０は、クライアント装置１０ｂから送信されたクライアント識別情報「Ｂ」を、自身の記憶領域または外部のデータベースに記憶する（ステップＳ１１）。また、中継サーバ２０は、この接続確立依頼に応じて、クライアント装置１０ｂの中継サーバ２０に対する接続確立処理を行う。
【００４５】
次に、他方のクライアント装置１０ａは、接続管理部１０５により、クライアント装置１０ａ自身のクライアント識別情報（「Ａ」とする）と、通信したい相手のクライアント装置１０ｂのクライアント識別情報「Ｂ」とを含む接続確立依頼を中継サーバ２０に送信し、通信部１０７において接続部１０７ａを形成する（ステップＳ１２）。なお、クライアント装置１０ａは、通信相手のクライアント装置１０ｂのクライアント識別情報「Ｂ」を予め知っているものとする。
【００４６】
中継サーバ２０は、クライアント装置１０ａから送信された接続確立依頼に含まれるクライアント識別情報「Ａ」と、クライアント装置１０ｂから送信され記憶したクライアント識別情報「Ｂ」との対応関係（対応関係「Ａ−Ｂ」とする）を記憶する（ステップＳ１３）。そして、中継サーバ２０は、接続確立依頼に応じて、クライアント装置１０ａの中継サーバ２０に対する接続確立処理を行う。これらの処理によりクライアント装置１０ａとクライアント装置１０ｂとの間での、中継サーバ２０を介した双方向通信が可能な状態となる。
【００４７】
さらに、中継サーバ２０は、クライアント装置１０ａとの間で新規に接続確立が行われたことを、クライアント装置１０ａの通信相手であるクライアント装置１０ｂに通知する（ステップＳ１４）。これを、新規接続通知と呼ぶ。新規接続通知は、接続が確立されたクライアント装置１０ａのクライアント識別情報「Ａ」を含む。クライアント装置１０ｂは、この新規接続通知を接続部１０７ａにより受信し、機器管理部１０６に入力する。機器管理部１０６は、入力された新規接続通知に含まれるクライアント識別情報「Ａ」に基づき、識別情報の一覧（機器リスト）を作成する。
【００４８】
図８（ａ）は、第１の実施形態に係る、ステップＳ１２により受信されたクライアント識別情報「Ａ」に基づき作成された機器リストの例を示す。図８（ａ）の例では、機器リストに対し、クライアント識別情報「Ａ」が格納されている。機器管理部１０６は、作成した機器リストを、ＲＡＭ１００２やストレージ１００５に記憶する。このように、機器管理部１０６は、新規接続通知を受けると、受けた新規接続通知に含まれるクライアント識別情報を一覧に追加する。同様に、クライアント装置１０ａは、接続確立の完了に応じて、自身の機器管理部１０６の機器リストに通信相手のクライアント装置１０ｂのクライアント識別情報「Ｂ」を加える。
【００４９】
図７（ｂ）は、クライアント装置１０ｂからメッセージが送出された場合の処理の例を示す。クライアント装置１０ｂは、送信元のクライアント装置１０ｂのクライアント識別情報「Ｂ」と、宛先のクライアント装置１０ａのクライアント識別情報「Ａ」とを含むメッセージを、中継サーバ２０に向けて送信する（ステップＳ２０）。
【００５０】
中継サーバ２０は、このメッセージを解釈し、メッセージから各クライアント識別情報「Ａ」および「Ｂ」を抽出する。中継サーバ２０は、上述した接続確立処理の際に記憶した対応関係「Ａ−Ｂ」を参照して（ステップＳ２１）、クライアント識別情報「Ａ」および「Ｂ」が双方向通信を行うペアの関係にあるか否かを判定する。中継サーバ２０は、これらがペアの関係にあると判定した場合、当該メッセージをクライアント装置１０ａに向けて転送する（ステップＳ２２）。
【００５１】
一方、中継サーバ２０は、これらがペアの関係には無いと判定した場合、例えばクライアント装置１０ｂに対してエラーメッセージを送信する。
【００５２】
このように、中継サーバ２０は、互いに双方向通信を行うクライアント装置１０の識別情報の対応関係を管理する。ここで、中継サーバ２０において対応関係「Ａ−Ｂ」が記憶されている状態で、クライアント識別情報「Ｃ」を持つ別のクライアント装置１０が中継サーバ２０に対して接続確立依頼を行った場合について考える。また、この接続確立依頼における通信相手のクライアント識別情報が「Ａ」であるものとする。この場合、中継サーバ２０は、「Ａ−Ｂ」および「Ａ−Ｃ」という２つの対応関係を記憶することになる。
【００５３】
同様に、クライアント装置１０ｂにおいても、クライアント識別情報「Ｃ」のクライアント装置１０に関する新規接続通知を受けて、クライアント識別情報「Ｃ」を機器リストに追加する。図８（ｂ）は、図８（ａ）の状態にクライアント識別情報「Ｃ」が追加された機器リストの例を示す。
【００５４】
次に、図９を用いて、第１の実施形態に係るクライアント装置１０ａおよび１０ｂによる接続終了処理を説明する。ここでは、中継サーバ２０に対して、クライアント装置１０ａおよび１０ｂと、上述したクライアント識別情報「Ｃ」のクライアント装置１０とが接続されているものとする。したがって、中継サーバ２０は、「Ａ−Ｂ」および「Ｂ−Ｃ」という２つの対応関係を記憶している。
【００５５】
クライアント装置１０ａは、接続管理部１０５により、ユーザ操作など所定のイベントを契機として、自身のクライアント識別情報「Ａ」を含む接続終了通知を中継サーバ２０に送信する（ステップＳ３０）。中継サーバ２０は、この接続終了通知に応じて、記憶されるクライアント識別情報の対応関係を参照し、クライアント識別情報「Ａ」と対応関係にあるクライアント識別情報（この例ではクライアント識別情報「Ｂ」）を探索する。中継サーバ２０は、この探索により、対応関係「Ａ−Ｂ」および「Ｂ−Ｃ」を取得する。
【００５６】
中継サーバ２０は、取得した対応関係「Ａ−Ｂ」に応じて、クライアント装置１０ｂに対し、クライアント装置１０ａから接続終了通知が送信された旨を通知する。この通知を、離脱通知と呼ぶ（ステップＳ３１）。離脱通知は、接続終了通知の送信元であるクライアント装置１０ａのクライアント識別情報「Ａ」を含む。クライアント装置１０ｂは、受信した離脱通知を接続部１０７ａを通じて機器管理部１０６に入力する。機器管理部１０６は、離脱通知に基づき、機器リストに含まれるクライアント識別情報「Ａ」を削除する（ステップＳ３２）。図８（ｃ）は、図８（ｂ）の状態からクライアント識別情報「Ａ」が削除された機器リストの例を示す。
【００５７】
次に、中継サーバ２０は、記憶しているクライアント識別情報「Ａ」と、クライアント識別情報「Ａ」が含まれる対応関係「Ｂ−Ｃ」を削除する（ステップＳ３３）。そして、中継サーバ２０は、処理の完了をクライアント装置１０ａに通知する（ステップＳ３４）。クライアント装置１０ａは、この処理完了の通知を受けて中継サーバ２０とのＷｅｂＳｏｃｋｅｔ接続を切断し（ステップＳ３５）、自身の機器管理部１０６における機器リストから通信相手のクライアント装置１０ｂのクライアント識別情報「Ｂ」を削除して、一連の終了処理が完了する。
【００５８】
なお、上述では、離脱通知がクライアント装置１０から送出されるものとしているが、これはこの例に限定されない。例えば、クライアント装置１０側からの接続の強制切断や、予期しない理由による接続切断を中継サーバ２０が検出した場合に、中継サーバ２０が当該のクライアント装置１０との対応をもつクライアント装置１０に対して離脱通知を行う構成であってもよい。例えば、離脱通知として、ＭＱＴＴ(Message  Queueing  Telemetry  Transport)  における遺言の機構を利用することができる。
【００５９】
以上に説明したクライアント装置１０の接続確立時および終了時の処理により、クライアント装置１０は、現在自身と通信相手の状態にあるクライアント装置１０のクライアント識別情報を動的に記憶する。
【００６０】
（第１の実施形態に係る中継サーバの移行処理）
次に、第１の実施形態に係る中継サーバ２０の移行処理について説明する。図１０は、第１の実施形態に係る中継サーバ２０の移行処理を概略的に示す。図１０（ａ）に示されるように、通信システムが、２台の中継サーバ２０ａおよび２０ｂと、それぞれクライアント識別情報「Ｄ」、「Ｅ」および「Ｆ」を持つ３台のクライアント装置１０ｄ、１０ｅおよび１０ｆと、指示部３００ａとを含むものとする。また、クライアント装置１０ｄ、１０ｅおよび１０ｆは、それぞれ中継サーバ２０ａとの間でＷｅｂＳｏｃｋｅｔの接続を行っているとする。
【００６１】
さらに、クライアント装置１０ｅおよび１０ｆは、それぞれ、クライアント装置１０ｄを通信相手としており、クライアント装置１０ｄは、機器リストにクライアント識別情報「Ｅ」および「Ｆ」が格納され、クライアント装置１０ｅおよび１０ｆは、それぞれ、機器リストにクライアント識別情報「Ｄ」が格納されているものとする。さらにまた、中継サーバ２０ａは、対応関係「Ｄ−Ｅ」および「Ｄ−Ｆ」を記憶している。
【００６２】
この状態において、指示部３００ａにより、各クライアント装置１０ｄ〜１０ｆの接続を中継サーバ２０ａから中継サーバ２０ｂに移行する移行指示が、各クライアント装置１０ｄ〜１０ｆに出されたものとする。図１０（ｂ）は、この移行指示により各クライアント装置１０ｄ〜１０ｆの接続が中継サーバ２０ｂに移行された状態の例を示す。なお、移行指示には、移行先の中継サーバ２０ｂの識別情報が含まれている。移行先の中継サーバ２０ｂの識別情報としては、例えば、中継サーバ２０ｂのネットワーク４０上でのＩＰ(Internet  Protocol)アドレスを用いることができる。
【００６３】
図１１は、第１の実施形態に係る中継サーバの移行処理の際のクライアント装置における手順を示す一例のシーケンス図である。なお、図１１において、上述した図５および図６、ならびに、図１０と共通する部分には同一の符号を付して、詳細な説明を省略する。また、図１１に例示される手順は、各クライアント装置１０ｄ、１０ｅおよび１０ｆで共通である。ここでは、特に記載の無い限り、各クライアント装置１０ｄ、１０ｅおよび１０ｆをクライアント装置１０ｄで代表させて説明を行う。
【００６４】
図１１のシーケンス図による手順の開始に先立って、クライアント装置１０ｄでは、通信部１０７において接続部１０７ａが作成され、この接続部１０７ａにより、クライアント装置１０ｄと中継サーバ２０ａとの間の接続が確立されているものとする。また、この時点では、クライアント装置１０ｄと中継サーバ２０ｂとの間での接続確立は開始されておらず、接続部１０７ｂは作成されていない。
【００６５】
図１１において、指示部３００ａは、移行先の中継サーバ２０ｂの識別情報を含む移行指示を、中継サーバ２０ａに接続される各クライアント装置１０ｄ、１０ｅおよび１０ｆに送信する（ステップＳ１００）。クライアント装置１０ｄは、指示部３００ａから送信された移行指示を受信すると、受信した移行指示を接続管理部１０５に入力する。
【００６６】
接続管理部１０５は、入力された移行指示に応じて、移行指示により指定された中継サーバ２０ｂに対する接続確立依頼を発行し、ＲＦＣ６４５５で定められた手順に従って、中継サーバ２０ｂに対するＷｅｂＳｏｃｋｅｔ接続の確立処理を開始する（ステップＳ１０１）。これにより、通信部１０７において新規に接続部１０７ｂが作成される。接続部１０７ｂは、中継サーバ２０ｂとの間でＷｅｂＳｏｃｋｅｔ接続の確立処理を実行する。接続部１０７ｂは、中継サーバ２０ｂとの接続の確立に成功すると、その旨を接続管理部１０５に通知する（ステップＳ１０２）。
【００６７】
接続管理部１０５は、接続部１０７ｂからの成功通知を受け取ると、移行元の中継サーバ２０ａとの接続が維持されている接続部１０７ａに、移行先の中継サーバ２０ｂとの接続確立の完了を示す確立完了通知を送信する（ステップＳ１０３）。接続部１０７ａは、確立完了通知に、送信元のクライアント装置１０ｄのクライアント識別情報「Ｄ」を含めて、中継サーバ２０ａに送信する。接続部１０７ａは、確立完了通知の送信に成功すると、その旨を示す通知を接続管理部１０５に渡す（ステップＳ１０４）。
【００６８】
中継サーバ２０ａは、ステップＳ１０４の処理に応じてクライアント装置１０ｄの接続部１０７ａから送信された確立完了通知を受信すると、記憶された対応関係を参照して、クライアント装置１０ｄと対応するクライアント装置１０ｅおよび１０ｆに、当該確立完了通知を転送する。この確立完了通知の転送処理は、図７（ａ）のステップＳ１４で説明した新規接続通知の転送処理と対応する処理である。
【００６９】
接続管理部１０５は、機器管理部１０６に対して機器リスト取得要求を渡す（ステップＳ１０５）。機器管理部１０６は、この機器リスト取得要求に応じて機器リストを取得する（ステップＳ１０６）。機器管理部１０６は、取得した機器リストに基づき、現在クライアント装置１０ｄと通信状態にあるクライアント装置のクライアント識別情報を取得する。ステップＳ１０７で、接続管理部１０５は、取得した機器リストに含まれる全てのクライアント識別情報に対応する確立完了通知を受信するまで待機する。
【００７０】
すなわち、上述したように、中継サーバ２０ａと通信中のクライアント装置１０ｅおよび１０ｆも、クライアント装置１０ｄと同様にして指示部３００ａからの移行指示を受信している。したがって、クライアント装置１０ｅおよび１０ｆは、移行指示に応じてステップＳ１０１〜ステップＳ１０４の処理を行い、確立完了通知を、それぞれの接続部１０７ａから中継サーバ２０ａを介してクライアント装置１０ｄに送信していることになる。クライアント装置１０ｄにおいて、接続管理部１０５は、ステップＳ１０６で取得した機器リストに格納されるクライアント識別情報「Ｅ」および「Ｆ」に対応する確立完了通知が受信されるのを待機する。
【００７１】
ステップＳ１０７で、接続管理部１０５は、取得した機器リストに含まれる全てのクライアント識別情報に対応する確立完了通知を受信したと判定した場合、手順が次のステップＳ１０８に移行される。ステップＳ１０８で、接続管理部１０５は、振分部１０２に対し、以降にメッセージ生成部１０１から渡されたメッセージを、ステップＳ１０１で新規に作成された接続部１０７ｂを用いて送信するよう切り替える切替指示を出す。振分部１０２は、この切替指示に従い、メッセージを中継サーバ２０ｂに送信するための所定の処理（例えばメッセージに付加する宛先情報の設定）などを実行し、処理が完了すると、接続管理部１０５に対して切替完了を通知する（ステップＳ１０９）。
【００７２】
接続管理部１０５は、振分部１０２からの切替完了の通知を受け取ると、接続部１０７ａを用いて、中継サーバ２０ａに対して送信終了通知（ＦＩＮ）を送信する（ステップＳ１１０）。送信終了通知とは、その接続部１０７ａを通じたクライアント装置１０ｄからのメッセージ送信が今後行われないことを知らせる通知である。接続管理部１０５は、送信終了通知に送信元のクライアント装置１０ｄを示すクライアント識別情報「Ｄ」を含めて送信する。接続部１０７ａは、中継サーバ２０ａへの送信終了通知の送信が成功すると、その旨を示す通知を接続管理部１０５に渡す（ステップＳ１１１）。
【００７３】
中継サーバ２０ａは、クライアント装置１０ｄからの送信終了通知を受信すると、確立完了通知の場合と同様にして、受信した送信終了通知を、クライアント装置１０ｄと対応するクライアント装置１０ｅおよび１０ｆに向けて転送する。この送信終了通知の転送処理も、上述の確立完了通知の転送処理と同様に、図７（ａ）のステップＳ１４で説明した新規接続通知の転送処理と対応する処理である。
【００７４】
接続管理部１０５は、接続部１０７ａから成功通知を受け取ると、クライアント装置１０ｅおよび１０ｆから送信される送信終了通知を待機する（ステップＳ１１２）。
【００７５】
接続管理部１０５は、クライアント装置１０ｅおよび１０ｆの両方からの送信終了通知を受信することで、自身すなわちクライアント装置１０ｄに対して、接続部１０７ａを通じて今後どの相手からもメッセージが送信されないと判断できる。接続管理部１０５は、クライアント装置１０ｅおよび１０ｆの両方からの送信終了通知を受信すると、ＲＦＣ６４５５で定められた手順に従い、接続部１０７ａに対して接続終了依頼を送信し（ステップＳ１１３）、接続部１０７ａの中継サーバ２０ａへの接続の切断を行う。
【００７６】
接続部１０７ａは、接続の切断に成功すると、その旨を示す通知を接続管理部１０５に渡す（ステップＳ１１４）。接続管理部１０５は、接続部１０７ａから接続の切断の成功を示す通知を受け取ると、指示部３００ａに対してステップＳ１００で受けた移行指示に応じた移行が完了した旨を通知する（ステップＳ１１５）。
【００７７】
以上述べた手順により、第１の実施形態によれば、各クライアント装置１０ｄ、１０ｅおよび１０ｆは、接続中の中継サーバ２０ａから中継サーバ２０ｂに移行する際に、移行先の中継サーバ２０ｂとの各接続部１０７ｂによる接続が確立され、各クライアント装置１０ｄ、１０ｅおよび１０ｆと中継サーバ２０ｂとの間での双方向通信が可能な状態になったと判定したタイミングで、メッセージ送信の送信先を中継サーバ２０ｂに切り替える。そのため、中継サーバ２０ａから中継サーバ２０ｂに接続を移行する際のメッセージ送信の瞬断が回避できる。
【００７８】
さらに、第１の実施形態によれば、各クライアント装置１０ｄ、１０ｅおよび１０ｆは、移行元の中継サーバ２０ａとの各接続部１０７ａを通じたメッセージの送受信がこれ以上発生しないと判定したタイミングで、接続部１０７ａによる接続を終了する。そのため、リソース消費の解放を速やかに行うことが可能となる。
【００７９】
（第１の実施形態の第１の変形例）
次に、第１の実施形態の第１の変形例について説明する。上述した第１の実施形態では、指示部３００ａが各クライアント装置１０に直接的に移行指示を送信する構成としていたが、これはこの例に限定されない。図１２は、第１の実施形態の第１の変形例に係る通信システムの構成の例を示す。図１２に例示されるように、第１の実施形態の第１の変形例では、指示部３００ｂは、移行指示を、接続中の中継サーバ２０を介して各クライアント装置１０に送信するようにしている。
【００８０】
図１２の例の場合、指示部３００ｂは、各中継サーバ２０から、ＷｅｂＳｏｃｋｅｔ接続の接続数を収集する。そして、指示部３００ｂは、各中継サーバ２０から収集した各ＷｅｂＳｏｃｋｅｔ接続数の情報に基づき、例えばある中継サーバ２０に接続中の全てのクライアント装置１０の接続先を、他の中継サーバ２０に移行させるか否かという判定を行う。
【００８１】
例えば、指示部３００ｂは、各中継サーバ２０のうち、ＷｅｂＳｏｃｋｅｔ接続数が閾値を超えている中継サーバ２０に接続中の全てのクライアント装置１０の接続を、他の中継サーバ２０に移行させる。移行先の中継サーバ２０は、例えば、各ＷｅｂＳｏｃｋｅｔ接続数のうち最も少ないＷｅｂＳｏｃｋｅｔ接続数の中継サーバ２０から順に選択することが考えられる。
【００８２】
そして、指示部３００ｂは、移行先の中継サーバ２０の識別情報（ＩＰアドレスなど）を含んだ移行指示を、移行元の中継サーバ２０に対し送信する。移行元の中継サーバ２０は、この移行指示を受信すると、当該移行元の中継サーバ２０に接続する全てのクライアント装置１０に対して移行指示を複製して送信する。以降の処理は、図１１のステップＳ１０１からの処理と同様である。
【００８３】
（第１の実施形態の第２の変形例）
次に、第１の実施形態の第２の変形例について説明する。図１３は、第１の実施形態の第２の変形例に係る通信システムの構成の例を示す。上述した第１の実施形態では、指示部３００ａを、例えば調停サーバ３０といった独立したハードウェアを用いて構成していたが、第１の実施形態の第２の変形例では、図１３に例示されるように、指示部３００ｃを各中継サーバ２０’内部に構成する。
【００８４】
この場合、指示部３００ｃは、自身が属する中継サーバ２０’の各種状態（ＷｅｂＳｏｃｋｅｔ接続数や、ＣＰＵ使用率、メモリ使用量、その他機器の動作状態など）を監視する。各中継サーバ２０’の指示部３００ｃ間で通信を行い、自身が属する中継サーバ２０以外の中継サーバ２０’を合わせて監視対象としてもよい。これにより、各指示部３００ｃは、例えば自身が属する中継サーバ２０’に障害が生じたなどの判断を契機として移行指示を行うことができる。
【００８５】
（第１の実施形態の第３の変形例）
次に、第１の実施形態の第３の変形例について説明する。図１４は、第１の実施形態の第３の変形例に係る通信システムの構成の例を示す。図１４に示される通信システムは、図１の通信システムの構成に対して決定部３１０を追加すると共に、指示部３００ｄを、特定の中継サーバ２０に対して終了指示を出すものとしている。また、各クライアント装置１０’は、後述する移行先の問い合わせを行うように、構成が若干、変更されている。
【００８６】
すなわち、上述の第１の実施形態では、移行指示の中に、移行先の中継サーバ２０の識別情報が含まれる構成としていたが、これはこの例に限定されない。第１の実施形態の第３の変形例では、指示部３００ｄは、特定の中継サーバ２０に対して終了指示を出し、終了指示を出した中継サーバ２０に接続中の各クライアント装置１０’をどの中継サーバ２０に移行させるかの指示は出さない。終了指示を受けた中継サーバ２０は、移行先の中継サーバ２０の識別情報を持たない移行指示を、各クライアント装置１０’に送信する。
【００８７】
この場合、各クライアント装置１０’は、中継サーバ２０から移行指示を受け取ると、決定部３１０に対して、どの中継サーバ２０に移行するかを問い合わせる。決定部３１０は、第１の実施形態の第１の変形例による指示部３００ｂと同様にして、各中継サーバ２０のＷｅｂＳｏｃｋｅｔ接続の接続数を取得する。決定部３１０は、各中継サーバ２０から収集した各ＷｅｂＳｏｃｋｅｔ接続数の情報に基づき、移行先の中継サーバ２０を決定し、移行先に決定された中継サーバ２０の識別情報を、各クライアント装置１０’からの問い合わせに対する応答とする。各クライアント装置１０’は、この応答で示された中継サーバ２０に対し、図１１のステップＳ１０１からの処理を実行して、中継サーバ２０の移行処理を行う。
【００８８】
（第１の実施形態の第４の変形例）
次に、第１の実施形態の第４の変形例について説明する。上述した第１の実施形態では、クライアント装置１０が互いに新規接続通知と離脱通知とを送信し合うことにより、それぞれの接続管理部１０５における機器リストを最新の状態に更新していたが、これはこの例に限定されない。クライアント装置１０は、新規接続通知と離脱通知とを行わず、代わりに、例えば、過去に自身宛に送信されたメッセージの送信元のクライアント装置１０のクライアント識別情報の履歴を記憶しておき、ここから機器リストを構成してもよい。
【００８９】
この場合、例えば、図７（ｂ）のステップＳ２２でのメッセージ送信において、中継サーバ２０は、クライアント装置１０ａに転送するメッセージに対して、送信元のクライアント装置１０ｂのクライアント識別情報を付加する。クライアント装置１０ａの収集部１０４は、このメッセージを受信した際に、メッセージに付加された送信元のクライアント識別情報を機器管理部１０６に渡す。機器管理部１０６は、収集部１０４から渡されたクライアント識別情報を、例えばストレージ１００５に蓄積的に記憶する。こうすることで、機器管理部１０６は、今まで自身のクライアント装置１０ａにメッセージを送ったことがあるクライアント装置１０ｂのクライアント識別情報を管理することができる。
【００９０】
（第１の実施形態の第５の変形例）
次に、第１の実施形態の第５の変形例について説明する。上述した第１の実施形態では、図１１のステップＳ１１０で送信される送信終了通知に送信元のクライアント装置１０のクライアント識別情報が含まれているとしていたが、これはこの例に限定されない。第１の実施形態の第５の変形例では、送信終了通知は、送信元のクライアント装置１０のクライアント識別情報を含まないものとする。この場合、接続管理部１０５は、機器リストに含まれるクライアント装置１０の個数分の送信終了通知を受信するまで待機を行う。
【００９１】
例えば、図１０（ａ）および図１０（ｂ）を参照し、各クライアント装置１０ｄ、１０ｅおよび１０ｆが、中継サーバ２０ａに接続された状態（図１０（ａ）参照）から中継サーバ２０ｂに接続された状態（図１０（ｂ）参照）に移行する場合、例えばクライアント装置１０ｄの接続管理部１０５は、２個の送信終了通知を受け取るまで待機する。
【００９２】
以上説明したように、第１の実施形態および第１の実施形態の各変形例によれば、クライアント装置１０が移行元の中継サーバ２０から移行先の中継サーバ２０に接続を切り替える際に、移行先の中継サーバ２０との接続の確立を、移行元の中継サーバ２０との接続の切断に先立って実行している。そのため、接続の切替に伴う瞬間的な通信不可状態を回避することができる。
【００９３】
さらに、第１の実施形態および第１の実施形態の各変形例では、クライアント装置１０は、移行先の中継サーバ２０との接続完了通知を互いに送り合い、同じ中継サーバ２０に接続中の全てのクライアント装置１０が接続確立の完了に応じて、メッセージを送信する中継サーバ２０の切り替えを行っている。そのため、接続確立の完了するタイミングのクライアント装置１０毎の差異に伴うメッセージ送信の瞬断を回避できる。
【００９４】
さらに、第１の実施形態および第１の実施形態の各変形例では、クライアント装置１０は、互いに送信終了通知を送り合い、自身宛のメッセージがこれ以上無いことを知ったタイミングで、古い接続を切断する。これにより、接続が不要になったタイミングでリソース消費が解放されるため、中継サーバ２０をシャットダウン可能な状態に速やかに移行できる。例えば、中継サーバ２０のインスタンスが時間単位で課金される場合、中継サーバ２０のインスタンス利用料金を低減することができる。
【００９５】
さらに、第１の実施形態および第１の実施形態の各変形例では、各クライアント装置１０は、自身と通信するクライアント装置１０の機器リストを常時管理しておき、中継サーバ２０の移行処理の際には、機器リストに含まれる全てのクライアント装置１０からの送信終了通知を待機する。これにより、双方向通信を行うクライアント装置１０の対が複数ある場合でも、移行元の中継サーバ２０に対する接続を切断するタイミングを適正に制御することができる。
【００９６】
また、例えば、各クライアント装置１０を携帯端末および宅内機器とし、携帯端末から宅内機器の遠隔制御を行う通信システムを考える。従来では、中継サーバ２０の切替時には、制御の指示を行ってから実際に完了が確認できるまでに時間差を生じることとなり、利用者にとって使用感を損なうおそれがある。別の例では、災害時の緊急通知など即時性の要求されるメッセージの伝達を行う通信システムにおいては、中継サーバ２０の切替時には、通知の遅れにより初期対応の遅れをもたらし、問題が発生するおそれがある。第１の実施形態および第１の実施形態の各変形例に係る通信システムをこれらの事例に適用することで、これらの問題を解決可能である。
【００９７】
（第１の実施形態の別の適用例）
次に、第１の実施形態の別の適用例として、第１の実施形態に係る通信システムを、メッセージブローカシステムに適用した例について説明する。システム構成としては、図１を用いて説明した第１の実施形態による通信システムと同様に、ネットワーク４０などの通信路を介してクライアント装置１０と中継サーバ２０とが接続し、クライアント装置１０間の双方向通信を実現する構成を適用できる。
【００９８】
メッセージブローカシステムでは、中継サーバ２０は、メッセージを中継するブローカサーバとして機能する。メッセージブローカシステムで送受信されるメッセージには、トピックと呼ばれるアドレスが付加されており、メッセージ送信を行いたいクライアント装置１０（パブリッシャと呼ぶ）は、ブローカサーバ（中継サーバ２０）に接続した後に、このトピックを宛先としてメッセージの送信を行う。またメッセージを受信したいクライアント（サブスクライバと呼ぶ）は、予めブローカサーバに接続し、ブローカサーバに対して自分が購読したいトピック名を伝えておく。パブリッシャがトピックに対してメッセージ送信すると、そのトピックを購読する全てのサブスクライバに対してブローカサーバからメッセージが配信される。
【００９９】
以降では、メッセージブローカシステムにおいて、クライアント装置１０による接続確立処理および接続終了処理と、ブローカサーバ（中継サーバ２０）の移行処理の例について説明する。
【０１００】
図１５を用いて、第１の実施形態に係る通信システムをメッセージブローカシステムに適用した場合の、クライアント装置１０の接続確立時および接続終了時の処理を説明する。図１５（ａ）および図１５（ｂ）において、ブローカサーバ２１は、上述した中継サーバ２０に対応する。また、各クライアント装置１０ｇおよび１０ｈは、コンピュータとしてのクライアント装置１０ａに対応する。クライアント装置１０ｇおよび１０ｈのクライアント識別情報は、それぞれ「Ｇ」および「Ｈ」であるとする。
【０１０１】
図１５（ａ）は、ブローカサーバ２１に対して、例えば始めにクライアント装置１０ｇがＷｅｂＳｏｃｋｅｔ接続を確立し、次に、クライアント装置１０ｈがＷｅｂＳｏｃｋｅｔ接続を確立する様子を示している。
【０１０２】
クライアント装置１０ｇは、ブローカサーバ２１との接続確立処理を行い（ステップＳ４０）、接続が確立されると、通信相手のグループを管理するためのトピック「ｇｒｏｕｐ１」に対して購読を行う（ステップＳ４１）。例えば、クライアント装置１０ｇの接続管理部１０５は、購読を行うトピック「ｇｒｏｕｐ１」の情報を、例えばＲＡＭ１００２あるいはストレージ１００５に記憶する。
【０１０３】
次に、クライアント装置１０ｇは、購読を行うトピック「ｇｒｏｕｐ１」に対して、自身のクライアント識別情報「Ｇ」を含むメッセージ「ｊｏｉｎ  Ｇ」を送信する（ステップＳ４２）。このメッセージ「ｊｏｉｎ  Ｇ」は、同トピック「ｇｒｏｕｐ１」を購読する他のクライアント装置（例えばクライアント装置１０ｈ）に対して、自身が通信相手として参加したことを通知するメッセージである。
【０１０４】
次に、別のクライアント装置１０ｈからも、同様に接続確立処理を行う（ステップＳ４３）。クライアント装置１０ｈは、ブローカサーバ２１との接続が確立されると、トピック「ｇｒｏｕｐ１」に対して購読を行う（ステップＳ４４）。そして、クライアント装置１０ｈは、トピック「ｇｒｏｕｐ１」に対して、自身のクライアント識別情報「Ｈ」を含むメッセージ「ｊｏｉｎ  Ｈ」を送信する（ステップＳ４５）。このメッセージ「ｊｏｉｎ  Ｈ」は、トピック「ｇｒｏｕｐ１」を購読するクライアント装置１０ｇに対して配信される（ステップＳ４６）。
【０１０５】
クライアント装置１０ｇは、このメッセージ「ｊｏｉｎ  Ｈ」の受信に応じて、自身の接続管理部１０５における機器リストにクライアント識別情報「Ｈ」を追加し、機器リストを更新する。各クライアント装置１０ｇおよび１０ｈは、定期的に自身のクライアント識別情報「Ｇ」および「Ｈ」をメッセージ「ｊｏｉｎ  Ｇ」および「ｊｏｉｎ  Ｈ」により送信することで、互いに機器リストを最新状態に保つようにしてもよい。
【０１０６】
図１５（ｂ）は、クライアント装置１０ｈが接続を終了する際の処理の例を示す。クライアント装置１０ｈは、接続を終了する際に、接続確立時と同じトピック「ｇｒｏｕｐ１」宛てに、離脱を示すメッセージとして、自身のクライアント識別情報「Ｈ」を含むメッセージ「ｒｅｍｏｖｅ  Ｈ」を送信する（ステップＳ５０）。このメッセージ「ｒｅｍｏｖｅ  Ｈ」は、ブローカサーバ２１を介してクライアント装置１０ｇに配信される（ステップＳ５１）。
【０１０７】
クライアント装置１０ｇは、メッセージ「ｒｅｍｏｖｅ  Ｈ」を受信すると、受信したメッセージ「ｒｅｍｏｖｅ  Ｈ」に含まれるクライアント識別情報「Ｈ」に応じて、クライアント装置１０ｇの接続管理部１０５の機器リストから、クライアント識別情報「Ｈ」を削除する。この処理により、クライアント装置１０ｇは、自身と通信するクライアント装置を管理する機器リストを最新状態に保つことができる。
【０１０８】
これに限らず、例えばクライアント装置１０ｈは、ＭＱＴＴなどのメッセージプロトコルで規定されている遺言の機能を用いて離脱通知を行ってもよい。この場合、例えばクライアント装置１０ｈは、接続確立の後に、離脱通知と同様のメッセージを、ＭＱＴＴに規定される遺言としてブローカサーバ２１に登録しておく。ブローカサーバ２１は、クライアント装置１０ｈとの接続が切断された場合に、遺言に基づき、トピック「ｇｒｏｕｐ１」を購読する他のクライアント装置１０ｇに離脱通知を送信する。
【０１０９】
ブローカサーバ２１を切り替える際の処理の手順は、図１１のシーケンス図のステップＳ１０１からの手順に対して、確立完了通知を行うステップＳ１０３と、送信終了通知を行うステップＳ１１０とが異なる。この第１の実施形態の他の適用例では、トピック「ｇｒｏｕｐ１」に対して、クライアント装置１０ｇからの、移行先のブローカサーバ２１に対する接続部１０７ｂによる接続確立の完了時に、例えば「ＥＳＴＡＢＬＩＳＨ  Ｇ」といった、送信元のクライアント装置１０ｇのクライアント識別情報「Ｇ」を含む確立完了通知を送信する。同様に、送信終了時に、移行元のブローカサーバ２１に対する接続部１０７ａを通じたクライアント装置１０ｇからのメッセージ送信が今後行われない旨の通知として、例えば「ＦＩＮ  Ｇ」といった、送信元のクライアント装置１０ｇのクライアント識別情報「Ｇ」を含む送信終了通知を送信する。この送信終了通知の後、クライアント装置１０ｈは、ブローカサーバ２０とのＷｅｂＳｏｃｋｅｔ接続を終了させる（ステップＳ５２）。
【０１１０】
このように、第１の実施形態に係る通信システムは、メッセージブローカシステムに対しても、同様に適用可能であって、第１の実施形態と同様の効果を得ることが可能となる。特に、メッセージブローカシステムに第１の実施形態を適用した場合、既存のメッセージブローカの実装に改変を加えることなく第１の実施形態の効果を得ることが可能であるため、開発の手数が少なくて済む。
【０１１１】
（第１の実施形態のさらに別の適用例）
次に、第１の実施形態のさらに別の適用例として、第１の実施形態に係る通信システムを、映像合成システムに適用した例について説明する。システム構成としては、図１を用いて説明した第１の実施形態による通信システムと同様に、ネットワーク４０などの通信路を介してクライアント装置１０と中継サーバ２０とが接続し、クライアント装置１０間の双方向通信を実現する構成を適用できる。
【０１１２】
図１６は、既存技術による映像合成システムの構成を概略的に示す。映像合成システムは、複数の映像サーバ１１と、映像合成サーバ２２とを含む。複数の映像サーバ１１は、それぞれ映像ソース５０ａ、５０ｂおよび５０ｃを送信する。映像合成サーバ２２は、複数の映像サーバ１１から送信された映像ソース５０ａ、５０ｂおよび５０ｃを合成して、１以上のビューワ１２に送信する。このとき、映像合成サーバ２２は、複数のビューワ１２に対して、映像ソース５０ａ、５０ｂおよび５０ｃを合成した合成映像を送信する。ビューワ１２は、例えば図３に示したコンピュータとしてのクライアント装置１０ａに対応し、搭載された映像表示プログラムにより、映像合成サーバ２２から送信された合成映像を表示する。
【０１１３】
ここで、ビューワ１２は、映像合成を行う際のレイアウトを予め映像合成サーバ２２に指定することができる。映像合成サーバ２２は、ビューワ１２に指定されたレイアウトで映像ソース５０ａ、５０ｂおよび５０ｃを合成し、合成映像を当該レイアウトを指定したビューワ１２に対して送信する。図１６の例では、映像合成サーバ２２は、各ビューワ１２に指定されたレイアウトで映像ソース５０ａ、５０ｂおよび５０ｃを合成した合成映像５１ａおよび５１ｂを、レイアウトを指定したビューワ１２に送信している。
【０１１４】
図１７を用いて、第１の実施形態のさらに他の適用例に係る映像合成システムにおけるクライアント装置の接続確立および接続終了処理について説明する。ここで、図１７において、映像合成サーバ２２ａおよび２２ｂは、それぞれ図１の中継サーバ２０に対応する。また、各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂが、それぞれ図１のクライアント装置１０に対応する。各映像サーバ１１ａ、１１ｂおよび１１ｃは、それぞれ映像ソース５０ａ、５０ｂおよび５０ｃを送信する。また、指示部３００ｅは、移行指示を、各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂに送信する。
【０１１５】
なお、映像サーバ１１ａ、１１ｂおよび１１ｃは、それぞれクライアント識別情報「Ｖａ」、「Ｖｂ」および「Ｖｃ」を持ち、ビューワ１２ａおよび１２ｂは、それぞれクライアント識別情報「Ｂａ」および「Ｂｂ」を持つものとする。この場合における、各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂが、例えば映像合成サーバ２２ａとの接続を確立する際の処理について、図１７（ａ）を参照しながら説明する。
【０１１６】
映像合成サーバ２２ａは、各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂの２つの種類のクライアント装置のうち一方の種類のクライアント装置からの接続確立依頼を受信すると、他方の種類のクライアント装置に対して、新規接続通知を送信する。
【０１１７】
例えば、映像合成サーバ２２ａは、一方の種類のクライアント装置としてのビューワ１２ａからの接続確立依頼を受信した場合、記憶している対応関係に基づき、他方の種類のクライアント装置としての映像サーバ１１ａ、１１ｂおよび１１ｃに対して、ビューワ１２ａが映像合成サーバ２２ｂに新規に接続される旨を示す新規接続通知を送信する。映像サーバ１１ａ、１１ｂおよび１１ｃは、ビューワ１２ａの新規接続通知を受信すると、受信した新規接続通知に含まれるクライアント識別情報「Ｂａ」に基づき、それぞれ機器リストを更新する。
【０１１８】
各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂが例えば映像合成サーバ２２ａと接続確立した状態で、各映像サーバ１１ａ、１１ｂおよび１１ｃの機器管理部１０６は、ビューワ１２ａおよび１２ｂのクライアント識別情報「Ｂａ」および「Ｂｂ」を含む機器リストを記憶している。また、各ビューワ１２ａおよび１２ｂの機器管理部１０６は、各映像サーバ１１ａ、１１ｂおよび１１ｃのクライアント識別情報「Ｖａ」、「Ｖｂ」および「Ｖｃ」を含む機器リストを記憶している。さらに、映像合成サーバ２２ａは、これら各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂの対応関係を記憶している。
【０１１９】
各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂが、例えば映像合成サーバ２２ａに対する接続を終了する際の処理も、同様にして実行される。すなわち、映像合成サーバ２２ａは、映像合成サーバ２２ａに接続中の各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂの２つの種類のクライアント装置のうち一方の種類のクライアント装置からの離脱通知を受信すると、他方の種類のクライアント装置に対して離脱通知を送信する。
【０１２０】
例えば、映像合成サーバ２２ａは、一方の種類のクライアント装置としてのビューワ１２ａからの離脱通知を受信した場合、記憶している対応関係に基づき、他方の種類のクライアント装置としての映像サーバ１１ａ、１１ｂおよび１１ｃに対してビューワ１２ａが離脱する旨を示す離脱通知を送信する。映像サーバ１１ａ、１１ｂおよび１１ｃは、ビューワ１２ａの離脱通知を受信すると、受信した離脱通知に含まれるクライアント識別情報「Ｂａ」に基づき、それぞれ機器リストを更新する。
【０１２１】
各映像サーバ１１ａ、１１ｂおよび１１ｃ、ならびに、各ビューワ１２ａおよび１２ｂは、指示部３００ｅから移行指示を受け取ると、図１１のステップＳ１０１からの処理を実行して、例えば接続中の映像合成サーバ２２ａから移行先の映像合成サーバ２２ｂへの接続の移行処理を行う。
【０１２２】
（第２の実施形態）
次に、第２の実施形態について説明する。上述した第１の実施形態および第１の実施形態の各変形例では、クライアント装置１０は、中継サーバ２０の切替時に、送信終了通知を送信するようにしている。これに対して、第２の実施形態に係る通信システムでは、クライアント装置１０は、送信終了通知の送信を行わずに、送信されるメッセージに所定の規則でユニークに変化する値、例えば昇順の通し番号を付加し、この通し番号に基づき中継サーバ２０の切替完了を検知する。
【０１２３】
図１８を用いて、第２の実施形態に係る通信処理について説明する。なお、第２の実施形態に係る通信システムは、図１を用いて説明した第１の実施形態に係る通信システムの構成をそのまま適用可能である。図１８は、クライアント装置１０から第２の実施形態の動作に関連の深い部分（図５および図６の収集部１０４、接続管理部１０５、接続部１０７ａ、接続部１０７ｂ）を抜き出して示している。以降、適宜、図１、図５および図６を参照しながら説明を行う。
【０１２４】
また、図１８の例では、例えば図１１のステップＳ１０８までの処理が実行され、接続部１０７ａが移行元の中継サーバ２０に接続され、接続部１０７ｂが移行先の中継サーバ２０に接続されているものとする。
【０１２５】
図５を参照し、振分部１０２は、メッセージ生成部１０１から渡されたメッセージに対して、メッセージの順序を識別するための通し番号（シーケンス番号）を付与する。ネットワーク４０を介したデータの送信は、一般的には、データを所定サイズに分割してヘッダ情報などを付加したパケット単位で行われる。例えば、振分部１０２は、シーケンス番号をパケット毎に生成してヘッダに格納する。以下では、シーケンス番号は、１ずつ増加する値であるものとする。
【０１２６】
また、図１８において、収集部１０４は、受信したメッセージからシーケンス番号を抽出し、抽出したシーケンス番号の値がメッセージ毎に連続的に増加することを確認する。接続管理部１０５は、図１１のステップＳ１０８において振分部１０２への切替指示を行った後で、図１８に示すように、収集部１０４に対して待機依頼を行う。
【０１２７】
収集部１０４は、接続部１０７ａおよび接続部１０７ｂから渡されたメッセージに付加されているシーケンス番号を監視し、接続部１０７ａから最後に受信したメッセージのシーケンス番号（この例では「３」）の次のメッセージ（シーケンス番号「４」のメッセージ）を接続部１０７ｂから受信するまで待機する。具体的な例として、収集部１０４は、接続部１０７ａから受信したメッセージに付加されたシーケンス番号のうち最大のシーケンス番号よりも１だけ大きい値のシーケンス番号が付加されたメッセージを接続部１０７ｂから受信するまで待機する。
【０１２８】
収集部１０４は、当該メッセージを受信すると、接続部１０７ａから接続部１０７ｂへの切り替えが完了したと判定し、処理を接続管理部１０５に戻す。そして、接続管理部１０５は、移行元の中継サーバ２０に接続される接続部１０７ａの接続終了依頼を行う。このような手順によっても、接続管理部１０５は、自身のクライアント装置１０に対して、接続部１０７ａを通じて今後どの通信相手からもメッセージが送信されないことを知ることができる。
【０１２９】
図１９は、第２の実施形態に係る収集部１０４における処理を示す一例のフローチャートである。ステップＳ２００で、収集部１０４は、接続部１０７ａまたは接続部１０７ｂから、受信されたメッセージを受け取る。次のステップＳ２０１で、収集部１０４は、受信したメッセージが付加されるシーケンス番号を取得する。
【０１３０】
次のステップＳ２０２で、収集部１０４は、ステップＳ２０１で取得したシーケンス番号が、取得済みのシーケンス番号のうち最大のシーケンス番号の次の番号（値が１だけ大きい番号）であるか否かを判定する。収集部１０４は、当該シーケンス番号が最大のシーケンス番号の次の番号ではないと判定した場合（ステップＳ２０２、「Ｎｏ」）、処理をステップＳ２００に戻し、次のメッセージに対する処理を行う。
【０１３１】
一方、収集部１０４は、当該シーケンス番号が最大のシーケンス番号の次の番号であると判定した場合（ステップＳ２０２、「Ｙｅｓ」）、処理をステップＳ２０３に移行させる。ステップＳ２０３で、収集部１０４は、当該シーケンス番号が付加されるメッセージを接続部１０７ａおよび１０７ｂの何れから受け取ったかを示す取得元情報（接続ＩＤ）を取得する。収集部１０４は、取得元情報と、ステップＳ２０１で取得したシーケンス番号とを関連付けてＲＡＭ１００２などに記憶する。
【０１３２】
次のステップＳ２０４で、収集部１０４は、ステップＳ２０３で取得した取得元情報と、ステップＳ２０１で取得したシーケンス番号よりも１つ前の（値が１つ小さい）シーケンス番号に関連付けられた取得元情報とを比較し、これらが異なる取得元を示しているか否かを判定する。例えば、ステップＳ２０３で取得した取得元情報（接続ＩＤ）が接続部１０７ｂを示し、１つ前のシーケンス番号に関連付けられた取得元情報が接続部１０７ａを示している場合、異なっていると判定する。収集部１０４は、取得元が同じであると判定した場合（ステップＳ２０４、「Ｎｏ」）、処理をステップＳ２００に戻す。
【０１３３】
収集部１０４は、取得元が異なっていると判定した場合（ステップＳ２０４、「Ｙｅｓ」）、処理をステップＳ２０５に移行する。ステップＳ２０５で、収集部１０４は、切り替え完了を接続管理部１０５に通知する。このステップＳ２０５の処理は、例えば、図１１のステップＳ１０９〜ステップＳ１１１の処理に対応する。
【０１３４】
なお、各実施形態は、上述したそのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上述の実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、異なる実施形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１３５】
１０，１０’，１０ａ，１０ｂ，１０ｄ，１０ｅ，１０ｆ，１０ｇ，１０ｈ  クライアント装置
１１，１１ａ，１１ｂ、１１ｃ  映像サーバ
１２ａ，１２ｂ  ビューワ
２０，２０’，２０ａ，２０ｂ  中継サーバ
２１  ブローカサーバ
２２，２２ａ，２２ｂ  映像合成サーバ
３０  調停サーバ
４０  ネットワーク
１０１  メッセージ生成部
１０２  振分部
１０３  メッセージ処理部
１０４  収集部
１０５  接続管理部
１０６  機器管理部
１０７  通信部
１０７ａ，１０７ｂ  接続部
３００ａ，３００ｂ，３００ｃ，３００ｄ  指示部
３１０  決定部
【図１】
0006559587.tif 000002
【図２】
0006559587.tif 000003
【図３】
0006559587.tif 000004
【図４】
0006559587.tif 000005
【図５】
0006559587.tif 000006
【図６】
0006559587.tif 000007
【図７】
0006559587.tif 000008
【図８】
0006559587.tif 000009
【図９】
0006559587.tif 000010
【図１０】
0006559587.tif 000011
【図１１】
0006559587.tif 000012
【図１２】
0006559587.tif 000013
【図１３】
0006559587.tif 000014
【図１４】
0006559587.tif 000015
【図１５】
0006559587.tif 000016
【図１６】
0006559587.tif 000017
【図１７】
0006559587.tif 000018
【図１８】
0006559587.tif 000019
【図１９】
0006559587.tif 000020