(58)【調査した分野】(Int.Cl.,DB名)
複数のデータを管理する少なくとも1つのサーバ装置と、ネットワークを介して前記サーバ装置と通信することにより前記複数のデータにアクセスする少なくとも1つのクライアント装置と、を含み、
前記クライアント装置は、前記複数のデータのうち必要とするデータに対応するデータ名を記した要求データ名リストを前記サーバ装置へ送信し、
前記サーバ装置は、受信した前記要求データ名リストに記されているデータ名に対応するデータを、前記要求データ名リストを送信したクライアント装置へ送信する通信システムにおいて、
前記サーバは、前記クライアント装置から前記要求データ名リストを受信した際に、前記要求データ名リストに記されたデータ名の組み合わせに応じて一意なリクエストIDを生成して前記リクエストIDを前記クライアント装置へ送信するとともに、前記要求データ名リストに記されたデータ名と前記リクエストIDとを紐付けたリクエストIDリストを記録し、
前記クライアント装置が前記リクエストIDを受信した後、前記クライアント装置が前回送信したものと同一の前記要求データ名リストを前記サーバ装置へ再度送信しようとする際には、前記クライアント装置は前記要求データ名リストの代わりに前記リクエストIDを前記サーバ装置へ送信し、
前記リクエストIDを受信したサーバ装置は、前記リクエストIDに紐付いたデータ名に対応するデータを、前記リクエストIDを送信した前記クライアント装置へ送信すること
を特徴とする通信システム。
【発明の概要】
【発明が解決しようとする課題】
【0004】
以上のような従来の通信システムにおいては、クライアント装置が同一の要求をサーバ装置へ送信することを何度も繰り返す場合に、クライアント装置とサーバ装置との間の通信量が膨大になってしまうという問題点があった。
【0005】
例えばクライアント装置が監視対象を遠隔地から監視し続ける場合には、クライアント装置は監視対象に関するステータスの全てをサーバ装置へ定期的に(例えば1秒に1度)要求する。このとき、クライアント装置がサーバ装置へ送信する要求は毎回同じであるが、その要求は複数のデータを指定している。したがって、指定するデータの数に比例した大きさの通信量となる要求が定期的に送信されることになり、例えば監視対象に関するステータスが10種類あるならば、ネットワーク上の通信量は(10×経過秒数)に比例して増加していくことになる。そして、クライアント装置が複数存在するならばそのクライアント装置の数にも比例して通信量は増加していく。
【0006】
このように、従来の通信システムでは、クライアント装置が定期的にサーバ装置へ同一の要求を繰り返すだけでネットワーク上の通信量が膨大になってしまうという問題点があった。
【0007】
また、サーバ装置は要求されたデータを全てクライアント装置へ送信するため、同一の要求が定期的に繰り返された場合、前回の要求の時点からデータが変化していなくとも大量のデータが毎度クライアント装置へ送信されてしまい、やはり通信量が大きくなってしまうという問題点もあった。
【0008】
本発明は、上記問題点に鑑み、サーバ装置とクライアント装置との間の通信量、特に、クライアント装置がサーバ装置へデータを要求する際の通信量を低減することを課題とする。
【課題を解決するための手段】
【0009】
本発明に係る通信システムは、複数のデータを管理する少なくとも1つのサーバ装置と、ネットワークを介して前記サーバ装置と通信することにより前記複数のデータにアクセスする少なくとも1つのクライアント装置と、を含み、前記クライアント装置は、前記複数のデータのうち必要とするデータに対応するデータ名を記した要求データ名リストを前記サーバ装置へ送信し、前記サーバ装置は、受信した前記要求データ名リストに記されているデータ名に対応するデータを、前記要求データ名リストを送信したクライアント装置へ送信する通信システムにおいて、前記サーバは、前記クライアント装置から前記要求データ名リストを受信した際に、前記要求データ名リストに記されたデータ名の組み合わせに応じて一意なリクエストIDを生成して前記リクエストIDを前記クライアント装置へ送信するとともに、前記要求データ名リストと前記リクエストIDとを紐付けたリクエストIDリストを記録し、前記クライアント装置が前記リクエストIDを受信した後、前記クライアント装置が前回送信したものと同一の前記要求データ名リストを前記サーバ装置へ再度送信しようとする際には、前記クライアント装置は前記要求データ名リストの代わりに前記リクエストIDを前記サーバ装置へ送信し、前記リクエストIDを受信したサーバ装置は、前記リクエストIDに紐付いた前記要求データ名リストに記されたデータ名に対応するデータを、前記リクエストIDを送信した前記クライアント装置へ送信することを特徴とする。
【0010】
また、本発明に係る通信システムにおいては、前記サーバ装置は、前記クライアント装置へデータを送信する際に、送信時刻を示す送信タイムスタンプを付加して送信し、前記クライアント装置は、前記サーバ装置へ前記リクエストIDを送信する際に、前記サーバ装置から受信した最新の前記送信タイムスタンプを前記リクエストIDに付加して送信し、前記サーバ装置は、前記クライアント装置から受信した前記リクエストIDに紐付いたデータ名リストに記されたデータ名に対応するデータのうち、前記リクエストIDに付加された前記送信タイムスタンプが示す時刻における状態と現在時刻における状態とで差異があるデータのみを前記クライアント装置へ送信するようにしてもよい。
【0011】
また、本発明に係る通信システムにおいては、前記クライアント装置にはアクセス可能なデータとアクセス不可能なデータが設定されており、前記クライアント装置が前記サーバ装置へ送信した前記要求データ名リストに、前記クライアント装置がアクセス不可能なデータに対応するデータ名が含まれている場合には、前記サーバ装置は、前記要求データ名リストに記されたデータ名に対応するデータのうち、前記クライアント装置がアクセス可能なデータのみを前記クライアント装置へ送信するとともに、前記要求データ名リストに記されたデータ名のうち、前記クライアント装置がアクセス可能なデータに対応するデータ名のみに基づいて生成したリクエストIDを前記クライアント装置へ送信するようにしてもよい。
【0012】
また、本発明に係る通信システムにおいては、前記サーバ装置が前記リクエストIDを生成する際に、前記要求データ名リストに記されたデータ名から計算されたハッシュ値を前記リクエストIDとするようにしてもよい。
【発明の効果】
【0013】
本発明に係る通信システムによれば、クライアント装置が以前の要求と同じ組み合わせのデータをサーバ装置へ要求する際には、複数のデータ名が含まれる要求データ名リストではなく、リクエストIDをサーバ装置へ送信するため、要求データ名リストに多量のデータ名が含まれていたとしても、二度目以降の通信の際にはリクエストIDのみが送信されるため、クライアント装置が同一の要求を繰り返す際の通信量が低減される。
【0014】
また、リクエストIDに付加された送信タイムスタンプが示す時刻における状態と現在時刻における状態とで差異があるデータのみがサーバ装置からクライアント装置へ送信される場合は、以前にクライアント装置へ送信された時刻以降に変化のないデータは送信されないため、クライアント装置へ送信されるデータの通信量が低減される。
【0015】
また、クライアント装置がアクセス可能なデータに対応するデータ名のみに基づいてリクエストIDが生成されるようになっていると、複数のクライアント装置に別々のアクセス権(アクセス可能なデータとアクセス不可能なデータの割り当て)が設定されている場合に、異なるアクセス権を持つ2つ以上のクライアント装置が同一の要求データ名リストをそれぞれサーバ装置に送信したとしても、アクセス権に応じて別々のリクエストIDが生成されることになり、各クライアント装置のアクセス権が適切に管理される。また、クライアント装置がアクセス不可能なデータは送信されないため、通信量の低減も図られる。
【0016】
また、要求データ名リストに記されたデータ名から計算されたハッシュ値がリクエストIDとされる場合には、データ名の組み合わせに応じて一意なリクエストIDを容易に生成することができる。
【発明を実施するための形態】
【0018】
図1に、本発明に係る通信システムの実施形態の一例を概略的に示す。
図1に示すように、サーバ装置20とクライアント装置30はネットワーク10(インターネットや電話回線のような公共のネットワーク、あるいは専用の通信網)を介して接続されており、複数存在するクライアント装置30はそれぞれサーバ装置20と通信を行うことが可能である。
【0019】
サーバ装置20は複数のデータを管理するためのデータベース(メインDB22)を備えている。このメインDB22にはクライアント装置30が監視対象とするオブジェクトに関する複数のデータが記録されており、クライアント装置30はネットワーク10を介してサーバ装置20へ要求を送信することによってこのメインDB22に記録されたデータへアクセスする。なお、メインDB22に記録されるデータは、そのデータが記録された時刻に関するデータと組にして記録される。
【0020】
なお、監視対象の具体例としては、山間部に設けられておりダムなどの複数の水源と水路でつながった貯水池40が挙げられる。すなわち、本実施形態の通信システムを用いることにより、システムのユーザは、山間部から離れた都市部に居ながらにして、山間部の貯水池に蓄積されている水の現在水位、水位の変化率(流量)、その貯水池が達するべき目標水位、水門の開閉状態、などの様々なデータを、都市部に設けられたクライアント装置30を利用して監視することが可能となる。また、目標水位や水門の開閉状態などの一部のデータについては、都市部から指令を送って変更することも可能となる。この例では貯水池に設置された各種センサ(水位を測定するセンサなど)およびマニュピレータ(水門を開閉する装置など)と接続されたサーバ装置20が貯水池の近隣に設けられ、このサーバ装置20は各種センサが測定する貯水池のデータを時系列に沿ってメインDB22へ記録したり、マニュピレータを制御(そしてその結果をメインDB22へ記録)したりして貯水池に関するデータを管理する。ここで例えば現在水位の測定データは時間経過と共に変動するが、測定が行われた時刻のデータと組にして記録されることにより、「この時刻においてはこの水位だった」という、時系列に沿った情報が記録される。そして、都市部に分散して存在する多数のクライアント装置30が、ユーザの操作に応じてネットワーク10を介してサーバ装置20と通信を行い、現在水位のデータを閲覧したり、目標水位のデータを変更したりする。
【0021】
こうした通信システムにおいてサーバ装置20によって管理されているデータへクライアント装置30が初めてアクセスする場合、クライアント装置30は、
図2に示すように、必要とするデータに対応するデータ名を記した(列挙した)データ名リスト52(要求データ名リスト)を作成し、このデータ名リスト52をサーバ装置20に対するメッセージに含めて送信する(通信A1)。データ名リスト52に記されるデータ名は、貯水池の例でいえば「水位」、「流量」といった、データに設定された属性(アトリビュート)である。
【0022】
サーバ装置20は、データ名リスト52をクライアント装置30から受信した際に、そのデータ名リスト52に記されているデータ名に対応するデータ54をメインDB22から取得する(通信A2)とともに、データ名リスト52に記されているデータ名を基にリクエストID55を生成する。このとき、データ名リスト52に記されているデータ名の組み合わせに対して一意なリクエストID55が生成されるようにする。例えば2つのデータ名リスト52について、両方のデータ名リスト52に記されたデータ名の組み合わせが同一ならば、両方のデータ名リスト52に対して生成されるリクエストID55は同一となり、データ名の組み合わせが異なっていれば、2つの異なるリクエストID55が生成される。例えばデータ名の羅列を1つのデータとしてハッシュ関数に入力することによって得られるハッシュ値をリクエストID55とすることができる。
【0023】
サーバ装置20はメインDB22とは別にリクエストID用データベース(IDDB24)を備えている。サーバ装置20がリクエストID55を生成した際に、生成されたリクエストID55と、そのリクエストID55の基となったデータ名リスト52に記されたデータ名とが紐付けられたリクエストIDリスト56が、IDDB24に記録される(通信A3)。
【0024】
データ54の取得とリクエストID55の生成が完了したら、サーバ装置20は取得したデータ54と、生成したリクエストID55とをクライアント装置30へ返信(送信)する。このとき、サーバ装置20からクライアント装置30への送信が行われる時刻を示す送信タイムスタンプt1が、データ54およびリクエストID55に付加されてクライアント装置30へ送信される(通信A4)。
【0025】
以上のようにして、クライアント装置30はサーバ装置20からデータ54を受信することができる。このときにリクエストID55も受信するので、以降の通信においてはデータ名リスト52の代わりにリクエストID55を用いることができる。
図3に、リクエストID55を用いた通信の様子を示す。リクエストID55を得たクライアント装置30は、サーバ装置20にデータ54を要求する際に、リクエストID55を送信する(通信B1)。このとき、好ましくは前回の通信でサーバ装置20から受信した送信タイムスタンプt1もリクエストID55に付加されて送信される。
【0026】
リクエストID55を受信したサーバ装置20は、そのリクエストID55をIDDB24に記録されているリクエストIDリスト56と照合して、リクエストID55と紐付いているデータ名の組み合わせを取得する(通信B2)。そして、サーバ装置20はそのデータ名に対応するデータ54をメインDB22から取得する(通信B3)。
【0027】
データ54を取得したサーバ装置20は、そのデータ54に、今回の送信時刻を示す新規タイムスタンプt2を付加してクライアント装置30へ返信する(通信B4)。このとき、好ましくはクライアント装置30から受信した前回の送信タイムスタンプt1が示す時刻から変更のあったデータのみを送信する。
図3の例では、目標水位のデータに変更がないため、通信B4においてクライアント装置30へ送信されるデータ54に目標水位が含まれていない。
【0028】
以上のようにして、クライアント装置30はリクエストID55を用いてデータ54を取得することができる。
図2においてデータ名リスト52を用いて通信を行った場合と比較すると、通信A1において送信されるデータ名リスト52には多数のデータ名が含まれるために通信A1の通信量が大きくなっているのに対し、
図3の通信B1ではリクエストID55(および前回の送信タイムスタンプt1)のみが送信されるため、通信B1の通信量は通信A1に比べて大幅に低減される。すなわち、リクエストID55を用いた通信ではクライアント装置30がデータ名リスト52を送信する場合に比べて通信量が低減される。
【0029】
図4のフローチャートに、サーバ装置20がクライアント装置30からメッセージを受信した場合の処理の手順を示す。ステップS01においてクライアント装置30からメッセージを受信したサーバ装置20は、まずそのメッセージにリクエストID55が含まれているかどうかを判定する(ステップS02)。メッセージにリクエストID55が含まれていない場合(ステップS02−NO)、クライアント装置30はメッセージを詳しく解析する(ステップS03)。
【0030】
クライアント装置30から送信されるデータ名リスト52を含むメッセージには、実際には単にデータ名が列挙されているだけではなく、マークアップ言語の一種であるXMLなどを用いてデータの形式(数値なのか文字列なのかなど)といったメタデータも含めた記述がなされており、具体的にどのようなデータ名が記されているかについては、サーバ装置20においてメッセージおよびデータ名リスト52の解析を行う必要がある。ステップS03にてメッセージを解析したサーバ装置20は、データ名リスト52に記されている(クライアント装置30が要求している)データ名の組み合わせを抽出し、それらのデータ名からリクエストID55を生成する(ステップS04)。そして、データ名の組み合わせとリクエストID55とを紐付けたリクエストIDリスト56をIDDB24へ記録する(ステップS05)。
【0031】
一方、ステップS02においてクライアント装置30からのメッセージにリクエストID55が含まれていた場合(ステップS02−YES)には、サーバ装置20はそのリクエストID55をIDDB24と照合し、リクエストID55に紐付いている(クライアント装置30が要求している)データ名の組み合わせを取得する(ステップS06)。
【0032】
ステップS05においてIDDB24への記録が完了した後、またはステップS06においてデータ名の組み合わせの取得が完了した後、サーバ装置20は、クライアント装置30が要求しているデータ名に対応するデータ54をメインDB22から取得する(ステップS07)。ここで、クライアント装置30から受信したメッセージに前回の送信タイムスタンプt1が含まれているかどうかが判定され(ステップS08)、送信タイムスタンプt1が含まれていた場合(ステップS08−YES)には、前回の送信タイムスタンプt1が示す時刻におけるデータ(前回データ)と現在時刻におけるデータ(現在データ)との比較が行われる(ステップS09)。メインDB22に記録されているデータは、そのデータが記録された時刻に関するデータと組にして記録されているため、サーバ装置20は、前回データと現在データとを比較することができる。比較の結果、メインDB22から取得したデータ54のうち、現在データが前回データから変化していない項目が含まれていた場合には、その変化していない項目をデータ54から削除する。
【0033】
ステップS08においてメッセージに送信タイムスタンプt1が含まれていないと判定された後(ステップS08−NO)、またはステップS09における比較が完了した後、サーバ装置20はクライアント装置30が要求しているデータ名に対応するデータ54をクライアント装置30へ返信する(ステップS10)。このとき、ステップS09において現在データが前回データから変化していない項目がデータ54から削除されていた場合には、クライアント装置30が送信したリクエストID55に付加されていた送信タイムスタンプt1が示す時刻における状態と現在時刻における状態とで差異があるデータのみがクライアント装置30へ送信されることになる。なお、ステップS10において送信されるデータ54には、今回の送信時刻を示すタイムスタンプが付加される。このタイムスタンプはクライアント装置30の側で送信タイムスタンプt1または新規タイムスタンプt2として扱われる。
【0034】
以上のようにして、サーバ装置20はクライアント装置30から受信したメッセージを処理する。
図4のフローチャートからわかるように、クライアント装置30がリクエストID55を送信しなかった場合(データ名リスト52を送信した場合)には、サーバ装置20はステップS03においてメッセージの解析を行う必要があるが、リクエストID55が送信された場合には、ステップS03を実行する必要がなくなる。すなわち、リクエストID55が通信に用いられることで、サーバ装置20はクライアント装置30との通信のたびに毎回データ名リスト52の解析を行う必要がなくなり、処理速度が向上する。
【0035】
次に、クライアント装置30にアクセス権が設定されている場合の通信の様子を
図5に示す。例として、メインDB22に記録されているデータは「公開データ」と「機密データ」の2種類に分かれており、クライアント装置30は公開データにはアクセス可能であるが、機密データにはアクセス不可能であるという設定がなされているものとする。
【0036】
図2に示す場合と同様に、クライアント装置30は自身が必要とするデータに対応するデータ名を記したデータ名リスト52を作成し、このデータ名リスト52をサーバ装置20に対するメッセージに含めて送信する(通信Z1)。このとき、データ名リスト52には「機密データ」に属するデータに対応するデータ名が含まれているものとする(説明をわかりやすくするため、ここではデータ名自体が「機密データ」であるとする)。
【0037】
クライアント装置30からメッセージを受信したサーバ装置20は、クライアント装置30からのメッセージを解析することにより、データ名リスト52に「機密データ」のデータ名が含まれていることを発見する。するとサーバ装置20は、データ名リスト52に記されているデータ名のうち「機密データ」以外のデータ名に対応するデータ、すなわちクライアント装置30がアクセス可能な「公開データ」に属するデータのみをメインDB22から取得する(通信Z2)。さらに、リクエストID55を生成するにあたっては、データ名リスト52に記されているデータ名のうち「機密データ」のデータ名を無視し、「公開データ」のデータ名のみに基づいてリクエストID55を生成する。
【0038】
そして、サーバ装置20によって生成されたリクエストID55と、そのリクエストID55の基となったデータ名の組み合わせ(「公開データ」のデータ名のみが含まれ、「機密データ」のデータ名を含まない組み合わせ)とが紐付けられたリクエストIDリスト56が、IDDB24に記録される(通信Z3)。
【0039】
データ54の取得とリクエストID55の生成が完了したら、サーバ装置20は取得したデータ54と、生成したリクエストID55とをクライアント装置30へ返信(送信)する。このときは
図2における通信A4と同様に、サーバ装置20からクライアント装置30への送信が行われる時刻を示す送信タイムスタンプt1が、データ54およびリクエストID55に付加されてクライアント装置30へ送信される(通信Z4)。
【0040】
以上の通信Z1〜通信Z4によれば、クライアント装置30が「機密データ」に属するデータをサーバ装置20に要求しても、クライアント装置30が最終的に受信するデータ54には「機密データ」に属するデータが含まれないことになり、クライアント装置30のアクセス権が適切に管理される。また、リクエストID55は「機密データ」のデータ名を含まないデータ名の組み合わせと紐付けられるため、クライアント装置30がリクエストID55をサーバ装置20へ送信した場合には、サーバ装置20は改めてクライアント装置30のアクセス権の判定を行う必要がなくなり、処理が高速化される。
【0041】
なおここでは1つのクライアント装置30のみについて考えたが、複数のクライアント装置30にそれぞれ別々のアクセス権が設定されている(どのデータが「機密データ」に相当するのかがクライアント装置30によって異なる)場合には、サーバ装置20は、リクエストID55の生成の際に、データ名リスト52を送信したクライアント装置30がどれなのかを考慮して、各クライアント装置30にとっての「公開データ」のみに関するリクエストID55およびデータ54を返信するようにすれば、各クライアント装置30のアクセス権が適切に管理される。またリクエストID55を用いた通信を行うことにより、複数のクライアント装置30それぞれに対してアクセス権の判定を行うのが1回ずつで済み、処理が高速化される。
【0042】
以上に説明した実施形態における通信システムによれば、ネットワーク10上での通信量が低減され、またサーバ装置20が行う処理の負担も低減されるため、全体として通信が高速化する。
【0043】
なお上記の実施形態においてはリクエストID55を生成する方法としてハッシュ値を用いることを例示したが、リクエストID55の生成方法はこれに限るものではなく、例えば受信したデータ名リスト52に対して、受信順に連番となるシリアル番号を割り当ててもよい。またハッシュ値を用いる場合、異なるデータ名の組み合わせに対して同一のハッシュ値が得られる(衝突する)ことがあるので、サーバ装置20がリクエストID55を生成する際に、こうしたハッシュ値の衝突が起こった場合の対策がなされるとよい。例えばサーバ装置20はハッシュ値を生成した際にリクエストIDリスト56を確認し、生成したハッシュ値が既に他のデータ名の組み合わせに対して紐付けられている場合には、生成したハッシュ値に所定の数値を加算するなどして、既存のリクエストID55と異なる値のリクエストID55を生成するようにすればよい。
【0044】
また、クライアント装置30から送信されるデータ名リスト52が頻繁に更新される場合には、リクエストID55が大量に生成されることとなり、リクエストIDリスト56が肥大化してしまうので、一定の期間以上使用されなかったリクエストID55は破棄される(IDDB24から削除される)ようにするとよい。