(57)【要約】【課題】  新たな冗長化を講じることなく、可用性を担保することができるブローカ装置を提供すること。【解決手段】  実施形態によれば、ブローカ装置は、第２のクライアント装置によって購読されるトピックに対する購読要求を、第２のクライアント装置から受信する自購読情報受信部と、第１のクライアント装置から、トピックに関連する出版データを受信する自出版データ受信部と、自出版データ受信部によって受信された出版データを、第２のクライアント装置へ送信する自出版データ送信部と、自出版データ受信部によって受信された出版データを、他ブローカ装置へ送信する他出版データ送信部とを備える。【選択図】図１
2020017118.tif 000002
【特許請求の範囲】
【請求項１】
第１のクライアント装置から受信した出版データを、第２のクライアント装置および他ブローカ装置へ送信するブローカ装置であって、
前記第２のクライアント装置によって購読されるトピックに対する購読要求を、前記第２のクライアント装置から受信する自購読情報受信部と、
前記第１のクライアント装置から、前記トピックに関連する出版データを受信する自出版データ受信部と、
前記自出版データ受信部によって受信された出版データを、前記第２のクライアント装置へ送信する自出版データ送信部と、
前記自出版データ受信部によって受信された出版データを、前記他ブローカ装置へ送信する他出版データ送信部とを備えた、ブローカ装置。
【請求項２】
前記他ブローカ装置から、前記トピックに関連する出版データを受信する他出版データ受信部と、
前記自出版データ受信部および前記他出版データ受信部によって受信された前記出版データから、最新の出版データを前記トピック毎に抽出し保持する最新出版データ保持部とを備え、
前記自出版データ送信部は、前記購読要求に関連するトピックの最新の出版データを、前記最新出版データ保持部から取得し、前記第２のクライアント装置へ送信する、請求項１に記載のブローカ装置。
【請求項３】
前記他ブローカ装置によって購読されるトピックに対する購読要求を、前記他ブローカ装置から受信する他購読情報管理部を備え、
前記他出版データ送信部は、前記他購読情報管理部によって受信された購読要求に関連するトピックに関連する最新の出版データを、前記最新出版データ保持部から取得し、前記他ブローカ装置へ送信する、請求項２に記載のブローカ装置。
【請求項４】
前記ブローカ装置によって購読されるトピックを管理するとともに、前記管理しているトピックに変化があった場合には、このトピックを前記他ブローカ装置へ送信する自購読情報管理部をさらに備え、
前記他出版データ受信部は、前記自購読情報管理部によって管理されているトピックを購読するクライアント装置が存在しない場合には、新たな購読登録の購読要求を、前記自購読情報管理部へ出力する、請求項３に記載のブローカ装置。
【請求項５】
前記他出版データ受信部は、前記他購読情報管理部によって受信された購読要求に関連するトピックのうち、２つ以上のブローカ装置で購読されているトピックと、前記自購読情報管理部によって管理されている前記トピックとを購読するクライアント装置が存在しない場合には、購読解除の購読要求を前記自購読情報管理部へ出力する、請求項４に記載のブローカ装置。
【請求項６】
前記他出版データ受信部は、ブローカ装置毎に購読される前記トピックの数を計算し、その最小値が前記自購読情報管理部によって管理される前記トピックの数の合計値を上回る場合、新たな購読登録の購読要求を、前記自購読情報管理部へ出力する、請求項４に記載のブローカ装置。
【請求項７】
前記他ブローカ装置の終了または異常を検知する終了検知部をさらに備え、
前記終了検知部によって前記他ブローカ装置の終了または異常が検知された場合、前記他購読情報管理部は、前記他ブローカ装置から、前記購読要求を受信しない、請求項３に記載のブローカ装置。
【請求項８】
前記トピック毎に、前記出版データの送受信に要求される信頼性の指標値を管理するとともに、前記出版データの複製が必要か否かを判定する指標値管理部をさらに備え、
前記他購読情報管理部は、前記他ブローカ装置から、購読解除の購読要求があった前記トピックについて、前記指標値管理部によって、前記出版データの複製が必要であると判定された場合に、購読登録の購読要求を、前記自購読情報管理部へ出力する、請求項４に記載のブローカ装置。
【請求項９】
前記他出版情報データ送信部から、複数の前記他ブローカ装置へ送信される前記出版データを、前記他ブローカ装置別に、一定時間毎に１つの集約済出版データに集約する集約部と、
前記集約部によって集約された前記集約済出版データを、予め定められた第１のアルゴリズムに従って圧縮する圧縮部とをさらに備えた、請求項１乃至８のうち何れか１項に記載のブローカ装置。
【請求項１０】
前記自出版データ受信部は、前記第１のクライアント装置から受信した前記出版データの受信時刻を記録し、
さらに、現在時刻から前記一定時間経過した時刻と、前記受信時刻との差が、前記トピック毎に予め定められた最大待機時間を超える前記出版データを、前記集約部による集約の対象であると判定するリアルタイム性判定部を備えた、請求項９に記載のブローカ装置。
【請求項１１】
前記他ブローカ装置から送信され、前記他出版データ受信部によって受信された、複数の出版データが集約および圧縮されてなる集約済出版データを、予め定められた第２のアルゴリズムに従って展開することによって、前記圧縮されてなる集約済出版データから、圧縮前の前記集約済出版データを復元する展開部と、
前記展開部によって復元された前記圧縮前の集約済出版データを分割して、前記圧縮前の集約済出版データから、集約前の複数の出版データを復元する分割部とをさらに備えた、請求項２乃至１０のうち何れか１項に記載のブローカ装置。
【請求項１２】
複数のブローカ装置と接続可能なクライアント装置であって、
前記複数のブローカ装置のうち、接続先のブローカ装置から送信された、複数の出版データが集約および圧縮されてなる集約済出版データを展開して、圧縮前の前記集約済出版データを復元し、前記復元された前記集約済出版データを分割して、集約前の出版データを復元する分割展開部と、
前記接続先のブローカ装置へ送信される複数の出版データを、それぞれ関連するトピック毎に集約して集約済出版データを生成し、前記生成された集約済出版データを圧縮する集約圧縮部と、
前記集約圧縮部によって圧縮された前記集約済出版データを、前記接続先のブローカ装置へ送信するとともに、前記接続先のブローカ装置から送信された前記集約済出版データを受信して、前記分割展開部へ提供する通信部とを備えた、クライアント装置。
【請求項１３】
前記接続先のブローカ装置の異常を検出すると、接続先を別のブローカ装置へ変更する異常検出部と、
前記接続先のブローカ装置の負荷増大を検出すると、接続先を別のブローカ装置へ接続先を変更する負荷検出部とをさらに備えた、請求項１２に記載のクライアント装置。
【請求項１４】
第１のクライアント装置から受信した出版データを、第２のクライアント装置および他ブローカ装置へ送信するために、ブローカ装置によって実施される通信方法であって、
前記ブローカ装置が、
前記第２のクライアント装置によって購読されるトピックに対する購読要求を、前記第２のクライアント装置から受信する工程と、
前記第１のクライアント装置から、前記トピックに関連する出版データを受信する工程と、
前記受信された出版データを、前記第２のクライアント装置へ送信する工程と、
前記受信された出版データを、前記他ブローカ装置へ送信する工程とを含む、通信方法。
【請求項１５】
第１のクライアント装置から受信した出版データを、第２のクライアント装置および他ブローカ装置へ送信するためのプログラムであって、
前記第２のクライアント装置によって購読されるトピックに対する購読要求を、前記第２のクライアント装置から受信する機能、
前記第１のクライアント装置から、前記トピックに関連する出版データを受信する機能、
前記受信された出版データを、前記第２のクライアント装置へ送信する機能、
前記受信された出版データを、前記他ブローカ装置へ送信する機能、をコンピュータに実現させるためのプログラム。
【請求項１６】
複数のクライアント装置と、複数のブローカ装置とから構成される通信システムであって、
前記複数のブローカ装置のうち少なくとも１つのブローカ装置は、
前記複数のクライアント装置のうち第２のクライアント装置によって購読されるトピックに対する購読要求を、前記第２のクライアント装置から受信する自購読情報受信部と、
前記複数のクライアント装置のうち第１のクライアント装置から、前記トピックに関連する出版データを受信する自出版データ受信部と、
前記自出版データ受信部によって受信された出版データを、前記第２のクライアント装置へ送信する自出版データ送信部と、
前記自出版データ受信部によって受信された出版データを、前記複数のブローカ装置のうち他ブローカ装置へ送信する他出版データ送信部とを備え、
前記複数のクライアント装置のうち少なくとも１つのクライアント装置は、
前記複数のブローカ装置のうち、接続先のブローカ装置から送信された、複数の出版データが集約および圧縮されてなる集約済出版データを展開して、圧縮前の前記集約済出版データを復元し、前記復元された前記集約済出版データを分割して、集約前の出版データを復元する分割展開部と、
前記接続先のブローカ装置へ送信される複数の出版データを、それぞれ関連するトピック毎に集約して集約済出版データを生成し、前記生成された集約済出版データを圧縮する集約圧縮部と、
前記集約圧縮部によって圧縮された前記集約済出版データを、前記接続先のブローカ装置へ送信するとともに、前記接続先のブローカ装置から送信された前記集約済出版データを受信して、前記分割展開部へ提供する通信部とを備えた、通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、出版・購読型（パブリッシュ・サブスクライブ）モデルに基づく通信に適用されるブローカ装置、クライアント装置、通信システム、通信方法、およびプログラムに関する。
【背景技術】
【０００２】
近年、分散アプリケーションにおいて非同期での出版データ授受が可能な通信方式として、出版・購読型（パブリッシュ・サブスクライブ）モデルと呼ばれる通信方式が知られている。
【０００３】
出版・購読型モデルによれば、特許文献１に開示されているように、情報の購読者は、所望する情報のみを効率的に受信することが可能となる。
【０００４】
特許文献１で開示されている技術によれば、出版・購読型モデルに基づく通信において、ブローカ装置の冗長化により信頼性を担保することができ、さらにコンテンツへのアクセスを制御することによってセキュリティ確保も実現することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２８７１４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１で開示されている技術では、ブローカ装置の役割が細分化されており、冗長化する場合には各ブローカ装置についてそれぞれ冗長化する必要がある。さらに、特定の役割を担うブローカ装置に障害が発生した場合には、他のブローカ装置が正常であっても可用性を担保することが不可能となる。
【０００７】
本発明が解決しようとする課題は、新たな冗長化を講じることなく、可用性を担保することができるブローカ装置、ブローカ装置と出版・購読型モデルに基づく通信を行うクライアント装置、ブローカ装置とクライアント装置とを含む通信システム、および通信システムにおいて適用される通信方法、ならびにプログラムを提供することである。
【課題を解決するための手段】
【０００８】
実施形態のブローカ装置は、第１のクライアント装置から受信した出版データを、第２のクライアント装置および他ブローカ装置へ送信するブローカ装置であって、第２のクライアント装置によって購読されるトピックに対する購読要求を、第２のクライアント装置から受信する自購読情報受信部と、第１のクライアント装置から、トピックに関連する出版データを受信する自出版データ受信部と、自出版データ受信部によって受信された出版データを、第２のクライアント装置へ送信する自出版データ送信部と、自出版データ受信部によって受信された出版データを、他ブローカ装置へ送信する他出版データ送信部とを備える。
【図面の簡単な説明】
【０００９】
【図１】第１の実施形態の通信システムの構成例を示す概念図である。
【図２】他ブローカ装置購読情報管理表の一例を示す図である。
【図３】第１の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【図４】自ブローカ装置購読情報管理表の一例を示す図である。
【図５】クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【図６】購読情報購読数管理表の一例を示す図である。
【図７】ブローカ装置購読数管理表の一例を示す図である。
【図８】他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【図９】クライアント装置からの出版データ出版要求時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【図１０】他ブローカ装置からの出版データ送信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【図１１】他ブローカ装置の終了時および異常検出時における処理手順の一例を示すフローチャートである。
【図１２】第１の実施形態の通信システムの変形例を示す概念図である。
【図１３】第１の実施形態の通信システムの変形例に適用されるブローカ装置およびサブブローカ装置の構成例を示すブロック図である。
【図１４】第２の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【図１５】他購読情報管理表の一例を示す図である。
【図１６】自購読情報管理表の一例を示す図である。
【図１７】クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【図１８】他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【図１９】第３の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【図２０】送信待機リストの一例を示す図である。
【図２１】最大待機時間リストおよび時間条件の一例を示す図である。
【図２２】圧縮集約済出版データのパケット形式を例示するデータ構造図である。
【図２３】クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【図２４】出版要求に応じた出版データ送信時における処理手順の一例を示すフローチャートである。
【図２５】他ブローカ装置からの出版データ送信時における処理手順の一例を示すフローチャートである。
【図２６】第３の実施形態の通信システムの変形例に適用されるクライアント装置の構成例を示す概念図である。
【図２７】最大待機時間リストの一例を示す図である。
【図２８】送信待機リストの一例を示す図である。
【図２９】圧縮集約済データのパケット形式を例示するデータ構造図である。
【図３０】クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【図３１】購読情報（トピック）毎にパケットの集約・圧縮および送信処理を行う際における処理手順の一例を示すフローチャートである。
【図３２】ブローカ装置からの出版データ送信時における処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、本発明の各実施形態の通信システムを、図面を参照して説明する。
【００１１】
なお、以下の各実施形態の説明において、同一部分については、同一符号を用いて示し、重複説明を避ける。
【００１２】
（第１の実施形態）
図１は、第１の実施形態の通信システムの構成例を示す概念図である。
【００１３】
通信システム１は、ネットワーク２０を介して互いに通信可能に接続された複数のブローカ装置１０と、複数のブローカ装置１０のうちの何れかとネットワーク２０を介して通信可能に接続された任意の数のクライアント装置３０とからなる。
【００１４】
図１に示す例では、ネットワーク２０を介して互いに通信可能に接続された４つのブローカ装置１０（＃０〜＃３）と、これらブローカ装置１０（＃０〜＃３）のうちの何れかにネットワーク２０を介して通信可能に接続されたクライアント装置３０（＃１〜＃６）とが図示されている。
【００１５】
図１に示す例ではまた、ブローカ装置１０（＃１）に、クライアント装置３０（＃１）、（＃２）、（＃３）が通信可能に接続され、ブローカ装置１０（＃２）に、クライアント装置３０（＃４）、（＃５）が通信可能に接続され、ブローカ装置１０（＃３）に、クライアント装置３０（＃６）が通信可能に接続されている。
【００１６】
ネットワーク２０は、例えばＬＡＮ等のローカルな回線であってもよいし、インターネットや専用回線等の広域な有線通信回線や、３Ｇ等の広域な無線通信回線とすることができる。
【００１７】
ブローカ装置１０とクライアント装置３０との間で授受される情報群は「トピック」によって分類される。クライアント装置３０は、受信したいトピックを、接続しているブローカ装置１０に登録する。以降、この登録動作を「購読」と称する。
【００１８】
また、クライアント装置３０は、接続しているブローカ装置１０へ、トピックに関連する出版データを送信することができる。以降、この送信動作を「出版」と称する。
【００１９】
ブローカ装置１０は、クライアント装置３０からトピックとともに出版データが出版された場合、このトピックを購読しているクライアント装置３０へ、出版データを送信する。例えば図１において、クライアント装置３０（＃１）が、情報群Ａというトピックを購読している場合、ブローカ装置１０（＃１）は、クライアント装置３０（＃２）から情報群Ａというトピックに関連する出版データが出版されると、この出版データをクライアント装置３０（＃１）のみへ転送する。このように、クライアント装置３０（＃１）は、購読している出版データのみを受信することができる。
【００２０】
複数のブローカ装置１０が存在する場合、各ブローカ装置１０は、例えば、図２に示すような他ブローカ装置購読情報管理表２００を保持することによって、各ブローカ装置１０において購読されているトピックに関する情報を共有する。
【００２１】
図２は、他ブローカ装置購読情報管理表の一例を示す図である。
【００２２】
他ブローカ装置購読情報管理表２００（以下、単に「管理表２００」と称する）は、一例として、購読されるブローカ装置１０を示す購読ブローカ装置ｍ１と、購読ブローカ装置ｍ１で指定されたブローカ装置１０において購読されるトピックを示す購読情報（トピック）ｍ２との２つの項目から構成されるレコードが積まれたデータテーブルである。管理表２００は、ブローカ装置１０内の図示しないストレージに記憶されており、ブローカ装置１０内の各部位によって参照されることが可能である。
【００２３】
図２に例示する管理表２００では、ブローカ装置１０（＃１）において情報群Ａ、情報群Ｂ、情報群Ｃというトピックが購読され、ブローカ装置１０（＃２）において情報群Ａ、情報群Ｃというトピックが購読され、ブローカ装置１０（＃３）において情報群Ｂというトピックが購読されることが示されている。
【００２４】
管理表２００を参照することによって、ブローカ装置１０は、クライアント装置３０から出版データが出版された場合、この出版データがどのトピックに関連しているのかに基づいて、他のどのブローカ装置１０へ転送すべきかを判定する。
【００２５】
例えば、クライアント装置３０（＃３）が、情報群Ｂというトピックに関連する出版データをブローカ装置１０（＃１）へ出版した場合、ブローカ装置１０（＃１）は、管理表２００より、ブローカ装置１０（＃３）がこの出版データを必要としていると判定し、ブローカ装置１０（＃３）へ転送する。
【００２６】
このように、通信システム１は、必要最小限の出版データしか転送しないので、ネットワーク帯域を効率的に利用する。
【００２７】
また、ＭＱＴＴ（Ｍｅｓｓａｇｅ  Ｑｕｅｕｅ  Ｔｅｌｅｍｅｔｒｙ  Ｔｒａｎｓｐｏｒｔ）等の出版・購読型モデルを採用するプロトコルの中には、各ブローカ装置１０が、トピック毎に最新の出版データを保持する機能（以下、「リテイン機能」と称する）を有するものがある。
【００２８】
リテイン機能によれば、クライアント装置３０は、出版データが出版された後に購読を開始した場合であっても、購読するトピックに関連する最新の出版データを常に取得することが可能となる。
【００２９】
また、例えば、クライアント装置３０は、バッテリ駆動タイプであれば、常に通信セッションを保持できる訳ではない。しかしながら、リテイン機能によれば、バッテリ駆動タイプのクライアント装置３０のみならず、間歇的に起動するタイプのクライアント装置３０であっても、ブローカ装置１０に対して毎回通信セッションを張り、購読要求を行い、最新の出版データを取得し、所定の処理を実施した後に通信セッションを切断し、省電力状態に移行することも可能である。
【００３０】
リテイン機能によればさらに、クライアント装置３０が異常終了した場合であっても、再起動後に最新の出版データを取得することもできる。
【００３１】
ところで、すべてのブローカ装置１０に対して、最新の出版データを保持させようとすると、出版時にすべての出版データを、すべてのブローカ装置１０へ転送する必要がある。しかしながら、すべてのブローカ装置１０が、すべての出版データを必ずしも必要とするとは限らない。このため、出版されたすべての出版データを、すべてのブローカ装置１０へ転送することは、通信リソースの浪費となり、非効率的である。そこで、通信システム１は、通信効率向上のために、出版データに関連するトピックの購読者であるクライアント装置３０が接続されているブローカ装置１０のみへ出版データを転送する。
【００３２】
例えば、購読ブローカ装置と、購読情報（トピック）との関係が、管理表２００に例示されるような場合、ブローカ装置１０（＃１）へ、情報群Ｂというトピックに関連する出版データが出版されると、ブローカ装置１０（＃１）は、この出版データを、ブローカ装置１０（＃３）のみへ転送する。ブローカ装置１０（＃３）は、転送された出版データを保持する。
【００３３】
一方、情報群Ｂというトピックが、ブローカ装置１０（＃１）以外の複数のブローカ装置１０において購読されている場合、情報群Ｂというトピックに関連する出版データが、ブローカ装置１０（＃１）へ出版されると、ブローカ装置１０（＃１）は、この出版データを、情報群Ｂが購読されているすべてのブローカ装置１０へ転送する。出版データを転送された各ブローカ装置１０は、各々出版データを保持する。
【００３４】
ところで、最新の出版データが、１つのブローカ装置１０にしか保持されていない場合、このブローカ装置１０に異常が生じると、最新の出版データが喪失される恐れがある。これは信頼性の観点から好ましくない。そこで通信システム１では、以下に説明するように、通信の効率性を維持しつつ、信頼性をも向上させながら、出版データの保持状態に応じて、出版データの冗長性を担保する機能を有するブローカ装置１０を採用している。
【００３５】
図３は、本実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【００３６】
ブローカ装置１０は、通信部１０２、通信部１０４、自購読情報受信部１０６、自購読情報管理部１０８、自出版データ受信部１１０、自出版データ送信部１１２、最新出版データ保持部１１４、他出版データ送信部１１６、他出版データ受信部１１８、他購読情報管理部１２０、および終了検知部１２２を備える。
【００３７】
通信部１０２は、ネットワーク２０を介して、自ブローカ装置１０以外の他ブローカ装置１０と通信し、自ブローカ装置１０内の各部位からの情報を、ネットワーク２０を介して他ブローカ装置１０へ送信したり、逆に、他ブローカ装置１０から送信された情報をネットワーク２０を介して受信し、自ブローカ装置１０内の各部位へ出力する。
【００３８】
通信部１０４は、ネットワーク２０を介して、クライアント装置３０と通信し、自ブローカ装置１０内の各部位からの情報を、ネットワーク２０を介してクライアント装置３０へ送信したり、逆に、クライアント装置３０から送信された情報をネットワーク２０を介して受信し、自ブローカ装置１０内の各部位へ出力する。
【００３９】
なお、以下の説明では、例として、自ブローカ装置１０をブローカ装置１０（＃０）とし、他ブローカ装置１０をブローカ装置１０（＃１）、（＃２）、（＃３）とする。さらに、説明の容易のために、他ブローカ装置１０（＃１）、（＃２）、（＃３）については、単に他ブローカ装置１０として表す。
【００４０】
自購読情報受信部１０６は、クライアント装置３０によって購読される情報群であるトピックに対する購読要求ＫＲを、通信部１０４を介して、購読要求元のクライアント装置３０（例えば、クライアント装置３０（＃２））から受信する。
【００４１】
自購読情報受信部１０６は、購読要求ＫＲが購読登録要求である場合には、自購読情報管理部１０８に対して、購読要求ＫＲで指定されたトピックと、購読要求元のクライアント装置３０とを、例えば図４に例示される自ブローカ装置購読情報管理表２０５を使用して管理させる。
【００４２】
図４は、自ブローカ装置購読情報管理表の一例を示す図である。
【００４３】
自ブローカ装置購読情報管理表２０５（以下、単に「管理表２０５」と称する）は、自ブローカ装置１０（＃０）において購読される購読情報（トピック）を示す自ブローカ装置購読情報ｍ３と、自ブローカ装置購読情報ｍ３で指定された購読情報を購読するクライアント装置３０を示す購読クライアント装置ｍ４との２つの項目から構成されるレコードが積まれたデータテーブルである。管理表２０５は、ブローカ装置１０内の図示しないストレージに記憶されており、ブローカ装置１０内の各部位によって参照されることが可能である。
【００４４】
図４に例示する管理表２０５では、自ブローカ装置１０（＃０）において、情報群Ａというトピックが、クライアント装置３０（＃１）によって購読されることが示されている。
【００４５】
自出版データ受信部１１０は、出版元のクライアント装置３０（例えば、クライアント装置３０（＃１））から、通信部１０４を介して、トピックおよびその出版データＳＤを受信する。
【００４６】
また、自購読情報受信部１０６が受信した購読要求ＫＲが、購読解除要求である場合には、自購読情報管理部１０８は、管理表２０５から、購読要求元のクライアント装置３０が購読クライアント装置ｍ４に書き込まれているレコードを削除する。このように、管理表２０５は、自ブローカ装置１０（＃０）に接続されたクライアント装置３０の購読情報（トピック）を管理するために使用される。
【００４７】
自購読情報受信部１０６が受信した購読要求ＫＲが、購読解除要求である場合にはさらに、自購読情報管理部１０８が、他ブローカ装置１０の購読状況を考慮して、他ブローカ装置１０への購読解除の通知可否を決定する。この決定の際、自購読情報管理部１０８は、例えば、管理表２００を使用して、購読解除の対象とされたトピックを購読している他ブローカ装置１０（購読ブローカ装置）の数を判定し、判定された数が２以上の場合にのみ購読解除を行うアルゴリズムを適用する。これによって、購読ブローカ装置１０の数が１である場合には、購読解除されても購読解除は行われないので、出版データＳＤの冗長性を引き続き確保できる。
【００４８】
また、このアルゴリズムでは、自ブローカ装置１０（＃０）が、大量のトピックを購読している場合、トラフィックの偏りが生じる可能性が高い。一方、購読しているトピックが最も少ないブローカ装置１０が、当該トピックを購読すると、トラフィックを効率的に分散させることができる。そこで、購読ブローカ装置１０の数が２以上ではない場合、自購読情報管理部１０８は、他ブローカ装置１０と自ブローカ装置１０（＃０）との購読数を比較し、自ブローカ装置１０（＃０）の購読数が最も少ない場合にのみ購読を継続するようにしてもよい。
【００４９】
自出版データ送信部１１２は、自出版データ受信部１１０によって受信された出版データＳＤを、通信部１０４を介して、購読要求元のクライアント装置３０（例えば、クライアント装置３０（＃２））へ送信する。出版データＳＤの送信先であるクライアント装置３０は、例えば管理表２０５を参照して決定される。管理表２０５によれば、自ブローカ装置購読情報ｍ３として指定されたトピックが情報群Ａである場合、送信先は、クライアント装置３０（＃１）であると決定される。
【００５０】
他出版データ送信部１１６は、自出版データ受信部１１０によって受信された出版データＳＤを、通信部１０２を介して、他ブローカ装置１０へ送信する。送信元のブローカ装置１０を決定する際には、例えば管理表２００が使用される。管理表２００から、出版データＳＤに関連する購読情報（トピック）ｍ２を把握し、対応する購読ブローカ装置ｍ１を読み取ることによって、送信先のブローカ装置１０が決定される。
【００５１】
他出版データ受信部１１８は、他ブローカ装置１０から、通信部１０２を介して、トピックおよびその出版データＳＤを受信する。
【００５２】
他購読情報管理部１２０は、他ブローカ装置１０が必要とするトピック（他ブローカ装置１０に接続するクライアント装置３０が購読しているトピック）を受信し、例えば管理表２００を使用して管理する。
【００５３】
最新出版データ保持部１１４は、前述したリテイン機能を実現するために、自出版データ受信部１１０および他出版データ受信部１１８によって受信された出版データＳＤから、最新の出版データＳＤをトピック毎に抽出し、保持する。
【００５４】
他購読情報管理部１２０はさらに、新規の購読要求ＫＲを、他ブローカ装置１０から受信した場合、それが購読登録要求であれば、管理表２００に登録するとともに、最新出版データ保持部１１４が、最新の出版データＳＤを保持している場合には、他出版データ送信部１１６に対して、その最新の出版データＳＤを、最新出版データ保持部１１４から取得させ、取得した出版データＳＤを、この出版データＳＤの購読を開始した他ブローカ装置１０へ送信させる。
【００５５】
なお、複数の他ブローカ装置１０から最新の出版データＳＤが送信されることを回避するため、他購読情報管理部１２０は、各ブローカ装置１０に単なる整理番号としてブローカ番号を振っておき、最新の出版データＳＤを保持するブローカ装置１０のうち、最小のブローカ番号を振られたブローカ装置１０のみの出版データＳＤの送信を許可するなど、１つのブローカ装置１０のみが最新の出版データＳＤを送信する仕組みを採用してよい。
【００５６】
また、他購読情報管理部１２０は、ブローカ番号を、整理番号として単純に付番することに限らず、ブローカ装置１０の能力に応じて付番するようにしてもよい。例えば、能力の高いブローカ番号１０ほど小さいブローカ番号を付番するようにすれば、最新の出版データＳＤを保持するブローカ装置１０のうち、最も能力の高いブローカ装置１０のみの出版データＳＤの送信を許可できるようになる。
【００５７】
さらに、購読クライアント装置３０が存在しないにも関わらず出版データＳＤを受信し続けることを回避するため、他購読情報管理部１２０は、他ブローカ装置１０が購読開始したトピックの購読数が２（自ブローカ装置１０（＃０）は含まない）になった時点で、自ブローカ装置１０（＃０）がそのトピックを購読しており、かつ購読クライアント装置３０が存在しない場合には、購読情報を削除し、購読解除要求である購読要求ＫＲを送信するようにしてもよい。
【００５８】
さらにまた、他購読情報管理部１２０は、他ブローカ装置１０からの購読要求ＫＲが、購読解除要求である場合に購読ブローカ装置１０の数が２以下になることを回避するために、購読ブローカ装置１０の数が１になる場合には、自ブローカ装置１０（＃０）が購読数最小の場合で、かつ購読数最小のブローカ装置１０の中で最も小さいブローカ番号を有する場合に、そのトピックを購読することとし、購読要求ＫＲを、他ブローカ装置１０へ送信するようにしてもよい。
【００５９】
自出版データ送信部１１２は、購読要求ＫＲで指定されたトピックの最新の出版データＳＤを、最新出版データ保持部１１４から取得し、購読要求元のクライアント装置３０（例えば、クライアント装置３０（＃２））へ送信する。出版データＳＤの転送先であるクライアント装置３０は、前述したように、例えば管理表２０５を参照して決定される。
【００６０】
なお、最新出版データ保持部１１４に最新の出版データＳＤが保持されていない場合、すなわち、どのクライアント装置３０も出版データＳＤを出版していない場合、自出版データ送信部１１２は、上述した送信処理を行わない。
【００６１】
他購読情報管理部１２０は、他ブローカ装置１０によって購読される情報群であるトピックに対する購読要求ＫＲを、通信部１０２を介して他ブローカ装置１０から受信する。そして、受信した購読要求ＫＲに応じて、管理表２００の内容を更新する。例えば、購読要求元のブローカ装置１０を、購読ブローカ装置ｍ１として書き込み、購読要求ＫＲで指定されたトピックを、購読情報（トピック）ｍ２として書き込む。
【００６２】
他購読情報管理部１２０によって受信された購読要求ＫＲが、購読登録要求であれば、他出版データ送信部１１６は、購読要求ＫＲで指定されたトピックに関連する最新の出版データＳＤを、最新出版データ保持部１１４から取得し、取得した出版データＳＤを、購読要求元の他ブローカ装置１０へ送信する。購読要求元の他ブローカ装置１０は、例えば管理表２００を使用して決定される。
【００６３】
自購読情報管理部１０８は、自ブローカ装置１０（＃０）によって購読される情報群であるトピックを管理するとともに、管理しているトピックに変化があった場合には、このトピックを、通信部１０２を介して、他ブローカ装置１０へ送信する。
【００６４】
他出版データ受信部１１８は、自購読情報管理部１０８によって管理されているトピックを購読するクライアント装置３０が存在しない場合には、新たな購読登録要求である購読要求ＫＲを、自購読情報管理部１０８へ出力する。
【００６５】
他出版データ受信部１１８は、他購読情報管理部１２０によって受信された購読要求ＫＲによって指定されたトピックのうち、２つ以上のブローカ装置１０で購読されているトピックと、自購読情報管理部１０８によって管理されているトピックとを購読するクライアント装置３０が存在しない場合には、購読解除要求である購読要求ＫＲを自購読情報管理部１０８へ出力する。
【００６６】
他出版データ受信部１１８は、ブローカ装置１０毎に購読されるトピックの数を計算し、その最小値が自購読情報管理部１０８によって管理されるトピックの数の合計値を上回る場合にのみ、新たな購読登録要求である購読要求ＫＲを、自購読情報管理部１０８へ出力する。
【００６７】
自購読情報管理部１０８は、他出版データ受信部１１８から出力された新たな購読登録要求である購読要求ＫＲや、購読解除要求である購読要求ＫＲを、通信部１０２を介して、他ブローカ装置１０へ転送する。自購読情報管理部１０８は、この転送を、すべてのブローカ装置１０へ行ってもよいし、ネットワークトポロジを考慮して特定のブローカ装置１０のみへ行ってもよい。特定のブローカ装置１０のみに転送した場合には、そのブローカ装置１０のみから、購読要求ＫＲで指定されたトピックに関連する出版データＳＤが返送される。
【００６８】
終了検知部１２２は、他ブローカ装置１０の終了および異常のうちの少なくとも何れかを検知する。この検知のために、終了検知部１２２は、例えば、通信部１０２を介して、定期的にハートビートを他ブローカ装置１０へ送信し、他ブローカ装置１０がそのハートビートを受信ができなくなった段階で他ブローカ装置１０の異常を検知する。また、他ブローカ装置１０の終了時に自発的に送信された終了通知を検出した段階で他ブローカ装置１０の終了を検知する。終了検知部１２２によって終了または異常が検知されると、管理表２００から、終了または異常を検知されたブローカ装置１０が購読ブローカ装置ｍ１として書き込まれたレコードが削除される。
【００６９】
これによって、他購読情報管理部１２０は、終了検知部１２２によって終了または異常を検知された他ブローカ装置１０から購読要求ＫＲを受信しないようになる。
【００７０】
次に、以上のように構成した第１の実施形態の通信システムの動作例について説明する。
【００７１】
図５は、クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【００７２】
自ブローカ装置１０（＃０）では、クライアント装置３０から送信された購読要求ＫＲが、通信部１０４を介して、自購読情報受信部１０６によって受信される（Ｓ１）と、購読要求ＫＲが、購読登録要求または購読解除要求であるかが判定される（Ｓ２）。購読登録要求であれば（Ｓ２：購読登録）、自購読情報管理部１０８によって、管理表２０５が参照され、購読登録要求された購読情報（例えば、情報群Ａ）が、自ブローカ装置購読情報ｍ３として書き込まれ、要求元のクライアント装置３０が、購読クライアント装置ｍ４として書き込まれることによって、購読情報が登録される（Ｓ３）。
【００７３】
さらに自購読情報管理部１０８では、登録された購読情報が、自ブローカ装置１０（＃０）内で新規に購読するトピックであるか否かが判定される（Ｓ４）。新規に購読するトピックであると判定されると（Ｓ４：Ｙｅｓ）、他出版データ送信部１１６によって、通信部１０２を介して、他のブローカ装置１０へ、新規購読を開始したトピックに関連する出版データＳＤが送信される（Ｓ５）。
【００７４】
その後、他ブローカ装置１０から、当該トピックの最新の出版データＳＤが送信され、通信部１０２を介して他出版データ受信部１１８によって受信されると（Ｓ６：Ｙｅｓ）、この出版データＳＤは、他出版データ受信部１１８から、最新出版データ保持部１１４へ出力され、最新出版データ保持部１１４において保持される（Ｓ７）。また、最新出版データ保持部１１４において保持されている出版データＳＤは、自出版データ送信部１１２へ出力され、自出版データ送信部１１２から、通信部１０４を経由して、当該トピックの購読を開始したクライアント装置３０へ送信され（Ｓ８）、処理を終了する。
【００７５】
一方、ステップＳ６において、他ブローカ装置１０から当該トピックの最新の出版データＳＤが送信されない場合（Ｓ６：Ｎｏ）、すなわち、当該トピックの出版データＳＤがまだ一度も出版されていない場合には、処理を終了する。
【００７６】
一方、ステップＳ４において、新たに登録要求されたトピックが、既に別のクライアント装置３０によって購読されていた場合（Ｓ４：Ｎｏ）、最新出版データ保持部１１４に最新の出版データＳＤが保持されているか否かが、他出版データ受信部１１８によって確認され（Ｓ９）、保持されている場合（Ｓ９：Ｙｅｓ）、自出版データ送信部１１２から、通信部１０４を介して、クライアント装置３０へ最新の出版データが送信される（Ｓ１０）。一方、最新の出版データが保持されていない場合（Ｓ９：Ｎｏ）には、処理を終了する。
【００７７】
一方、ステップＳ２において、購読要求ＫＲが、購読解除要求であれば（Ｓ２：購読解除）、自購読情報管理部１０８によって、管理表２０５から、この購読要求ＫＲで指定されたトピック（例えば、情報群Ａ）が自ブローカ装置購読情報ｍ３として書き込まれているレコードが削除される（Ｓ１１）。
【００７８】
その後、管理表２０５に、当該トピック（例えば、情報群Ａ）に購読クライアント装置３０が関連付けられているレコードが残っている（Ｓ１２：Ｙｅｓ）のであれば、処理を終了する。
【００７９】
一方、管理表２０５に、当該トピックに購読クライアント装置３０が関連付けらえているレコードが残っていない（Ｓ１２：Ｎｏ）のであれば、自購読情報管理部１０８によって、管理表２００に基づいて、図６に示すような購読情報購読数管理表２１０が作成され、さらに、管理表２００、２０５に基づいて、図７に示すようなブローカ装置購読数管理表２１５が作成されることによって、各ブローカ装置１０のブローカ装置購読数状況が把握される（Ｓ１３）。
【００８０】
図６は、購読情報購読数管理表の一例を示す図である。
【００８１】
図７は、ブローカ装置購読数管理表の一例を示す図である。
【００８２】
購読情報購読数管理表２１０（以下、単に「管理表２１０」と称する）は、購読されるトピックを示す購読情報（トピック）ｍ５と、購読情報（トピック）ｍ５で指定されたトピックが購読される他ブローカ装置１０の数を示す購読数ｍ６との２つの項目から構成されるレコードが積まれたデータテーブルである。管理表２００によれば、情報群Ａというトピックの購読ブローカ装置は、ブローカ装置１０（＃１）と、ブローカ装置１０（＃２）との２つである。これに応じて、管理表２１０では、情報群Ａというトピックに対応する購読数が２と示される。同様に、管理表２００では、情報群Ｂというトピックの購読ブローカ装置が２つであり、情報群Ｃというトピックの購読ブローカ装置が２つであるので、管理表２１０では、情報群Ｂに対応する購読数が２、情報群Ｃに対応する購読数が２と示される。管理表２１０は、ブローカ装置１０内の図示しないストレージに記憶されており、ブローカ装置１０内の各部位によって参照されることが可能である。
【００８３】
ブローカ装置購読数管理表２１５（以下、単に「管理表２１５」と称する）は、ブローカ装置が記載されたブローカ装置ｍ７と、各ブローカ装置において購読されるトピックの数を示す購読数ｍ８との２つの項目から構成されるレコードが積まれたデータテーブルである。管理表２０５では、自ブローカ装置１０（＃０）は、情報群Ａという１つのトピックを購読することが示されている。これに応じて、管理表２１５では、自ブローカ装置１０（＃０）の購読数が１と示される。また、管理表２００では、ブローカ装置１０（＃１）は、情報群Ａ、情報群Ｂ、情報群Ｃという３つのトピックを購読することが示されている。したがって、管理表２１５では、ブローカ装置１０（＃１）の購読数が３と示される。同様に、管理表２００における情報に基づいて、管理表２１５では、ブローカ装置１０（＃２）の購読数が２と、ブローカ装置１０（＃３）の購読数が１と示される。管理表２１５は、ブローカ装置１０内の図示しないストレージに記憶されており、ブローカ装置１０内の各部位によって参照されることが可能である。
【００８４】
なお、管理表２００、２０５の内容が更新された場合、自購読情報管理部１０８によって、管理表２１０、２１５もまたその更新内容に応じて更新される。
【００８５】
ステップＳ１３において、当該トピック（例えば、情報群Ａ）を購読している他ブローカ装置１０の数が２以上である場合（Ｓ１３：Ｙｅｓ）、自購読情報管理部１０８によって、管理表２０５から、自ブローカ装置購読情報ｍ３として当該トピック（例えば、情報群Ａ）が書き込まれているレコードが削除され（Ｓ１６）、当該トピックの購読解除要求が、通信部１０２を介して、他ブローカ装置１０へと送信される（Ｓ１７）。
【００８６】
一方、ステップＳ１３において、当該トピックを購読しているブローカ装置１０の数が２未満である場合（Ｓ１３：Ｎｏ）、管理表２１５に基づいて、他購読情報管理部１２０によって、各ブローカ装置１０の購読数が把握され、さらに、自ブローカ装置１０（＃０）の購読数が、最小か否かが判定される（Ｓ１４）。
【００８７】
例えば、管理表２１５には、各ブローカ装置１０の購読数は、自ブローカ装置１０（＃０）が１、ブローカ装置１０（＃１）が３、ブローカ装置１０（＃２）が２、ブローカ装置１０（＃３）が１であると示されている。この場合、自ブローカ装置１０（＃０）は、ブローカ装置１１（＃３）とともに、購読数が最小である（Ｓ１４：Ｙｅｓ）。
【００８８】
購読数が最小ではない場合（Ｓ１４：Ｎｏ）には、前述したステップＳ１６へ進む。
【００８９】
一方、ステップＳ１４において、購読数が最小である場合（Ｓ１４：Ｙｅｓ）、購読数最小のブローカ装置１０のうち、自ブローカ装置１０のブローカ番号が最も小さいか否かが、他購読情報管理部１２０によって判定される（Ｓ１５）。
【００９０】
管理表２１５に示されるように、購読数最小のブローカ装置１０は、購読数が１である自ブローカ装置１０（＃０）とブローカ装置１０（＃３）であり、そのうち、自ブローカ装置１０（＃０）のブローカ番号が０であり最小である（Ｓ１５：Ｙｅｓ）ので、処理を終了する。
【００９１】
一方、ステップＳ１５において、最小ではない場合（Ｓ１５：Ｎｏ）には、前述したステップＳ１６へ進む。
【００９２】
図８は、他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【００９３】
他ブローカ装置１０から購読要求ＫＲが送信された場合、この購読要求ＫＲは、通信部１０２を介して、他購読情報管理部１２０によって受信される（Ｓ２１）。
【００９４】
購読要求ＫＲが、購読登録要求であれば（Ｓ２２：購読登録）、他購読情報管理部１２０において、管理表２００の購読ブローカ装置ｍ１として、購読要求元のブローカ装置１０が書き込まれ、購読情報（トピック）ｍ２として、購読要求ＫＲで指定された購読情報（トピック）が書き込まれることによって、登録がなされる（Ｓ２３）。
【００９５】
購読要求ＫＲで指定されたトピックが、自ブローカ装置１０（＃０）で購読されており（Ｓ２４：Ｙｅｓ）、そのトピックの最新の出版データＳＤが、最新出版データ保持部１１４に保持されており（Ｓ２５：Ｙｅｓ）、自ブローカ装置１０（＃０）が、購読ブローカ装置１０のうち、最も小さいブローカ番号である場合（Ｓ２６：Ｙｅｓ）には、最新の出版データＳＤが、他出版データ送信部１１６によって、通信部１０２を介して、要求元のブローカ装置１０へ送信される（Ｓ２７）。
【００９６】
ステップＳ２５において、そのトピックの最新の出版データＳＤが、最新出版データ保持部１１４に保持されていない場合（Ｓ２５：Ｎｏ）や、ステップＳ２６において、購読ブローカ装置１０のブローカ番号が、最も小さいブローカ番号ではない場合（Ｓ２６：Ｎｏ）や、ステップ２７の後は、ステップＳ２８へ進む。
【００９７】
ステップＳ２８では、自購読情報管理部１０８によって、管理表２０５が参照されることによって、自ブローカ装置１０（＃０）内で当該トピックを購読するクライアント装置３０が存在するか否かが判定され、存在すると判定される（Ｓ２８：Ｙｅｓ）と、処理を終了する。
【００９８】
一方、存在すると判定されない場合（Ｓ２８：Ｎｏ）には、他購読情報管理部１２０によって、管理表２１０から、当該トピック（例えば、情報群Ａ）を購読する他購読ブローカ装置１０の数（購読数）が判定され、その数が２以上であれば（Ｓ２９：Ｙｅｓ）、管理表２０５から、当該トピック（例えば、情報群Ａ）が自ブローカ装置購読情報ｍ３として書き込まれているレコードが削除され（Ｓ３０）、自購読情報管理部１０８から、当該トピックに対する購読解除要求が、通信部１０２を介して、他ブローカ装置１０へ送信される（Ｓ３１）。
【００９９】
一方、ステップＳ２９において、購読ブローカ装置１０の数が、２以上でない場合（Ｓ２９：Ｎｏ）、自ブローカ装置１０（＃０）内で当該トピックを購読するクライアント装置３０は存在しないものの、出版データＳＤの冗長化のために、自ブローカ装置１０（＃０）での購読を継続するために、何れの処理もなされずに、処理は終了する。
【０１００】
ステップＳ２４において、トピックが、自ブローカ装置１０（＃０）で購読されておらず（Ｓ２４：Ｎｏ）、さらに他購読ブローカ装置１０の数が１であり（Ｓ３３：Ｙｅｓ）、自ブローカ装置１０（＃０）が、トピック購読数最小のブローカ装置であり（Ｓ３４：Ｙｅｓ）、自ブローカ装置１０（＃０）のブローカ番号が、購読数最小のブローカ装置１０の中で最も小さければ（Ｓ３５：Ｙｅｓ）、出版データＳＤの冗長化のためにトピックを購読するために、自購読情報管理部１０８によって、管理表２０５の自ブローカ装置購読情報ｍ３として該トピックの購読情報（例えば、情報群Ａ）が書き込まれ（Ｓ３６）、その後、通信部１０２を介して、該トピックを指定した購読要求ＫＲが、他のブローカ装置１０へ送信される（Ｓ３７）。
【０１０１】
さらに、他ブローカ装置１０から出力された最新の出版データＳＤが、通信部１０２を介して他出版データ受信部１１８によって受信された場合（Ｓ３８：Ｙｅｓ）には、受信された最新の出版データＳＤが、最新出版データ保持部１１４へ出力され、保持され（Ｓ３９）、処理が終了する。
【０１０２】
なお、ステップＳ３３において、他ブローカ装置１０の購読数が１ではない場合（Ｓ３３：Ｎｏ）、ステップＳ３４において、自ブローカ装置１０（＃０）の購読数が最小ではない場合（Ｓ３４：Ｎｏ）、ステップＳ３５において、自ブローカ装置１０（＃０）のブローカ番号が、最も小さいブローカ番号でない場合（Ｓ３５：Ｎｏ）、ステップＳ３８において、最新の出版データＳＤが送信されない場合（Ｓ３８：Ｎｏ）には、何れの処理もなされず、処理が終了する。
【０１０３】
なお、ステップＳ２２において、他ブローカ装置１０から送信された購読要求ＫＲが、購読解除要求である場合（Ｓ２２：購読解除）には、他購読情報管理部１２０によって、管理表２００から、購読要求ＫＲで指定されたトピックが購読情報（トピック）ｍ２として書き込まれているレコードが削除され（Ｓ３２）、その後、ステップＳ３３へ進む。
【０１０４】
なお、本実施形態では、ステップＳ１５、Ｓ２６、Ｓ３５における判定のために使用される判定基準に、最小のブローカ番号であるか否かが使用されている。しかしながら、判定基準はこれに限定されず、代わりに、最大のブローカ番号であるか否かを使用してもよい。あるいは、ブローカ番号によらず、直近の通信量が最も少ないブローカ装置１０の購読を継続する等のようなアルゴリズムを使用してもよい。
【０１０５】
図９は、クライアント装置からの出版データ出版要求時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【０１０６】
自ブローカ装置１０（＃０）では、クライアント装置３０（例えば、クライアント装置３０（＃１））から、トピックおよびその出版データＳＤが送信されると、出版データＳＤは、通信部１０４を介して、自出版データ受信部１１０によって受信され、さらに自出版データ送信部１１２へ出力される（Ｓ４１）。自出版データ送信部１１２では、管理表２０５が参照され、出版データＳＤに関連するトピックを購読しているクライアント装置（購読クライアント装置）３０が存在するか否かが判定される（Ｓ４２）。
【０１０７】
購読クライアント装置３０が存在すると判定される（Ｓ４２：Ｙｅｓ）と、判定されたクライアント装置３０（例えば、クライアント装置３０（＃２））へ、自出版データ送信部１１２から、通信部１０４を介して、出版データＳＤが送信され（Ｓ４３）、ステップＳ４４へ進む。
【０１０８】
一方、購読しているクライアント装置３０が存在しない場合（Ｓ４２：Ｎｏ）は直接ステップＳ４４へ進む。
【０１０９】
ステップＳ４４では、他購読情報管理部１２０において、例えば管理表２００が参照されることによって、出版データＳＤに関連するトピックを購読する他ブローカ装置１０が存在するか否かが判定される（Ｓ４４）。
【０１１０】
存在すると判定される（Ｓ４４：Ｙｅｓ）と、判定されたブローカ装置１０に向けて、他出版データ送信部１１６から、通信部１０２を介して、その出版データＳＤが送信される（Ｓ４５）とともに、その出版データＳＤが最新出版データ保持部１１４に保持される（Ｓ４６）。
【０１１１】
一方、ステップＳ４４において、存在しないと判定される（Ｓ４４：Ｎｏ）と、ステップＳ４６へ進み、その出版データＳＤが、最新出版データ保持部１１４に保持される（Ｓ４６）。
【０１１２】
なお、図９には示されていないが、自ブローカ装置１０（＃０）、他ブローカ装置１０共に購読していないトピックに関連する出版データＳＤがある場合（Ｓ４２、Ｓ４４の判定が共にＮｏである場合）には、そのトピックの購読登録要求が、他ブローカ装置１０へ送信される。
【０１１３】
図１０は、他ブローカ装置からの出版データ送信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【０１１４】
他ブローカ装置１０から送信された出版データＳＤは、通信部１０２を介して、他出版データ受信部１１８によって受信される（Ｓ５１）。
【０１１５】
これに応じて、自購読情報管理部１０８によって、管理表２０５が参照され、出版データＳＤに関連するトピックを購読するクライアント装置（購読クライアント装置）３０が、自ブローカ装置１０に接続されているか否かが判定される（Ｓ５２）。
【０１１６】
接続されていると判定された場合（Ｓ５２：Ｙｅｓ）には、自出版データ送信部１１２によって、通信部１０４を介して、判定されたクライアント装置３０（例えば、クライアント装置３０（＃２））へ、出版データＳＤが送信される（Ｓ５３）。また、この出版データＳＤが、最新出版データ保持部１１４に保持され（Ｓ５４）、その後、処理を終了する。
【０１１７】
一方、接続されていないと判定された場合（Ｓ５２：Ｎｏ）には、ステップＳ５４へ進み、その出版データＳＤが、最新出版データ保持部１１４に保持される（Ｓ５４）。
【０１１８】
図１１は、他ブローカ装置の終了時および異常検出時における処理手順の一例を示すフローチャートである。
【０１１９】
他ブローカ装置１０から、自ブローカ装置１０（＃０）の終了検知部１２２へ、自発的な終了通知が到着した場合（Ｓ６１：Ｙｅｓ）、または、自ブローカ装置１０（＃０）の終了検知部１２２によって、他ブローカ装置１０の異常が検知された場合（Ｓ６２：Ｙｅｓ）、他購読情報管理部１２０によって、終了または異常を起こしたブローカ装置１０が購読しているトピックが、管理表２００の購読情報（トピック）ｍ２として書き込まれているか否が確認される（Ｓ６３）。
【０１２０】
自発的な終了通知が到着せず（Ｓ６１：Ｎｏ）、その後、他ブローカ装置１０の異常も検知されない場合（Ｓ６２：Ｎｏ）には、ステップＳ６１の処理へ戻る。また、ステップＳ６３において、書き込まれていないと判定された場合、すなわち、終了または異常を起こしたブローカ装置１０が購読しているトピックが存在しない場合（Ｓ６３：Ｎｏ）にもまた、ステップＳ６１の処理へ戻る。
【０１２１】
一方、ステップＳ６３において、書き込まれている判定された場合、すなわち、終了または異常を起こしたブローカ装置１０が購読しているトピックが存在する場合（Ｓ６３：Ｙｅｓ）には、他購読情報管理部１２０によって、終了または異常を起こしたブローカ装置１０が購読しているトピックが購読情報（トピック）ｍ２として書き込まれているレコードが、管理表２００から削除される（Ｓ６４）。
【０１２２】
さらに、そのトピックが自ブローカ装置１０（＃０）でも購読されておらず（Ｓ６５：Ｎｏ）、他購読ブローカ装置１０の数が１であり（Ｓ６６：Ｙｅｓ）、かつ自ブローカ装置１０（＃０）の購読数が最小であり（Ｓ６７：Ｙｅｓ）、購読数最小のブローカ装置１０の中で自ブローカ装置１０（＃０）のブローカ番号が最も小さい場合（Ｓ６８：Ｙｅｓ）、そのトピックは、自ブローカ装置１０での冗長化のために購読登録され（Ｓ６９）、このトピックが、自購読情報管理部１０８から、通信部１０２を介して、他ブローカ装置１０へ送信される（Ｓ７０）。
【０１２３】
それ以外（Ｓ６５：Ｙｅｓ、Ｓ６６：Ｎｏ、Ｓ６７：Ｎｏ、Ｓ６８：Ｎｏ）の場合にはステップＳ６３へ戻る。
【０１２４】
ステップＳ７０の後、自ブローカ装置１０（＃０）が、最新の出版データＳＤを受信した場合（Ｓ７１：Ｙｅｓ）には、最新の出版データＳＤが、最新出版データ保持部１１４に保持され（Ｓ７２）、その後ステップＳ６３へ戻る。
【０１２５】
一方、ステップＳ７０の後、自ブローカ装置１０（＃０）が、最新の出版データＳＤを受信しない場合（Ｓ７１：Ｎｏ）には、ステップＳ６３へ戻る。
【０１２６】
以上の構成により、自ブローカ装置１０（＃０）は、出版データＳＤの冗長性を確保できるので、他ブローカ装置１０の異常発生時にも出版データＳＤは喪失されない。これにより、出版・購読型モデルの通信プロトコルを採用するシステムにおいて、信頼性の向上を図ることが可能となる。またブローカ装置１０が購読する出版データＳＤのデータ量に応じて、冗長化のための出版データＳＤの送信先を変更することもできるので、適切な負荷分散を実現することが可能となる。
【０１２７】
（変形例）
第１の実施形態の通信システムの変形例について説明する。
【０１２８】
図３に例示するブローカ装置１０では、出版データＳＤの冗長化のために、トピックを購読するか否かを判定する機能を備えている。本変形例では、そのような機能を、ブローカ装置の外部に、サブブローカ装置として設ける。
【０１２９】
図１２は、第１の実施形態の通信システムの変形例を示す概念図である。
【０１３０】
すなわち、本変形例の通信システム２では、図１２に示すように、ブローカ装置１１の外部に、ネットワーク２１を介して、サブブローカ装置４０を接続している。図１２に示す例では、各ブローカ装置１１に対して、サブブローカ装置４０を１対１で設けているが、このような構成に限定されず、特定のブローカ装置１１にのみサブブローカ装置４０を設けてもよい。また、１つのサブブローカ装置４０を、複数のブローカ装置１１へ接続し、複数のブローカ装置１１について１つのサブブローカ装置４０が共通して機能するようにしてもよい。
【０１３１】
ネットワーク２１もまた、ネットワーク２０と同様に、例えばＬＡＮ等のローカルな回線であってもよいし、インターネットや専用回線等の広域な有線通信回線や、３Ｇ等の広域な無線通信回線とすることができる。
【０１３２】
図１３は、第１の実施形態の通信システムの変形例に適用されるブローカ装置およびサブブローカ装置の構成例を示すブロック図である。
【０１３３】
ブローカ装置１１は、ブローカ装置１０から終了検知部１２２を削除した構成をしている。
【０１３４】
サブブローカ装置４０は、終了検知部４０２および購読決定部４０４を備える。
【０１３５】
終了検知部４０２は、終了検知部１２２と同様の機能を有する。
【０１３６】
購読決定部４０４は、ブローカ装置１１の自購読情報管理部１０８および他購読情報管理部１２０から、購読要求ＫＲの購読変更要求を受信する。購読決定部４０４は、自購読情報管理部１０８と他購読情報管理部１２０との両方から購読変更要求を受信することに代えて、通信を監視すること等により、購読変更要求を認識するようにしてもよい。
【０１３７】
購読決定部４０４はさらに、購読変更要求の受信時に、購読変更要求元のブローカ装置１１が、購読要求ＫＲに関連付けられたトピックの新規購読要求なのか、購読解除要求なのか、購読継続要求なのか、購読解除継続要求なのかを判定する。
【０１３８】
この判定基準としては、例えば、管理表２０５の購読情報（トピック）ｍ２として、当該トピック（例えば、情報群Ａ）に購読クライアント装置３０が関連付けられているレコードが残っているのであれば、購読を継続し、残っていない場合には、他ブローカ装置１１の購読数や自ブローカ装置１１（＃０）の購読数に応じて、このトピックの購読を継続するか否かを判定することができる。
【０１３９】
購読決定部４０４はさらに、新規購読要求や、購読解除要求のために、購読要求ＫＲを、ブローカ装置１１の自購読情報管理部１０８へ出力する。
【０１４０】
以上説明したように、変形例によれば、サブブローカ装置４０を設けることによって、新たな冗長化機能を設けていないブローカ装置１１を使用した場合であっても、高い冗長化機能を実現することが可能な通信システム２を実現することが可能となる。
【０１４１】
（第２の実施形態）
ＭＱＴＴのような一部の出版・購読型モデルを採用するプロトコルでは、ＱｏＳ機能を有する。ＱｏＳ機能を利用することにより、必ず到着が保証されるべき出版データＳＤ、到着が保証されなくともよい出版データＳＤ等を区別するために、出版データＳＤにラベル付けすることができる。
【０１４２】
第１の実施形態では、すべての出版データＳＤの冗長性の確保を前提としていたが、ＱｏＳの値によっては必ずしも冗長性を確保する必要はない。これに着目し、本実施形態では、通信量やブローカ装置１０への負荷の低減を図るために、到着を保証する必要のない出版データＳＤについては、冗長性を確保しない。
【０１４３】
図１４は、第２の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【０１４４】
ブローカ装置１２の構成は、ブローカ装置１０の構成と類似しているが、ブローカ装置１２は、ブローカ装置１０が備えていないＱｏＳ管理部１２４を、他購読情報管理部１２０と自購読情報管理部１０８との間に備えていることが異なる。従って、以下では、ブローカ装置１０と異なる点について説明する。
【０１４５】
他購読情報管理部１２０は、第１の実施形態で説明した機能に加えて、他ブローカ装置１０から、購読解除要求である購読要求ＫＲを受信すると、受信した購読解除要求に基づいて、図１５に例示する他購読情報管理表２２０の内容を更新する。
【０１４６】
図１５は、他購読情報管理表の一例を示す図である。
【０１４７】
他購読情報管理表２２０（以下、単に「管理表２２０」と称する）は、管理表２００の変形例であり、購読ブローカ装置ｍ１および購読情報（トピック）ｍ２に、新たにＱｏＳｍ９を加えた３つの項目から構成されるレコードが積まれたデータテーブルである。管理表２２０は、ブローカ装置１２内の図示しないストレージに記憶されており、ブローカ装置１２内の各部位によって参照されることが可能である。
【０１４８】
ＱｏＳ管理部１２４は、出版データＳＤの送受信に要求される信頼性の指標値であるＱｏＳ値を算出し、管理表２２０のＱｏＳｍ９として書き込むことによって、購読情報（トピック）毎にＱｏＳ値を管理する。また、管理表２２０を使って、出版データＳＤの複製が必要か否かを判定する。
【０１４９】
他購読情報管理部１２０は、ＱｏＳ管理部１２４によって出版データＳＤの複製が必要であると判定された場合にのみ、購読登録要求である購読要求ＫＲを、自購読情報管理部１０８へ出力する。
【０１５０】
これに応じて、自購読情報管理部１０８は、第１の実施形態で説明したアルゴリズムに従って、その出版データＳＤの購読を、自ブローカ装置１２（＃０）内で実施するか否かを判定する。
【０１５１】
自購読情報管理部１０８は、第１の実施形態で説明した機能に加えて、図１６に例示するような自購読情報管理表２２５を管理する。
【０１５２】
図１６は、自購読情報管理表の一例を示す図である。
【０１５３】
自購読情報管理表２２５（以下、単に「管理表２２５」と称する）は、管理表２０５の変形例であり、自ブローカ装置購読情報ｍ３および購読クライアント装置ｍ４に、新たにＱｏＳｍ９を加えた３つの項目から構成されるレコードが積まれたデータテーブルである。管理表２２５は、ブローカ装置１２内の図示しないストレージに記憶されており、ブローカ装置１２内の各部位によって参照されることが可能である。
【０１５４】
自購読情報管理部１０８は、ＱｏＳ管理部１２４によって出版データＳＤの複製が必要であると判定された場合、第１の実施形態で説明したアルゴリズムに従って、購読を継続するか否かを判定する。また、管理表２２５の変更内容を、他ブローカ装置１０へ送信する際に、対応するＱｏＳ情報も併せて送信することができる。
【０１５５】
ＱｏＳ管理部１２４は、他購読情報管理部１２０もしくは自購読情報管理部１０８からトピックを出力されることによって呼び出され、そのトピックに関連する出版データＳＤが、冗長性を担保すべき情報であるか否かを判定する。
【０１５６】
例えば、ＱｏＳが０または１の二値を取り、０が到着を保証しなくてもよい出版データＳＤであり、１が到着を保証すべき出版データＳＤを意味するとする。この場合、ＱｏＳ管理部１２４は、管理表２２０、２２５を参照し、当該トピックのＱｏＳの最大値を算出する。
【０１５７】
例えば、管理表２２０より、購読情報（トピック）が情報群Ａの場合には、ブローカ装置１０（＃１）がＱｏＳ＝０、ブローカ装置１０（＃２）がＱｏＳ＝１となり、管理表２２５より、自ブローカ装置１２（＃０）購読情報が情報群Ａの場合には、ＱｏＳ＝１であり、ＱｏＳの最大値は１となる。
【０１５８】
一方、情報群Ｃの場合には、管理表２２０より、ブローカ装置１０（＃１）がＱｏＳ＝０、ブローカ装置１０（＃２）もＱｏＳ＝０であり、最大値は０となる。
【０１５９】
ＱｏＳ管理部１２４は、最大値が１の場合には、冗長化を行うべき出版データＳＤであると判定し、最大値が０の場合には、冗長化を行う必要のない出版データＳＤであると判定する。
【０１６０】
なお、ＱｏＳが、前述した二値以外を取る場合にも、例えば最大値が１以上であれば、冗長化を行うべき出版データＳＤであると判定する等、同様のアルゴリズムで冗長化の要否判定を行うことができる。
【０１６１】
例えば、管理表２２０に示される例では、情報群Ｂはブローカ装置１０（＃１）およびブローカ装置１０（＃３）で購読されている。情報群ＢのＱｏＳの最大値は１であり、冗長化を行うべき出版データＳＤであるが、元々ブローカ装置１０（＃１）とブローカ装置１０（＃３）で購読されているため、既に冗長化されている。
【０１６２】
ここで、ブローカ装置１０（＃１）が購読解除要求を行うとする。すると、情報群Ｂはブローカ装置１０（＃３）のみが購読することになる。この場合、第１の実施形態では、最も購読数が少なくブローカ番号も小さな自ブローカ装置１２（＃０）は、情報群Ｂを購読するクライアント装置３０が存在しないにも関わらず、ブローカ装置１０（＃１）に代わって情報群Ｂを購読する。
【０１６３】
しかしながら、第２の実施形態では、ＱｏＳの最大値が０となり、冗長化を行う必要のない出版データＳＤとなる。この場合には、ブローカ装置１０（＃３）のみが購読を継続し、自ブローカ装置１２（＃０）では購読を行わないため、通信帯域を効率的に利用できることに加え、自ブローカ装置１２（＃０）の処理負荷を低減する。
【０１６４】
次に、以上のように構成した第２の実施形態の通信システムの動作例について説明する。
【０１６５】
図１７は、クライアント装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【０１６６】
図１７に示すフローチャートは、図５に示すフローチャートの、ステップＳ１２と、ステップＳ１３との間に、ステップＳ１２ａを追加したものである。
【０１６７】
したがって、以下では、ステップＳ１２ａに関連する処理について説明し、重複説明を避ける。
【０１６８】
ステップＳ１２において、購読クライアント装置３０が存在せず、購読解除時に他ブローカ装置１０によって購読されている場合（Ｓ１２：Ｎｏ）、ステップＳ１２ａでは、出版データＳＤの冗長化の必要性の可否を判定するために、ＱｏＳ管理部１２４によって、ＱｏＳ最大値がゼロであるか否かが判定される（Ｓ１２ａ）。
【０１６９】
ＱｏＳ最大値がゼロであると判定された場合（Ｓ１２ａ：Ｙｅｓ）、ステップＳ１６へ進み、ゼロであると判定されなかった場合（Ｓ１２ａ：Ｎｏ）、ステップＳ１３へ進む。
【０１７０】
図１８は、他ブローカ装置からの購読要求受信時における自ブローカ装置による処理手順の一例を示すフローチャートである。
【０１７１】
図１８に示すフローチャートは、図８に示すフローチャートの、ステップＳ２８と、ステップＳ２９との間に、ステップＳ２８ａを追加し、ステップＳ３２と、ステップＳ３３との間に、ステップＳ３２ａを追加したものである。
【０１７２】
したがって、以下では、ステップＳ２８ａとステップＳ３２ａとに関連する処理について説明し、重複説明を避ける。
【０１７３】
ステップＳ２８において、購読登録時に当該トピックの購読を行っているクライアント装置３０が存在すると判定されない場合（Ｓ２８：Ｎｏ）、ステップＳ１２ａと同様に、ＱｏＳ管理部１２４によって、ＱｏＳ最大値がゼロであるか否かが判定される（Ｓ２８ａ）。
【０１７４】
ＱｏＳ最大値がゼロであると判定された場合（Ｓ２８ａ：Ｙｅｓ）、ステップＳ３０へ進み、ゼロであると判定されなかった場合（Ｓ２８ａ：Ｎｏ）、ステップＳ２９へ進む。
【０１７５】
また、ステップＳ３２の後も、ステップＳ１２ａと同様に、ＱｏＳ管理部１２４によって、ＱｏＳ最大値がゼロであるか否かが判定される（Ｓ３２ａ）。
【０１７６】
そして、ＱｏＳ最大値がゼロであると判定された場合（Ｓ３２ａ：Ｙｅｓ）、処理は終了し、ゼロであると判定されなかった場合（Ｓ３２ａ：Ｎｏ）、ステップＳ３３へ進む。
【０１７７】
また、自ブローカ装置１２（＃０）に接続されたクライアント装置３０から出版データＳＤの出版要求があった場合の処理手順の一例は、図９のフローチャートに示す通りであり、他ブローカ装置１０から、出版データＳＤが送信された場合における処理手順の一例は、図１０のフローチャートに示す通りである。
【０１７８】
上述したように、第２の実施形態の通信システムによれば、ＱｏＳの値に応じて冗長化の必要性の可否を判定するために、すべての出版データＳＤについて冗長性を確保する必要はなくなるので、通信量やブローカ装置への負荷の低減を図ることが可能となる。
【０１７９】
（第３の実施形態）
第１および第２の実施形態では、出版データＳＤの出版時には、個々の出版データＳＤを個々のパケットとして送信する。ＩｏＴ（Ｉｎｔｅｒｎｅｔ  ｏｆ  ｔｈｉｎｇｓ）用途でＭＱＴＴを利用する場合、パケット送信がなされると、センサ出版データ等の出版データが大量に発生して大量の通信パケットが送受信されることとなる。一般にルータ等のネットワーク機器の性能限界は、パケット数と出版データ総量で決まる。つまりパケット数および通信出版データの総量を減らすことが、より多くの出版データを送受信できるようにするために肝要である。第３の実施形態は、ＭＱＴＴのパケットの総量および送信出版データ量を、通信の信頼性を保ったまま減らす技術を提供する。
【０１８０】
図１９は、第３の実施形態の通信システムに適用されるブローカ装置の構成例を示すブロック図である。
【０１８１】
ブローカ装置１３の構成は、ブローカ装置１０の構成と類似しているが、ブローカ装置１３は、ブローカ装置１０が備えていない集約・圧縮部１２６と、リアルタイム性判定部１２８と、分割・展開部１３０とを備えている。従って、以下では、ブローカ装置１０と異なる点について説明する。
【０１８２】
リアルタイム性判定部１２８は、周期的に送信すべき出版データＳＤを決定するために、他出版データ送信部１１６に接続され、現在時刻から一定時間経過した時刻と、受信時刻との差が、トピック毎に定められた最大待機時間を超える出版データＳＤを、集約・圧縮部１２６による集約の対象であると判定する。
【０１８３】
このため、自出版データ受信部１１０は、本実施形態ではさらに、クライアント装置３０（例えば、クライアント装置３０（＃１））から受信した出版データＳＤの受信時刻を記録する。
【０１８４】
図２０は、送信待機リストの一例を示す図である。
【０１８５】
送信待機リスト２３０には、一例として、出版データの宛先ｍ１０、購読情報（トピック）ｍ１１、出版データｍ１２、受信日時ｍ１３、および処理済みフラグｍ１４からなる各項目から構成されるレコードが積まれたデータテーブルである。送信待機リスト２３０は、ブローカ装置１３内の図示しないストレージに記憶されており、ブローカ装置１３内の各部位によって参照されることが可能である。
【０１８６】
リアルタイム性判定部１２８は、クライアント装置３０から、出版データＳＤに対する要求があった場合、送信待機リスト２３０のレコードの内容を更新する。
【０１８７】
図２１は、最大待機時間リストおよび時間条件の一例を示す図である。
【０１８８】
最大待機時間リスト２３５は、購読情報（トピック）ｍ１５および最大待機時間ｍ１６からなる２項目から構成されるレコードが積まれたデータテーブルである。最大待機時間リスト２３５および時間条件２４０は、ブローカ装置１３内の図示しないストレージに記憶されており、ブローカ装置１３内の各部位によって参照されることが可能である。
【０１８９】
時間条件２４０には、一例として、パケット送信周期Ｔ＝１０ｍｓ（ミリ秒）、現在時刻＝２０１７／１２／０１  ００：００：０１．０９０が示されている。
【０１９０】
送受信に要求されるリアルタイム性は、出版データＳＤ毎に異なるため、リアルタイム性判定部１２８はさらに、最大待機時間リスト２３５を使用して、購読情報（トピック）ｍ１５毎に、最大待機時間ｍ１６として書き込まれた送信までの最大待機時間を管理する。
【０１９１】
例えば、時間条件２４０に示されているように、Ｔ＝１０ミリ秒毎にパケット送信が行われる場合、１０ミリ秒毎にリアルタイム性判定部１２８が呼びされ、次回呼出時刻において、リアルタイム性判定部１２８は、最大待機時間リスト２３５に示される最大待機時間ｍ１６を超過するパケットを取り出す。
【０１９２】
例えば、時間条件２４０に示されるように、「現在時刻」が「２０１７／１２／０１  ００：００：０１．０９０」である場合、次回のパケット送信時刻は、現在時刻にパケット送信周期Ｔ＝１０ミリ秒を加えた「２０１７／１２／０１  ００：００：０１．１００」となる。すると、送信待機リスト２３０において次回パケット送信時刻において最大待機時間ｍ１６として書き込まれた最大待機時間を超過するパケットは、図２０に例示される送信待機リスト２３０における上から１、２、４番目のレコードに相当するパケットとなる。
【０１９３】
送信待機リスト２３０において、１番目のレコードに相当するパケットの購読情報（トピック）ｍ１１は情報群Ａであるため、受信日時ｍ１３に、最大待機時間リスト２３５に示される情報群Ａの最大待機時間ｍ１６である１００ミリ秒を加算しても「００：００：０１．０９５」としかならず、次回パケット送信時刻である「２０１７／１２／０１  ００：００：０１．１００」には至らないために、待機時間は、最大待機時間ｍ１６を超過する。同様に、２番目のレコードに相当するパケットの購読情報（トピック）ｍ１１は情報群Ｂであるため、受信日時ｍ１３に、情報群Ｂの最大待機時間ｍ１６である１５ミリ秒を加算しても「００：００：０１．０９７」としかならず、次回パケット送信時刻である「２０１７／１２／０１  ００：００：０１．１００」には至らないために、やはり、待機時間は、最大待機時間ｍ１６を超過する。また同様に、４番目のレコードに相当するパケットの購読情報（トピック）ｍ１１は情報群Ｃであるため、受信日時ｍ１３に、情報群Ｃの最大待機時間ｍ１６である５０ミリ秒を加算しても「００：００：０１．０９５」としかならず、次回パケット送信時刻である「２０１７／１２／０１  ００：００：０１．１００」には至らないために、待機時間は、最大待機時間ｍ１６を超過する。
【０１９４】
一方、それ以外のパケットは、次回パケット送信時刻において、待機時間は、最大待機時間ｍ１６を超過しないため、送信は見送られる。
【０１９５】
集約・圧縮部１２６は、他出版データ送信部１１６に接続され、他ブローカ装置１０へ送信される出版データＳＤを、他ブローカ装置１０別に、一定時間毎に１つの集約済出版データに集約する。集約・圧縮部１２６はさらに、集約済出版データを、予め定められたアルゴリズムに従って圧縮する。
【０１９６】
具体的には、集約・圧縮部１２６は、リアルタイム性判定部１２８が取り出した他のブローカ装置１０へ送信する複数の出版データＳＤを、送信待機リスト２３０の宛先ｍ１０で指定されたブローカ装置１０毎に１つのパケットにまとめ、圧縮する。
【０１９７】
例えば図２０および図２１を用いて説明した例は、「現在時刻」である「２０１７／１２／０１  ００：００：０１．０９０」において、送信待機リスト２３０における上から１、２、４番目のレコードに相当するパケットを送信するが、送信待機リスト２３０の宛先ｍ１０は、１番目と２番目のレコードに相当するパケットがブローカ装置１０（＃１）であり、４番目のレコードに相当するパケットがブローカ装置１０（＃２）である。このため、集約・圧縮部１２６は、１番目と２番目のレコードに相当するパケットを１つのパケットにまとめ、圧縮する。また、４番目のレコードに相当するパケットを、１つのパケットとして圧縮する。圧縮されたパケット形式の一例は、図２２に示す通りである。
【０１９８】
図２２は、圧縮集約済出版データのパケット形式を例示するデータ構造図である。
【０１９９】
圧縮集約済出版データ２４５は、集約・圧縮部１２６によって、集約された複数の出版データＳＤが、さらに圧縮されたものである。
【０２００】
図２２に示す例では、圧縮集約済出版データ２４５は、出版データＳＤ１と出版データＳＤ２とが並べられて１つの出版データとして集約された後に圧縮された構成をしている。出版データＳＤ１は、購読情報（トピック）ｊ１、データヘッダ（出版データサイズ等）ｈ１、およびデータ本体ｂ１を含み、出版データＳＤ２は、購読情報（トピック）ｊ２、データヘッダ（出版データサイズ等）ｈ２、およびデータ本体ｂ２を含む。なお、圧縮集約済出版データ２４５において集約される出版データＳＤの数は２つに限定されず、任意の数であってよい。
【０２０１】
分割・展開部１３０は、他出版データ受信部１１８に接続され、他ブローカ装置１０から送信された圧縮集約済出版データ２４５を展開して集約済出版データへ復元し、集約済出版データを分割して、各出版データＳＤ１、ＳＤ２へ復元し、復元された各出版データＳＤ１、ＳＤ２を、他出版データ受信部１１８へ出力する。
【０２０２】
分割・展開部１３０はさらに、他ブローカ装置１０から出力された圧縮集約済出版データを、予め定められたアルゴリズムに従って展開することによって、圧縮集約済出版データから、集約済出版データを復元する。さらに、集約済出版データを分割することによって、集約済出版データから、複数の出版データを復元する。
【０２０３】
次に、以上のように構成した第３の実施形態の通信システムの動作例について説明する。
【０２０４】
先ず、クライアント装置３０からの出版データＳＤの出版要求受信時における処理について説明する。
【０２０５】
図２３は、クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【０２０６】
クライアント装置３０から送信された出版要求が受信される（Ｓ８１）と、自購読情報管理部１０８によって、管理表２０５が参照され、出版要求があったトピックを自ブローカ装置購読情報ｍ３とするクライアント装置３０が、購読クライアント装置ｍ４として書き込まれているレコードが存在するか否かが確認される（Ｓ８２）。
【０２０７】
購読クライアント装置３０が、購読クライアント装置ｍ４として書き込まれているレコードが存在すると判定された場合（Ｓ８２：Ｙｅｓ）、そのクライアント装置３０へ、出版データＳＤが送信され（Ｓ８３）、ステップＳ８４へ進む。
【０２０８】
ステップＳ８２において、存在しないと判定された場合（Ｓ８２：Ｎｏ）には、直接ステップＳ８４へ進む。
【０２０９】
ステップＳ８４では、管理表２００が参照され、出版要求があった購読情報（トピック）を購読する他ブローカ装置３０が、購読ブローカ装置ｍ１として書き込まれたレコードが存在するか否が判定される（Ｓ８４）。
【０２１０】
存在すると判定された場合（Ｓ８４：Ｙｅｓ）には、図２０に示すような送信待機リスト２３０における各項目に該当する情報が書き込まれることによって登録がなされ（Ｓ８５）、最終的な出版データＳＤが最新出版データ保持部１１４へ保持され、処理を終了する（Ｓ８６）。なお、複数のブローカ装置１０が、単一の出版データＳＤのトピックを購読している場合には、送信待機リスト２３０に、宛先ブローカ装置１０毎に出版データＳＤが保持される。
【０２１１】
一方、ステップＳ８４において、存在しないと判定された場合（Ｓ８４：Ｎｏ）には、最新の出版データＳＤの最新出版データ保持部１１４への保持だけが行われた後、処理を終了する。
【０２１２】
次に、出版要求に応じて出版データを送信する際における処理について説明する。
【０２１３】
図２４は、出版要求に応じた出版データ送信時における処理手順の一例を示すフローチャートである。
【０２１４】
先ず、自ブローカ装置１３（＃０）以外のブローカ装置１０毎に送信するパケットを生成するために、未処理の宛先があるか否かが確認される（Ｓ９１）。
【０２１５】
未処理の宛先がない場合（Ｓ９２：Ｎｏ）には、一定時間（例えば、Ｔ＝１０ミリ秒）待機した後（Ｓ９９）、送信待機リスト２３０における対応する処理済みフラグｍ１４に書き込まれたフラグがクリアされ（Ｓ１００）、ステップＳ９１に戻る。
【０２１６】
一方、ステップＳ９１において、未処理の宛先がある場合（Ｓ９１：Ｙｅｓ）には、その宛先が取得される（Ｓ９２）。
【０２１７】
続いて、図２０に示す送信待機リスト２３０が参照され、取得された宛先が宛先ｍ１０に指定された未処理の、すなわち処理済みフラグｍ１４が付いていない出版データＳＤが存在するか否かが判定される（Ｓ９３）。
【０２１８】
出版データＳＤが存在すると判定された場合（Ｓ９３：Ｙｅｓ）、その出版データＳＤが取り出され、送信待機リスト２３０の該当レコードの処理済みフラグｍ１４にフラグが付与される（Ｓ９４）。
【０２１９】
さらに、その購読情報（トピック）の最大待機時間（例えば、最大待機時間Ｍ）が、最大待機時間リスト２３５から取得される（Ｓ９５）。なお、最大待機時間リスト２３５は、あらかじめ準備されたものでも、あるいは、クライアント装置３０等からの要求により動的に生成されたものでもよい。
【０２２０】
さらに、実行日時が登録日時から最大待機時間Ｍを経過した後になるか否か、すなわち、（現在時刻＋Ｔ）＞（登録日時＋Ｍ）となるか否かが判定される（Ｓ９６）。
【０２２１】
実行日時が、登録日時から最大待機時間Ｍを経過した後になると判定された場合（Ｓ９６：Ｙｅｓ）、今回の出版データＳＤを送信するために、当該出版データＳＤが、送信待機リスト２３０と同一の構成をしている送信リストに登録され（Ｓ９７）、これに応じて、当該出版データＳＤが送信待機リスト２３０から削除され（Ｓ９８）、ステップＳ９３へ戻る。なお、送信リストは、送信待機リスト２３０と同一の構成をしているので、図示を省略する。
【０２２２】
一方、ステップＳ９６において、実行日時が登録日時から最大待機時間Ｍを経過した後にならないと判定された場合（Ｓ９６：Ｎｏ）もまた、ステップＳ９３へ戻る。
【０２２３】
一方、ステップＳ９３において、出版データＳＤが存在すると判定されなかった場合（Ｓ９３：Ｎｏ）、送信リストに、保持した出版データＳＤが結合され（Ｓ１０１）、圧縮され（Ｓ１０２）、宛先ブローカ装置３０へパケットが送信され（Ｓ１０３）、送信リストがクリアされ（Ｓ１０４）、ステップＳ９１へ戻る。
【０２２４】
次に、他ブローカ装置１０から出版データが送信された場合における処理について説明する。
【０２２５】
図２５は、他ブローカ装置からの出版データ送信場合における処理手順の一例を示すフローチャートである。
【０２２６】
他ブローカ装置１０から送信された出版データＳＤが、自ブローカ装置１３（＃０）によって受信される（Ｓ１１１）と、圧縮されているパケットが、分割・展開部１３０によって展開され、展開されたパケットに、複数の出版データＳＤが含まれている場合には、さらに展開されたパケットが分割され、各出版データＳＤが復元される（Ｓ１１２）。
【０２２７】
分割されたパケットに、未処理の出版データＳＤが存在しないと判定された場合（ステップＳ１１３：Ｎｏ）には、処理を終了する。
【０２２８】
一方、分割されたパケットに、未処理の出版データＳＤがあると判定された場合（ステップＳ１１３：Ｙｅｓ）には、未処理の出版データＳＤが１件取り出され（Ｓ１１４）、管理表２０５の購読ブローカ装置ｍ１に、当該トピックの購読クライアント装置３０が存在するか否かが判定される（Ｓ１１５）。
【０２２９】
購読クライアント装置３０が存在すると判定された場合（Ｓ１１５：Ｙｅｓ）、そのクライアント装置３０へ、出版データＳＤが送信され（Ｓ１１６）、最新の出版データＳＤが、最新出版データ保持部１１４に保持され（Ｓ１１７）、ステップＳ１１３へ戻る。
【０２３０】
一方、ステップＳ１１５において、購読クライアント装置３０が存在しないと判定された場合（Ｓ１１５：Ｎｏ）、ステップＳ１１７へ進む。
【０２３１】
なお、自ブローカ装置１３（＃０）がクライアント装置３０から購読要求を受信した際の処理手順は、図５のフローチャートを用いて説明した通りであり、自ブローカ装置１３（＃０）が他ブローカ装置１０から購読要求を受信した際の処理手順は、図８のフローチャートを用いて説明した通りであり、他ブローカ装置１０の終了時および異常検出時における処理手順は、図１１のフローチャートを用いて説明した通りである。
【０２３２】
このように、第３の実施形態によれば、パケットの総量および送信出版データ量を、通信の信頼性を保ったまま減らすことが可能となる。
【０２３３】
（変形例）
第３の実施形態の通信システムの変形例について説明する。
【０２３４】
第３の実施形態では、図１９に示すように、パケットの集約・圧縮および分割・展開は、集約・圧縮部１２６および分割・展開部１３０を備えたブローカ装置１３によって実行されているが、本変形例では、ブローカ装置１３ではなく、クライアント装置によって実行される。
【０２３５】
図２６は、第３の実施形態の通信システムの変形例に適用されるクライアント装置の構成例を示す概念図である。
【０２３６】
変形例のクライアント装置３１は、ブローカ装置１０に、ネットワーク２０を介して接続されている。ブローカ装置１０の構成は、図３に示す通りであるので、重複説明を避ける。
【０２３７】
クライアント装置３１は、通信部３０２、分割・展開部３０４、購読・出版要求部３０６、集約・圧縮部３０８、異常検出部３１０、および負荷検出部３１２を備える。
【０２３８】
集約・圧縮部３０８は、同一のトピックに関連する複数の出版データＳＤを集約して１つの集約済出版データを生成し、生成された集約済出版データを圧縮し、集約圧縮済出版データを生成する。しかしながら、集約・圧縮部３０８は、各ブローカ装置１０が購読しているトピックがわからないため、宛先ブローカ装置１０毎にパケットを圧縮することができない。そこで、トピック毎に出版データＳＤを集約して圧縮する。
【０２３９】
図２７は、最大待機時間リストの一例を示す図である。
【０２４０】
図２８は、送信待機リストの一例を示す図である。
【０２４１】
図２７に示す最大待機時間リスト２５０および時間条件２５５は、図２１に示す最大待機時間リスト２３５および時間条件２４０と同一である。最大待機時間リスト２５０および時間条件２５５は、クライアント装置３１内の図示しないストレージに記憶されており、クライアント装置３１内の各部位によって参照されることが可能である。
【０２４２】
図２８に示す送信待機リスト２６０は、図２０に示す送信待機リスト２３０から、宛先ｍ１０を削除した構成となっている。送信待機リスト２６０もまた、クライアント装置３１内の図示しないストレージに記憶されており、クライアント装置３１内の各部位によって参照されることが可能である。
【０２４３】
例えば、各購読情報（トピック）ｍ１５毎の最大待機時間ｍ１６が図２７に示す通りであり、Ｔ＝１０ミリ秒毎にパケット送信が行われる場合、図２８に示す送信待機リスト２６０において、次回呼出時に最大待機時間を経過する購読情報（トピック）ｍ１は、上から１〜４番目のレコードに相当する情報群Ａ、情報群Ｂ、情報群Ｂ、および情報群Ｃとなる。そこで、集約・圧縮部３０８は、情報群Ａのパケット、情報群Ｂのパケット、情報群Ｃのパケットそれぞれを集約して圧縮する。情報群Ａのデータは１番目のレコードのみ、情報群Ｃのデータは４番目のレコードのみであるためそのまま圧縮する。一方、情報群Ｂのパケットは２、３番目のレコードに相当するデータがあるため、２つのデータを集約してから圧縮する。
【０２４４】
図２９は、圧縮集約済データのパケット形式を例示するデータ構造図である。
【０２４５】
圧縮集約済出版データ２６５は、集約・圧縮部３０８によって、集約された複数の出版データＳＤが、さらに圧縮されたものである。
【０２４６】
図２９に示す例では、圧縮集約済出版データ２６５は、出版データＳＤ１と出版データＳＤ２とが１つの出版データとして集約された後に圧縮された構成をしている。ここで、出版データＳＤ１と出版データＳＤ２とは同じ購読情報（トピック）であるので、先頭に購読情報（トピック）ｊを出版データＳＤ１と出版データＳＤ２とに共通した情報として備え、その後、出版データＳＤ１のデータヘッダｈ１およびデータ本体ｂ１が続き、その後、出版データＳＤ２のデータヘッダｈ２およびデータ本体ｂ２が続くような形式であって良い。なお、圧縮集約済出版データ２６５において集約される出版データＳＤの数は２つに限定されず、任意の数であってよい。  ブローカ装置１０側では、受信したパケットのトピック情報が参照されることによって、転送するクライアント装置３１およびブローカ装置１０が決定される。他ブローカ装置１０へ転送する際には、さらに図１９の構成と組み合わせて、宛先ブローカ装置１０毎にさらに出版データＳＤを集約してから送信してもよい。
【０２４７】
一方、ブローカ装置１０から送信された出版データＳＤが、クライアント装置３１によって受信された場合には、トピック毎に出版データＳＤが集約・圧縮されているため、分割・展開部３０４は、トピック毎に出版データＳＤが集約・圧縮されている集約圧縮済出版データを、個々の出版データに分割する機能を有する。
【０２４８】
すなわち、分割・展開部３０４は、集約圧縮済出版データを展開して、圧縮前の集約済出版データを復元し、復元された集約済出版データを分割して、複数の出版データＳＤを復元する。
【０２４９】
異常検出部３１０は、接続されたブローカ装置１０の異常を検出すると、異常検出されたブローカ装置１０から、別のブローカ装置１０（例えば、ブローカ装置１０（＃１））へ接続先を変更する。
【０２５０】
負荷検出部３１２は、ブローカ装置１０の負荷増大を検出すると、負荷増大を検出されたブローカ装置１０から、別のブローカ装置１０（例えば、ブローカ装置１０（＃１））へ接続先を変更する。
【０２５１】
通信部３０２は、異常検出部３１０および負荷検出部３１２によって接続先として変更されたブローカ装置１０（例えば、ブローカ装置１０（＃１））へ、集約圧縮済出版データを送信するとともに、ブローカ装置１０から送信された集約圧縮済出版データを、分割・展開部３０４へ出力する。
【０２５２】
なお、本変形例において、ブローカ装置１０は、第１の実施形態で説明した機能に加えて、集約・圧縮されたパケットの購読情報（トピック）等を管理する機能を有する。
【０２５３】
図３０は、クライアント装置からの出版データの出版要求受信時における処理手順の一例を示すフローチャートである。
【０２５４】
クライアント装置３１が、出版要求を行う場合（Ｓ１２１）には、図２８に示すような送信待機リスト２６０に出版データＳＤの購読情報（トピック）ｍ１１、データｍ１２、登録日時ｍ１３を保持して終了する（Ｓ１２２）。
【０２５５】
一方で、クライアント装置３１は、定期的にブローカ装置１０に対して出版データＳＤを送信するため、購読情報（トピック）毎にパケットの集約・圧縮および送信処理を行う。
【０２５６】
図３１は、購読情報（トピック）毎にパケットの集約・圧縮および送信処理を行う際における処理手順の一例を示すフローチャートである。
【０２５７】
図３１に示すフローチャートは、図２４に示すフローチャートに類似しているので、重複説明を避け、相違点について説明する。
【０２５８】
すなわち、図２４では、宛先ブローカ装置１０毎にパケットの集約・圧縮処理を行うが、図３１では、トピック毎にパケットの集約・圧縮処理を行う。このため、図３１では、ステップＳ１３１において、未処理の購読情報（トピック）が存在するか否かが判定され、存在すると判定された場合には、ステップＳ１３２において、未処理の購読情報（トピック）が取得され、ステップＳ１３３において、取得された購読情報（トピック）に合致する送信待機データが存在するか否かが判定され、存在すると判定された場合には、ステップＳ１３４において、取得された購読情報に合致する送信待機データが取り出される。
【０２５９】
ステップＳ１３１において、存在すると判定されなかった場合（Ｓ１３１：Ｎｏ）には、図２４におけるステップＳ９９以降の処理がなされ、ステップＳ１３３において、存在すると判定されなかった場合（Ｓ１３３：Ｎｏ）には、図２４におけるステップＳ１０１以降の処理がなされ、ステップＳ１３４の後は、図２４におけるステップＳ９５以降の処理がなされる。
【０２６０】
図３２は、ブローカ装置からの出版データ送信時における処理手順の一例を示すフローチャートである。
【０２６１】
クライアント装置３１では、ブローカ装置１０から送信された出版データＳＤが、通信部３０２によって受信される（Ｓ１４１）と、その出版データＳＤが分割・展開部３０４によって展開された後に、分割される（Ｓ１４２）。さらに個々の出版データＳＤ毎に処理を行うため、分割された出版データＳＤに、未処理の出版データＳＤが存在するか否が判定される（Ｓ１４３）。
【０２６２】
未処理の出版データＳＤが存在しなければ（Ｓ１４３：Ｎｏ）、そのまま処理を終了し、未処理の出版データＳＤが存在すれば（Ｓ１４３：Ｙｅｓ）、１件の出版データＳＤが取り出され、処理が実行された後に、Ｓ１４４へ戻る。
【０２６３】
なお、購読要求時の処理手順は、ブローカ装置１０に購読要求を送信するのみであるため、ここでは省略する。また、ブローカ装置１０側での処理手順は、第１の実施形態において説明済みであるので、重複説明を避ける。
【０２６４】
このような変形例によっても、パケットの総量および送信出版データ量を通信の信頼性を保ったまま減らすことが可能となる。
【０２６５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
【符号の説明】
【０２６６】
１  通信システム、２  通信システム、１０  ブローカ装置、１１  ブローカ装置、１２  ブローカ装置、１３  ブローカ装置、２０  ネットワーク、２１  ネットワーク、３０  クライアント装置、３１  クライアント装置、４０  サブブローカ装置、１０２  通信部、１０４  通信部、１０６  自購読情報受信部、１０８  自購読情報管理部、１１０  自出版データ受信部、１１２  自出版データ送信部、１１４  最新出版データ保持部、１１６  他出版データ送信部、１１８  他出版データ受信部、１２０  他購読情報管理部、１２２  終了検知部、１２４  ＱｏＳ管理部、１２６  集約・圧縮部、１２８  リアルタイム性判定部、１３０  分割・展開部、２００  他ブローカ装置購読情報管理表、２０５  自ブローカ装置購読情報管理表、２１０  購読情報購読数管理表、２１５  ブローカ装置購読数管理表、２２０  他購読情報管理表、２２５  自購読情報管理表、２３０  送信待機リスト、２３５  最大待機時間リスト、２４０  時間条件、２４５  圧縮集約済出版データ、２５０  最大待機時間リスト、２５５  時間条件、２６０  送信待機リスト、２６５  圧縮集約済出版データ、３０２  通信部、３０４  分割・展開部、３０６  購読・出版要求部、３０８  集約・圧縮部、３１０  異常検出部、３１２  負荷検出部、４０２  終了検知部、４０４  購読決定部。
【図１】
2020017118.tif 000003
【図２】
2020017118.tif 000004
【図３】
2020017118.tif 000005
【図４】
2020017118.tif 000006
【図５】
2020017118.tif 000007
【図６】
2020017118.tif 000008
【図７】
2020017118.tif 000009
【図８】
2020017118.tif 000010
【図９】
2020017118.tif 000011
【図１０】
2020017118.tif 000012
【図１１】
2020017118.tif 000013
【図１２】
2020017118.tif 000014
【図１３】
2020017118.tif 000015
【図１４】
2020017118.tif 000016
【図１５】
2020017118.tif 000017
【図１６】
2020017118.tif 000018
【図１７】
2020017118.tif 000019
【図１８】
2020017118.tif 000020
【図１９】
2020017118.tif 000021
【図２０】
2020017118.tif 000022
【図２１】
2020017118.tif 000023
【図２２】
2020017118.tif 000024
【図２３】
2020017118.tif 000025
【図２４】
2020017118.tif 000026
【図２５】
2020017118.tif 000027
【図２６】
2020017118.tif 000028
【図２７】
2020017118.tif 000029
【図２８】
2020017118.tif 000030
【図２９】
2020017118.tif 000031
【図３０】
2020017118.tif 000032
【図３１】
2020017118.tif 000033
【図３２】
2020017118.tif 000034