以下に、開示の技術に係るイベント処理方法、イベント処理装置及びイベント処理プログラムの実施の形態を図面に基づいて説明する。なお、以下の実施の形態は、開示の技術を限定するものではない。
[システム構成]
図1は、イベント処理システムの構成を示す図である。イベント処理システム1では、イベント処理装置10と、イベント送信側機器30A〜30Cが、ネットワーク3を介して通信可能に接続される。ネットワーク3は、有線もしくは無線の、公衆網又は閉域網の任意の通信網である。また、イベント処理システム1では、イベント処理装置10と、イベント処理アプリケーションサーバ20とが通信可能に接続される。
イベント送信側機器30A〜30Cは、各々で発生したイベントをイベント処理装置10へ送信する情報源であり、例えばコンピュータ、各種の機器、各種のセンサ等である。イベント送信側機器30A〜30Cは、イベント処理装置10において互いのイベントの受信を待ち合せるグループをなす。なお、イベント送信側機器30A〜30Cを総称する場合、イベント送信側機器30と呼ぶこととする。
実施の形態において、イベント処理装置10が受信したイベントの発生順序を判定して確定させるために着目するイベントを自イベントと呼ぶこととする。また、イベント処理装置10へ自イベントを送信した送信側機器30を送信元機器と呼ぶこととする。また、イベントを待ち合せるグループ内の送信元機器以外のイベント送信側機器30を相手方機器と呼ぶこととする。また、相手方機器がイベント処理装置10へ送信するイベントを相手イベントと呼ぶこととする。相手イベントは、イベント処理装置10が自イベントとの発生順序の判定対象とするイベントである。
具体的には、イベント送信側機器30A〜30Cのグループにおいて、イベント送信側機器30Aを送信元機器と呼ぶこととする場合、イベント送信側機器30B、30Cが相手方機器である。また、イベント送信側機器30Aがイベント処理装置10へ送信するイベントを自イベントと呼ぶこととする場合、イベント送信側機器30B、30Cがイベント処理装置10へ送信するイベントが相手イベントである。イベント送信側機器30B、イベント送信側機器30Cについても同様である。
イベント処理装置10は、イベント送信側機器30A〜30Cから受信したイベントを発生順序で並び替えて、イベント処理アプリケーションサーバ20へ出力するコンピュータ等である。なお、実施の形態で「イベントの受信」という場合、イベント送信側機器30A〜30Cから送信されたイベントが、イベント処理装置10により受信されることをいう。イベント処理アプリケーションサーバ20は、イベント処理装置10から出力されたイベントをもとに各種の判断処理を行うコンピュータ等である。
なお、図1では、3台のイベント送信側機器30A〜30C、1台のイベント処理装置10、1台のイベント処理アプリケーションサーバ20を図示するが、開示のイベント処理システム1は、図1の構成に限定されない。すなわち、イベント処理システム1は、2台以上のイベント送信側機器、任意の数のイベント処理装置及び任意の数のイベント処理アプリケーションサーバを含んでもよい。
以下の説明では、イベント処理システム1は、次の(1)〜(3)を満たすことを前提とする。
(1)イベント送信側機器30と、イベント処理装置10の間でシステム時刻が同期している。
(2)イベント送信側機器30は、発生時刻の順序で、イベントをイベント処理装置10へ送信する。イベント送信側機器30が、イベントを一旦蓄積し、蓄積した複数のイベントを一括してイベント処理装置10へ送信する場合も同様である。
(3)イベント送信側機器30から送信されたイベントは、同一のイベント送信側機器30から先行して送信された他のイベントよりも先にイベント処理装置10に受信されることはない。すなわち、同一のイベント送信側機器30からのイベントは、発生時刻の順序でイベント処理装置10に受信される。
次に、各イベント送信側機器30から送信されるイベントがイベント処理装置10に受信されるまでに生じるイベントの発生時刻と、受信時刻との時間差であるタイムラグについて説明する。各イベント送信側機器30からイベント処理装置10へ送信されたイベントは、タイムラグにより、イベントの発生順序でイベント処理装置10に受信されるとは限らない。
上記のタイムラグは、様々な要因で発生する。要因は、イベント送信側機器30とイベント処理装置10間の伝送遅延、イベント送信側機器30又はイベント処理装置10とネットワーク3の接続断、ネットワーク3内の通信断、イベント送信側機器30におけるイベント発生から送信までの遅延等である。各イベント送信側機器30におけるイベント発生からイベント送信までの遅延は、イベント送信側機器30内で、イベントを検出後、一定期間保持してから送信する場合等に発生する。
これら様々な要因から、各イベント送信側機器30においてイベントが発生してから、イベントがイベント処理装置10に受信されるまでに、長短様々なタイムラグが発生する。このため、イベント処理装置10が、受信順序でイベントをイベント処理アプリケーションサーバ20へ出力した場合、複数のイベント間で発生時刻と受信時刻との順序の逆転が生じる場合がある。複数のイベント間で発生時刻と受信時刻との順序に逆転が生じた場合、イベント処理アプリケーションサーバ20は、イベントに基づいた適切な判断処理ができない。
そこで、イベント処理装置10は、バッファに自イベントとして格納したイベントごとに、相手方機器から送信される相手イベントの受信を待ち合せるイベント待ち時間を相手方機器ごとに設定する。そして、イベント処理装置10は、自イベントごと、かつ相手方機器ごとに設定されたイベント待ち時間だけ、相手方機器からの相手イベントの受信を待つ。
そして、イベント処理装置10は、イベント待ち時間以内に相手方機器から相手イベントを受信するか、相手イベントのイベント待ち時間を超過した場合、バッファに格納した自イベントについて、送信元機器と相手方機器との間で順序を判定して確定させる。イベント処理装置10は、バッファに格納した各イベントについて、送信元機器と相手方機器との間の順序の判定を繰り返し、送信元機器と全ての相手方機器と間の順序を確定させる。
そして、イベント処理装置10は、バッファに格納したイベントのうち、送信元機器と全ての相手方機器との間の順序を確定させたイベントを、イベントの発生順序でイベント処理アプリケーションサーバ20へ出力する。これにより、イベント処理装置10は、タイムラグが最も長い相手方機器からの相手イベントの受信を待ち合わせずとも、自イベントと相手イベントとの順序の逆転を是正するので、相手イベントの受信の待機時間を低減でき、イベントの鮮度の低下を抑制できる。
[イベント処理装置の構成]
図2は、イベント処理装置の構成を示す機能ブロック図である。イベント処理装置10は、受信部11、待ち時間設定部12、バッファリング部13、イベント発生順序判定部14、記憶部15を有する。記憶部15は、待ち時間管理テーブル15a、順序整列用管理テーブル15bをさらに有する。以降では、図2と図8を用いて、処理の流れの概要を説明する。
受信部11は、イベント送信側機器30からイベントを受信する(ステップS101(図8参照、以下同様))。受信部11は、イベント送信側機器30からイベントを受信すると、待ち時間設定部12にイベントの送信元機器、イベントの発生時刻、イベントの受信時刻を通知(ステップS102)後、受信イベントをバッファリング部13へ送信する(ステップS103)。なお、受信部11は、受信イベントに一意のイベント識別情報を付与してバッファリング部13へ送信する。
ステップS201では、待ち時間設定部12は、受信部11から受信を通知されたイベントの発生時刻とイベントの受信時刻との時間差をタイムラグとして算出する。そして、待ち時間設定部12は、受信を通知されたイベントの送信元機器であるイベント送信側機器30ごとにタイムラグを管理し、タイムラグの最大値を、該当するイベント送信側機器30からのイベント受信を待つイベント待ち時間と決定する。そして、待ち時間設定部12は、該当するイベント送信側機器30を一意に識別する識別情報に決定したイベント待ち時間を対応付けて待ち時間管理テーブル15aに登録する(以上、ステップS201)。
なお、待ち時間設定部12が、ステップS201において、イベント待ち時間を決定する方法は、次の様にしてもよい。ここで、イベント処理装置10の電源投入直後等は、各イベント送信側機器30に対応するイベント待ち時間として、初期値が待ち時間管理テーブル15aに登録されるとする。なお、初期値は、所定値、もしくは既に設定されている他のイベント送信側機器30のイベント待ち時間に基づく統計値(最小値、最大値、中央値、最頻値、平均等)としてもよい。
すなわち、待ち時間設定部12は、受信部11から受信を通知されたイベントの発生時刻とイベントの受信時刻に基づくタイムラグを算出する。そして、待ち時間設定部12は、待ち時間管理テーブル15aを参照し、タイムラグと、受信部11から受信を通知されたイベントの送信元機器であるイベント送信側機器30に対応するイベント待ち時間とを比較する。そして、待ち時間設定部12は、タイムラグが、待ち時間管理テーブル15aに登録されている受信時間を上回る場合、タイムラグで、該当するイベント送信側機器30に対応するイベント待ち時間を更新する。
なお、待ち時間設定部12は、イベント送信側機器30ごとに、過去の全てのタイムラグを履歴として蓄積しておき、最新のタイムラグが、履歴に基づく統計的な外れ値である場合、最新のタイムラグでイベント待ち時間を更新しないとしてもよい。そして、最新のタイムラグが統計的な外れ値である場合、待ち時間設定部12は、最新のタイムラグを蓄積しないとしてもよい。
例えば、待ち時間設定部12は、イベント送信側機器30ごとに、過去の一定期間のタイムラグを時系列に並べた場合のタイムラグの変化量もしくは変化率をヒストグラムとして蓄積する。そして、待ち時間設定部12は、最新のタイムラグと同一値もしくは一定範囲内で近似する値の出現度数が一定数未満の場合、最新のタイムラグを外れ値としてもよい。
または、待ち時間設定部12は、最新のタイムラグが、イベント送信側機器30ごとの所定の閾値を超えるか否かを判定し、所定の閾値を超える場合に、最新のタイムラグを外れ値としてもよい。または、待ち時間設定部12は、イベント送信側機器30ごとに、タイムラグの履歴の平均と、最新のタイムラグとの差である偏差の絶対値を、タイムラグの履歴の標準偏差で割った統計値が所定値を超える場合、最新のタイムラグを外れ値としてもよい。例えば、所定値が“3”の場合は、いわゆる“3σの法則”に従って外れ値を除外することになる。
この様に、最新のタイムラグが統計的な外れ値である場合、最新のタイムラグで待ち時間管理テーブル15aに登録されているイベント送信側機器30に対応するイベント待ち時間を更新しないことにより、イベント待ち時間の精度が低下することを防止できる。
バッファリング部13は、受信部11から受信したイベントを蓄積(バッファリング)する(ステップS301)。また、バッファリング部13は、受信部11からイベントを受信したことをイベント発生順序判定部14へ通知する(ステップS302)。また、バッファリング部13は、イベント発生順序判定部14からの通知に応じて、発生順序が確定されたイベントをイベント処理アプリケーションサーバ20へ出力する(ステップS303)。
イベント発生順序判定部14は、イベント送信側機器30からのイベントの受信(ステップS401)もしくは後述のタイマのタイムアウト(ステップS408Yes)を契機として、各イベントについて、送信元機器と相手方機器の順序の判定を繰り返す。そして、イベント発生順序判定部14は、送信元機器と全ての相手方機器の順序を確定させる(ステップS405、ステップS409)。そして、イベント発生順序判定部14は、送信元機器と全ての相手方機器との間の順序が確定されたイベントをイベント処理アプリケーションサーバ20へ出力する様にバッファリング部13に対して通知する(ステップS411)。
具体的には、イベント発生順序判定部14は、バッファリング部13からイベントの受信を通知されると、通知されたイベントに対応する新規レコードを順序整列用管理テーブル15bに挿入する(ステップS404)。なお、イベント発生順序判定部14は、イベントの発生時刻の昇順で整列しながら新規レコードを順序整列用管理テーブル15bに挿入する。
イベント発生順序判定部14は、受信イベントに対応する新規レコードを順序整列用管理テーブル15bに挿入する際、待ち時間管理テーブル15aから各相手方機器の待ち時間を取得する(ステップS402)。そして、イベント発生順序判定部14は、受信イベントの発生時刻に各相手方機器の待ち時間をそれぞれ加算した時刻を、各相手方機器からの相手イベントの受信待ち上限時刻とする(ステップS403)。そして、イベント発生順序判定部14は、受信イベントの受信時刻及び各相手方機器からの相手イベントの受信待ち上限時刻を、受信イベントに対応する新規レコードに登録する(ステップS404)。
イベント発生順序判定部14は、受信イベントに対応する新規レコードを挿入する際、受信イベントと、相手イベントについて、受信イベントの送信元機器と相手方機器との間の順序を判定する(ステップS405)。そして、イベント発生順序判定部14は、受信イベントは、相手イベントとの間の順序が確定したか否かを判定する(ステップS406)。
また、イベント発生順序判定部14は、受信イベントに対応する新規レコードを挿入する際、受信イベントについて、相手方機器に対応する相手イベントの受信待ち上限時刻に基づくタイマの計時を開始する(ステップS407)。そして、イベント発生順序判定部14は、タイマの計時がタイムアウトすると(ステップS408Yes)、受信イベントと、タイムアウトした相手方機器であるイベント送信側機器30に対応する相手イベントとの間の順序を判定する(ステップS409)。
上記の様にして、イベント発生順序判定部14は、全ての相手方機器に対応する相手イベントの受信待ち上限時刻が“順序判定済”となったイベント(ステップS410Yes)を順序確定済のイベントとしてバッファリング部13に通知する(ステップS411)。
なお、受信部11及びバッファリング部13は、複数の機器からイベントを受信した各受信イベントをバッファに格納する受信部の一例である。待ち時間設定部12は、受信イベントの送信元機器以外の相手方機器ごとに待ち時間を設定する待ち時間設定部の一例である。バッファリング部13及びイベント発生順序判定部14は、バッファに格納された受信イベントのうち、受信イベントの送信元機器と、他の全ての相手方機器との間で発生順序が確定されたイベントを、発生時刻順に送信する送信部の一例である。
なお、受信部11、待ち時間設定部12、バッファリング部13、イベント発生順序判定部14は、一例として、ASIC、CPU、MPU等の集積回路で実現できる。ASICは“Application Specific Integrated Circuit”、CPUは“Central Processing Unit”、MPUは“Micro Processing Unit”の略である。また、記憶部15は、一例として、RAM(Random Access Memory)、フラッシュメモリ(flash memory)、磁気ディスク、光ディスク、光磁気ディスク等を記憶媒体とする記憶装置で実現できる。
[待ち時間管理テーブル]
図3は、待ち時間管理テーブルの一例を示す図である。図3に示す様に、待ち時間管理テーブル15aでは、「イベント送信側機器」と、「イベント待ち時間」のカラムを有する。待ち時間管理テーブル15aでは、「イベント送信側機器」の値と、「イベント待ち時間」の値が対応付けられて管理される。
「イベント送信側機器」は、イベント送信側機器を一意に識別する識別情報を示す。「イベント待ち時間」は、対応するイベント送信側機器30が相手方機器である場合に、自イベントがイベント処理装置10により受信されたとき、自イベントの発生時刻を開始時点として、イベント処理装置10による相手イベントの受信を待つ時間を示す。
図3に示す例では、イベント送信側機器30Aに、イベント待ち時間として時間“w1”が対応付けられている。これは、イベント送信側機器30Aが相手方機器である場合、イベント処理装置10は、自イベントがイベント処理装置10により受信されたときを開始時点として、時間“w1”だけイベント送信側機器30Aからのイベント受信を待つことを意味する。イベント送信側機器30B、300Cについても同様である。
なお、待ち時間管理テーブル15aは、互いにイベントを待ち合せるイベント送信側機器30のグループごとにテーブルを分けて作成されてもよい。または、待ち時間管理テーブル15aは、互いにイベントを待ち合せるイベント送信側機器30のグループの別なく一つのテーブルで作成されてもよい。または、待ち時間管理テーブル15aは、互いにイベントを待ち合せるイベント送信側機器30のグループを一意の識別情報で識別可能にして、異なるグループのイベント送信側機器30に対応する「イベント待ち時間」を一つのテーブルで管理するとしてもよい。
[順序整列用管理テーブル]
図4は、順序整列用管理テーブルの一例を示す図である。図4に示す様に、順序整列用管理テーブル15bは、受信イベントごとに、「発生時刻」、「受信時刻」、「送信元機器」、「イベント識別情報」、「イベント待ち上限時刻(受信時刻)」のカラムを有する。順序整列用管理テーブル15bでは、「発生時刻」の値、「受信時刻」の値、「送信元機器」の値、「イベント識別情報」の値、「イベント待ち上限時刻(受信時刻)」の値が対応付けられて管理される。
さらに、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」のカラムは、イベント送信側機器ごとにカラムを有し、イベント送信側機器ごとに「イベント待ち上限時刻(受信時刻)」の値が管理される。
「イベント発生時刻」は、順序整列用管理テーブル15bにおいて、該当するイベントが発生した時刻を示す。「受信時刻」は、順序整列用管理テーブル15bにおいて、該当するイベントがイベント処理装置10により受信された時刻を示す。「送信元機器」は、順序整列用管理テーブル15bにおいて、該当するイベントを送信したイベント送信側機器30を示す。「イベント識別情報」は、順序整列用管理テーブル15bにおいて、該当するイベントを一意に識別する識別情報を示す。
「イベント待ち上限時刻(受信時刻)」は、イベント送信側機器が、該当するイベントを送信した送信元機器の場合には、イベントの受信時刻を示す。また、「イベント待ち上限時刻(受信時刻)」は、イベント送信側機器が相手方機器である場合には、イベント処理装置10が相手方機器からの相手イベントの受信を待つ上限時刻を示す。
図4に示す例では、「イベント識別情報」“e2”のイベントを自イベントと呼ぶこととする場合、「イベント識別情報」“e1”のイベントが、発生順序の判定対象である相手イベントである。この場合、自イベントの「発生時刻」は“t0”、「受信時刻」は“t4”、「送信元機器」は“イベント送信側機器30B”である。また、自イベントは、「イベント待ち上限時刻」“t0+w1”まで、相手方機器であるイベント送信側機器30Aからの相手イベントの受信を待つことを示す。同様に、自イベントは、「イベント待ち上限時刻」“t0+w3”まで、相手方機器であるイベント送信側機器30Cからの相手イベントの受信を待つことを示す。
また、「イベント識別情報」“e2”のイベントは、“イベント送信側機器30B”を送信元機器とするイベントであるので、「イベント待ち上限時刻(受信時刻)」のイベント送信側機器30Bに対応させて、自イベントの「受信時刻」“(t4)”が登録される。
同様に、図4に示す例では、「イベント識別情報」“e1”のイベントを自イベントと呼ぶこととする場合、「イベント識別情報」“e2”のイベントが、発生順序の判定対象である相手イベントである。この場合、自イベントの「発生時刻」は“t1”、「受信時刻」は“t3”、「送信元機器は」“イベント送信側機器30A”である。
また、図4に示す例では、自イベントは、「イベント待ち上限時刻」“t1+w2”まで、相手方機器であるイベント送信側機器30Bからの相手イベントの受信を待つことを示す。同様に、自イベントは、「イベント待ち上限時刻」“t1+w3”まで、相手方機器であるイベント送信側機器30Cからの相手イベントの受信を待つことを示す。
また、「イベント識別情報」“e1”のイベントは、“イベント送信側機器30A”を送信元機器とするイベントであるので、「イベント待ち上限時刻(受信時刻)」のイベント送信側機器30Aに対応させて、自イベントの「受信時刻」“(t3)”が登録される。
なお、図4に示すイベント送信側機器ごとの「イベント待ち上限時刻(受信時刻)」において、時刻を括弧書きで表記することで、イベント待ち上限時刻と、受信時刻とを区別している。
なお、順序整列用管理テーブル15bは、互いにイベントを待ち合せるイベント送信側機器30のグループごとにテーブルを分けて作成されてもよい。また、順序整列用管理テーブル15bは、互いにイベントを待ち合せるイベント送信側機器30のグループを一意の識別情報で識別可能にして、異なるグループのイベント送信側機器30に対応する「イベント待ち上限時刻」を一つのテーブルで管理してもよい。
[イベント受信時の処理]
図5は、イベント受信時の処理例を説明する図である。図5で説明する処理は、イベント処理装置10によりイベントが受信されるごとに行われる。図5では、イベント処理装置10が受信したイベント送信側機器30Aからのイベントe1が自イベントである。この場合、イベント送信側機器30B、30Cがイベント処理装置10へ送信するイベントは、相手イベントである。つまり、図5では、イベント送信側機器30Aが送信元機器であり、イベント送信側機器30B、30Cが、相手方機器である場合を示す。なお、イベント送信側機器30B、30Cが自イベントの送信元機器となる場合も同様である。
図5では、イベントe1を受信した時刻“t3”が現在時刻である。また、図5では、イベント送信側機器30Aが時刻“t1”に発生した自イベントをイベント処理装置10へ送信し、時刻“t3”にイベント処理装置10により自イベントが受信された場合を示す。イベント処理装置10の受信部11は、時刻“t3”にイベント送信側機器30Aから自イベントを受信すると、待ち時間設定部12に自イベントの送信元機器、発生時刻、受信時刻を通知する。また、受信部11は、自イベントにイベント識別情報“e1”(以下、イベントe1と呼ぶこととする)を付与してバファリング部13へ送信する。
待ち時間設定部12は、イベントe1の受信が受信部11から通知されたことを契機として、イベントe1の受信時刻“t3”及び発生時刻“t1”の時間差“w1”を算出する(ステップS11)。そして、待ち時間設定部12は、時間差“w1”で、必要に応じて、待ち時間管理テーブル15aの“イベント送信側機器30A”に対応するイベントのイベント待ち時間を更新する(ステップS12)。
そして、イベント発生順序判定部14は、他に受信済みイベントが無いことから、相手方機器ごとにイベント待ち時間を設定する。具体的には、イベント発生順序判定部14は、イベントe1の相手イベントを送信する相手方機器であるイベント送信側機器30B、30Cに各々対応するイベント待ち時間“w2”、“w3”をそれぞれ読み出す(ステップS13、ステップS14)。
そして、イベント発生順序判定部14は、イベントe1の発生時刻“t1”に、イベント送信側機器30Bからのイベント受信の待ち時間“w2”を加算し、“t1+w2”を得る(ステップS15)。“t1+w2”は、イベント送信側機器30Bからのイベント受信の待ち時刻の上限を示すイベント待ち上限時刻である。
同様に、イベント発生順序判定部14は、イベントe1の発生時刻“t1”に、イベント送信側機器30Cからのイベント受信の待ち時間“w3”を加算し、“t1+w3”を得る(ステップS16)。“t1+w3”は、イベント送信側機器30Cからのイベント受信の待ち時刻の上限を示すイベント待ち上限時刻である。
そして、イベント発生順序判定部14は、イベントe1の発生時刻“t1”、受信時刻“t3”、送信元機器“30A”、イベント識別情報“e1”を含む新規レコードを順序整列用管理テーブル15bに挿入する。さらに、新規レコードには、イベント送信側機器ごとの「イベント待ち上限時刻(受信時刻)」が登録される。
すなわち、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」において、自イベントを送信した送信元機器であるイベント送信側機器30Aに受信時刻“(t3)”を対応付けて登録する。
また、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」において、相手方機器であるイベント送信側機器30Bに「イベント待ち上限時刻」“t1+w2”を対応付けて登録する。同様に、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」において、相手方機器であるイベント送信側機器30Cに「イベント待ち上限時刻」“t1+w3”を対応付けて登録する。
そして、イベント発生順序判定部14は、順序整列用管理テーブル15bに登録した「イベント待ち上限時刻」“t1+w2”まで計時するタイマを作動させる。同様に、イベント発生順序判定部14は、順序整列用管理テーブル15bに登録した「イベント待ち上限時刻」“t1+w3”まで計時するタイマを作動させる。
[イベント発生順序判定処理(イベント受信時)]
図6は、イベント発生順序判定処理(イベント受信時)の処理例を説明する図である。図6で説明する処理は、イベント処理装置10によりイベントが受信されるごとに行われる。図6では、イベントe2を受信した時刻“t4”が現在時刻である。また、受信したイベントe2が自イベント、自イベントの送信元機器(イベント送信側機器30B)以外のイベント送信側機器30(イベント送信側機器30A、30C)が相手方機器である。なお、イベント送信側機器30A、30Cが送信元機器となる場合も同様である。
なお、図6では、イベントe1と、イベント送信側機器30Bにおいてイベントe1よりも早く発生したが、イベントe1よりも遅くイベント処理装置10により受信されたイベントe2の二つのイベントについて発生順序を判定する場合を説明する。しかし、イベントe1と発生順序を比較するイベントの発生時刻、受信時刻、送信元機器は、イベントe2の様に限られるものではない。
図6では、現在時刻が時刻“t3”から時刻“t4”まで経過したことにより、図5から状況が変化している。図6において、時刻“t4”で「イベント識別情報」“e2”のイベントがイベント処理装置10により受信され、対応する新規レコードが順序整列用管理テーブル15bに挿入される処理の説明は、図5と同様であるので省略する。なお、以下、イベント識別情報“e2”のイベントをイベントe2と呼ぶこととする。
イベント発生順序判定部14は、イベントe2に対応する新規レコードを順序整列用管理テーブル15bに発生時刻順に並ぶように挿入すると、イベントe1及びイベントe2を送信したイベント送信側機器30A、30B間でイベントの発生順序の判定を行う。
図6では、イベントe1が、相手方機器からのイベント受信待ちの間に、イベント処理装置10により相手イベントであるイベントe2が受信されたことを示す。この場合、イベント発生順序判定部14は、イベントe2に対応する新規レコードを順序整列用管理テーブル15bに挿入する。
そして、イベント発生順序判定部14は、受信イベントe2の送信元機器(イベント送信側機器30B)からのイベントを相手イベントとして待っていたものがあるかを確認する。このため、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」のカラムにおいて、イベントe2の送信元機器であるイベント送信側機器30Bの列を上から下へ読み進める。そして、イベント発生順序判定部14は、「受信時刻」を示す“(t4)”と、「イベント待ち上限時刻」を示す“t1+w2”を検出する。イベント発生順序判定部14は、「受信時刻」“(t4)”と、「イベント待ち上限時刻」“t1+w2”の組合せから、イベントe2がイベント処理装置10による受信を待っていたイベントe1が存在することを検出する(以上、ステップS21)。
そして、イベント発生順序判定部14は、イベントe1、e2の発生順序を、発生時刻をもとに判定する。そして、イベント発生順序判定部14は、イベントe1の「イベント待ち上限時刻(受信時刻)」の、イベント送信機器30Bに対応する「イベント待ち上限時刻」“t1+w2”を“順序判定済”に更新する(以上、ステップS22)。なお、イベンe1、e2は、順序整列用管理テーブルへのイベント挿入時点で発生時刻順にソートされているため、発生順序の判定を省略することも可能である。
なお、イベント発生順序判定部14は、イベントe2を待っていたイベントが複数ある場合、該当する全てのイベントについて、ステップS21及びステップS22と同様処理する。すなわち、イベント発生順序判定部14は、「イベント待ち上限時刻(受信時刻)」の、イベントe2の受信を待っていた全てのイベント送信側機器に該当する列を、ステップS21及びステップS22と同様に処理する。
また、イベント発生順序判定部14は、イベントe2がイベントの受信を待ち合せようとするイベントのうち、すでに受信済みのものがあるかを調べる。具体的には、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」において、イベントe2がイベントの受信を待ち合せようとするイベント送信側機器30Aの列を上から下へ読み進める。そして、イベント発生順序判定部14は、「イベント待ち上限時刻」“t0+w1”と「受信時刻」“(t3)”を検出する。イベント発生順序判定部14は、「イベント待ち上限時刻」“t0+w1”と、「受信時刻」“(t3)”の組合せから、イベントe2がイベント処理装置10による受信を待とうとするイベントe1が既に受信済であることを検出する(ステップS23)。
そして、イベント発生順序判定部14は、イベントe2の「イベント待ち上限時刻(受信時刻)」のイベント送信機器30Aに対応する「イベント待ち上限時刻」“t0+w1”を“順序判定済”に更新する(以上、ステップS24)。
なお、イベント発生順序判定部14は、イベントe2が待とうとするイベントが複数ある場合、該当する全てのイベントについて、ステップS23及びステップS24と同様に処理する。すなわち、イベント発生順序判定部14は、「イベント待ち上限時刻(受信時刻)」のイベントe2が待ち合せようとする全てのイベント送信側機器に該当する列を、ステップS23及びステップS24と同様に処理する。
[イベント発生順序判定処理(タイムアウト時)]
図7は、イベント発生順序判定処理(タイムアウト時)の処理例を説明する図である。図7で説明する処理は、イベント発生順序判定部14が計時するタイマがタイムアウトするごとに行われる。図7では、図6同様に、現在時刻が“t4”である。また、図7では、図6同様に、イベント送信側機器30Bがイベント処理装置10へ自イベントを送信する送信元機器であり、イベント送信側機器30A、30Cがイベント処理装置10へ相手イベントを送信する相手方機器である。なお、イベント送信側機器30A、30Cが自イベントの送信元機器となる場合も同様である。
イベント発生順序判定部14は、イベント送信側機器30からイベントを受信したときに、受信したイベントが待ち合せようとする相手方機器からの相手イベント受信の待ち時間をイベント待ち上限時刻まで計時するタイマを作動させる。図7では、図6の処理に引き続き、イベント発生順序判定部14は、自イベントであるイベントe2が待とうとする、相手方機器であるイベント送信側機器30Cからの相手イベントの受信の待ち時間を計時するタイマがタイムアウトとしたことを検出する。具体的には、イベント発生順序判定部14は、イベント送信側機器30Cからの相手イベントの受信の待ち時間を計時するタイマがタイムアウトしたことを検出する(ステップS31)。そして、イベント発生順序判定部14は、自イベントe2の発生時刻“t0”より前に発生したイベントが相手方機器(イベント送信側機器30C)から通知されることは無いと判断する。そして、イベント発生順序判定部14は、イベント送信側機器30Cに対応する「イベント待ち上限時刻(受信時刻)」“t0+w3”を“順序判定済”へ更新する(ステップS32)。
以上の様に、イベント発生順序判定部14は、全ての相手方機器に対応する「イベント受信待ち上限時刻(受信時刻)」が“順序判定済”に更新されたイベントe2を順序確定済として、バッファリング部13にイベントe2を出力するように指示する。バッファリング部13は、イベント発生順序判定部14からの指示に応じて、イベント処理アプリケーションサーバ20へイベントe2を出力する。
[イベント処理装置における処理]
図8は、イベント処理装置における処理を示すタイムチャートの一例を示す図である。図8に示すタイムチャートは、イベント処理装置10において、受信部11がイベントを受信したことを契機として処理が開始される。先ず、イベント処理装置10において、受信部11は、イベント送信側機器30からイベントを受信する(ステップS101)。そして、受信部11は、イベントを受信したことを、イベントの発生時刻、受信時刻等とともに待ち時間設定部12に通知する(ステップS102)。また、受信部11は、ステップS101で受信した受信イベントにイベント識別子を付与してバッファリング部13へ送信する(ステップS103)。
待ち時間設定部12は、ステップS102で受信部11から受信イベントの通知に基づき、イベントの発生時刻と受信時刻の時間差で受信イベントを送信したイベント送信側機器からイベント受信の待ち上限時間を決定する(ステップS201)。
バッファリング部13は、受信部11から受信した受信イベントをバッファリングする(ステップS301)。そして、バッファリング部13は、イベント発生順序判定部14に、受信部11から受信した受信イベントをバッファリングしたことを通知する(ステップS302)。
イベント発生順序判定部14は、バッファリング部13から受信イベントのバッファリングの通知を受信する(ステップS401)。そして、イベント発生順序判定部14は、待ち時間設定部12に、イベント送信側機器ごとの「イベント待ち時間」を問い合わせて取得する(ステップS402)。なお、待ち時間設定部12は、イベント発生順序判定部14からの問い合わせに応じて、待ち時間管理テーブル15aを参照して、イベント送信側機器ごとの「イベント待ち時間」を取得し、イベント発生順序判定部14に応答する。
そして、イベント発生順序判定部14は、ステップS402で取得した「イベント待ち時間」に基づき、受信イベントが自イベントである場合の相手方機器となるイベント送信側機器からの相手イベントの待ち上限時刻を算出する(ステップS403)。
そして、イベント発生順序判定部14は、順序整列用管理テーブル15bに、発生時刻の順序で受信イベントを挿入する(ステップS404)。ステップS404の処理の際、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」の受信イベントの送信元機器に対しては、受信イベントの受信時刻を登録する。また、ステップS404の処理の際、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」の受信イベントの相手方機器に対しては、相手イベントのイベント待ち上限時刻を登録する。そして、イベント発生順序判定部14は、後述するイベント発生順序判定処理(イベント受信時)を行う(ステップS405)。
そして、イベント発生順序判定部14は、順序整列用管理テーブル15bにおいて、受信イベントは、相手方機器からの相手イベントが順序確定済であるか否かを判定する(ステップS406)。イベント発生順序判定部14は、相手方機器からの相手イベントが順序確定済であると判定した場合(ステップS406Yes)、ステップS410へ処理を移す。一方、イベント発生順序判定部14は、全ての相手方機器からの相手イベントが順序確定済であると判定しなかった場合(ステップS406No)、ステップS407へ処理を移す。
ステップS407では、イベント発生順序判定部14は、受信イベントが受信を待つ相手イベントについて、相手イベントに相手方機器を対応付けて、相手イベントの受信を待つイベント待ち上限時刻まで計時するタイマの作動を開始させる。そして、イベント発生順序判定部14は、ステップS408で作動を開始させたタイマがタイムアウトしたか否かを判定する(ステップS408)。具体的には、ステップS408では、イベント発生順序判定部14は、相手イベントのイベント待ち上限時刻から現在時刻を差し引いた結果が負又は0になった場合に、タイムアウトと判定する。
イベント発生順序判定部14は、ステップS408でタイマがタイムアウトしたと判定した場合(ステップS408Yes)、ステップS409へ処理を移す。一方、イベント発生順序判定部14は、ステップS408で作動を開始させたタイマがタイムアウトしたと判定しなかった場合(ステップS408No)、ステップS408処理を繰り返す。
ステップS409では、イベント発生順序判定部14は、後述するイベント発生順序判定処理(タイムアウト時)を行う(ステップS409)。イベント発生順序判定部14は、ステップS409の処理が終了すると、ステップS410へ処理を移す。
ステップS410では、イベント発生順序判定部14は、順序整列用管理テーブル15bにおいて、全ての相手方機器からの相手イベントが順序確定済である順序確定済イベントが存在するか否かを判定する。イベント発生順序判定部14は、順序整列用管理テーブル15bにおいて、順序確定済イベントが存在すると判定した場合(ステップS410Yes)、ステップS411へ処理を移す。一方、イベント発生順序判定部14は、順序整列用管理テーブル15bにおいて、順序確定済イベントが存在すると判定しなかった場合(ステップS410No)、処理を終了する。
ステップS411では、イベント発生順序判定部14は、ステップS410の処理で判定された順序確定済イベントをイベントの発生順序でイベント処理アプリケーションサーバ20へ送信する指示を、イベント識別子を指定してバッファリング部13に通知する。
そして、バッファリング部13は、イベント発生順序判定部14から順序確定済イベントの送信指示を通知されると、送信が指示されたイベントを、イベントの発生順序でイベント処理アプリケーションサーバ20へ送信する(ステップS303)。
[イベント発生順序判定処理(イベント受信時)]
図9は、イベント発生順序判定処理(イベント受信時)を示すフローチャートである。図9は、図8のステップS405で示したイベント発生順序判定処理(イベント受信時)の詳細を示すフローチャートである。
先ず、ステップS405aでは、イベント発生順序判定部14は、順序整列用管理テーブル15bにおいて、到着(受信)イベントEaの送信元機器Saからのイベントを待っていた相手イベントEkが存在するか否かを判定する。ステップS405aは、既に到着済で今回のイベント到着を待っていたイベントの順序判定処理である。以下、相手イベントEkの送信元機器Skを相手方機器Skと呼ぶこととする。具体的には、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」の到着イベントEaの送信元機器Saに該当する欄を、発生順序(上から)に、待っていたイベントEkがあるかを調べる。ステップS405aは、図6で、イベント発生順序判定部14が、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」の受信イベント(イベントe2)の送信元機器(イベント送信側機器30B)に該当する欄を上から走査することに対応する。
イベント発生順序判定部14は、到着イベントEaの送信元機器Saからのイベントを待っていた相手イベントEkが存在すると判定した場合(ステップS405aYes)、ステップS405bへ処理を移す。ステップS405aYesは、図6で、イベント発生順序判定部14が、「イベント待ち上限時刻(受信時刻)」のイベント送信側機器30Bに該当する欄にイベント待ち上限時刻“t1+w2”が設定されているイベントe1のレコードを検出することに対応する。一方、イベント発生順序判定部14は、到着イベントEaの送信元機器Saからのイベントを待っていた相手イベントEkが存在すると判定しなかった場合(ステップS405aNo)、ステップS405cへ処理を移す。
ステップS405bでは、イベント発生順序判定部14は、EkとEaの発生時刻を比較し、順序判定し、該当する2項関係を“順序判定済”とする。具体的には、イベント発生順序判定部14は、到着して相手イベントを待っているイベントEkを自イベント、到着イベントEaを相手イベントとして、順序整理用管理テーブル15bで、自イベントEkと相手方機器Saの交点を“順序判定済”とする。なお、イベント発生順序判定部14は、到着イベントEaの到着を待っていたイベントEkが複数存在する場合は、ステップS405bの処理を繰り返し行う。ステップS405bは、図6で、イベント発生順序判定部14が、順序整理用管理テーブル15bのイベントe1のレコードと「イベント待ち上限時刻(受信時刻)」のイベント送信側機器30Bの欄との交点を“順序判定済”とすることに対応する。イベント発生順序判定部14は、ステップS405bの処理が終了すると、ステップS405cへ処理を移す。
ステップS405cでは、イベント発生順序判定部14は、到着イベントEaが相手方機器Skからの相手イベントEkの到着を待とうとしていた期間に、既に到着済の相手イベントEkが存在するか否かを判定する。ステップS405cは、到着イベントの順序判定処理である。具体的には、イベント発生順序判定部14は、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」の相手イベントEkの送信元機器Skに該当する欄を、発生時刻順に、到着済イベントがあるかを調べる。ステップS405cは、図6で、イベント発生順序判定部14が、順序整列用管理テーブル15bの「イベント待ち上限時刻(受信時刻)」のイベントe2の相手方機器(イベント送信側機器30A)に該当する欄をイベントの発生順序で走査することに対応する。
イベント発生順序判定部14は、既に到着済の相手イベントEkが存在すると判定した場合(ステップS405cYes)、ステップS405dへ処理を移す。ステップS405cYesは、図6で、イベント発生順序判定部14が、「イベント待ち上限時刻(受信時刻)」のイベント送信側機器30Aに該当する欄にイベントの受信時刻“(t3)”が設定されているイベントe1のレコードを検出することに対応する。一方、イベント発生順序判定部14は、既に受信済の相手イベントEkが存在すると判定しなかった場合(ステップS405cNo)、ステップS405eへ処理を移す。
ステップS405dでは、イベント発生順序判定部14は、EaとEkの発生時刻を比較し、順序判定し、該当する2項関係を“順序判定済”とする。具体的には、イベント発生順序判定部14は、到着してイベントを待っているイベントEaを自イベント、到着イベントEkを相手イベントとして、自イベントEaと相手方機器Skとの交点を“順序判定済”とする。なお、イベント発生順序判定部14は、到着イベントEaが相手方機器Skからのイベント到着を待とうとしていた期間に、相手方機器Skから到着済の全ての相手イベントEkに対してステップS405dの処理を行う。ステップS405dは、図6で、イベント発生順序判定部14が、イベントe2を自イベントとし、順序整理用管理テーブル15bのイベントe2と「イベント待ち上限時刻(受信時刻)」の相手方機器30Aの列との交点を“順序判定済”とすることに対応する。イベント発生順序判定部14は、ステップS405dの処理が終了すると、ステップS405eへ処理を移す。
ステップS405eでは、イベント発生順序判定部14は、順序整理用管理テーブル15bにおいて、他の全ての相手方機器との“順序判定済”のイベントが存在するか否かを判定する。イベント発生順序判定部14は、他の全ての相手方機器との“順序判定済”のイベントが存在すると判定した場合(ステップS405eYes)、ステップS405fへ処理を移す。ステップS405eYesとなるのは、各イベントの相手方機器との交点が全て“順序判定済”の場合である。一方、イベント発生順序判定部14は、他の全ての相手方機器との“順序判定済”のイベントが存在すると判定しなかった場合(ステップS405eNo)、図8のステップS406へ処理を移す。ステップS405fでは、イベント発生順序判定部14は、ステップS405eでYesとされた該当イベントを順序確定済とし、図8のステップS406へ処理を移す。
[イベント発生順序判定処理(タイムアウト時)]
図10は、イベント発生順序判定処理(タイムアウト時)を示すフローチャートである。図10は、図8のステップS409で示したイベント発生順序判定処理(タイムアウト時)の詳細を示すフローチャートである。
先ず、ステップS409aでは、イベント発生順序判定部14は、タイムアウトしたイベントEkと、その相手方機器Saを特定する。ステップS409aは、図7で、イベント発生順序判定部14が、イベントe2において、相手方機器であるイベント送信側機器30Cからのイベント待ち上限時刻がタイムアウトしたことを検出することに対応する。なお、イベント発生順序判定部14は、図8のステップS407のタイマ設定時に、タイマ、イベントEk、相手方機器Skを対応付けておく。これにより、イベント発生順序判定部14は、タイムアウトしたイベントEkと、イベントEkを相手イベントEaとして待っていた相手方機器Saを特定できる。
そして、ステップS409bでは、イベント発生順序判定部14は、イベントEkが、相手方機器Saの相手イベントEaより先に発生したと判定する。そして、イベント発生順序判定部14は、EkとEaの該当する2項関係を“順序判定済”とする(以上、ステップS409b)。具体的には、イベント発生順序判定部14は、イベントEkと相手方機器Saの交点を“順序判定済”とする。ステップS409bは、図7で、イベント発生順序判定部14が、イベントe2のレコードと「イベント待ち上限時刻(受信時刻)」のイベント送信側機器30Cとの交点を“順序判定済”とすることに対応する。
ステップS409cでは、イベント発生順序判定部14は、順序整理用管理テーブル15bにおいて、他の全ての相手方機器との“順序判定済”のイベントが存在するか否かを判定する。イベント発生順序判定部14は、他の全ての相手方機器との“順序判定済”のイベントが存在すると判定した場合(ステップS409cYes)、ステップS409dへ処理を移す。ステップS409dYesとなるのは、各イベントの相手方機器との交点が全て“順序判定済”の場合である。一方、イベント発生順序判定部14は、他の全ての相手方機器との“順序判定済”のイベントが存在すると判定しなかった場合(ステップS409cNo)、図8のステップS410へ処理を移す。ステップS409dでは、イベント発生順序判定部14は、ステップS409cでYesとされた該当イベントを順序確定済とし、図8のステップS410へ処理を移す。
[イベント送信側機器の追加時の処理]
図11Aは、イベント送信側機器の追加時の処理(待ち時間管理テーブル関連)を説明する図である。図11Bは、イベント送信側機器の追加時の処理(順序整列用管理テーブル関連)を説明する図である。例えば、イベント処理装置10は、イベント処理アプリケーションサーバ20やその他の図示しない装置からの要求に従って、イベント処理装置10がイベントを整列する対象のイベント送信側機器30を追加又は削除してもよい。以下、一例として、イベント送信側機器30A〜30Cのグループに、イベント送信側機器30D〜30Fが追加される場合に、待ち時間管理テーブル15a及び順序整列用管理テーブル15bに関連して行われる処理を説明する。
なお、図11A及び図11Bの例では、イベント送信側機器30D〜30Fの追加の要求を受け付ける前に、イベント識別情報“e2”のイベント及びイベント識別情報“e1”のイベントがイベント送信側機器30B、30Aからそれぞれ受信されていたとする。以下では、イベント識別情報“e1”のイベントをイベントe1と呼び、イベント識別情報“e2”のイベントをイベントe2と呼ぶこととする。
また、図11A及び図11Bの例では、イベント送信側機器30D〜30Fの追加の要求を受け付けた後に、イベント送信側機器30Eから、「発生時刻」“t5”、「受信時刻」“t6”、「イベント識別情報」“e5”のイベントが受信されたとする。以下、「イベント識別情報」“e5”のイベントをイベントe5と呼ぶこととする。
なお、イベント送信側機器30の追加要求及び削除要求は、イベント送信側機器30で動作するアプリケーションから受け付けることもできるし、イベント処理装置10の図示しない入力装置から受け付けることもできる。
イベント処理装置10は、イベント送信側機器30A〜30Cのグループに、イベント送信側機器30D〜30Fを追加する追加要求を受け付けた場合、次のような処理を行う。すなわち、イベント処理装置10は、追加要求を受け付けたイベント送信側機器30D〜30Fごとに「イベント待ち時間」を設定するレコードを待ち時間管理テーブル15aに追加する。なお、イベント送信側機器30D〜30Fごとの「イベント待ち時間」には、イベント送信側機器30D〜30Fからイベントを未受信の場合、所定の初期値を設定してもよい。本実施の形態では、イベント送信側機器30D〜30Fに対して、それぞれ“w4”、“w5”、“w6”が登録されている。そして、図11Bに示す様に、イベント発生順序判定部14は、「イベント待ち上限時刻(受信時刻)」に、イベント送信側機器30D〜30Fの各欄を追加する。その上で、イベント発生順序判定部14は、受信済みのイベントe2とe1に関して、それぞれのイベント待ち時間である、“t0+w4”、“t0+w5”、“t0+w6”と“t1+w4”、“t1+w5”、“t1+w6”を設定する。
そして、図11Aに示す様に、待ち時間設定部12は、イベントe5を受信する。すると、待ち時間設定部12は、前述したように必要に応じて、イベントe5の発生時刻“t5”と受信時刻“t6”の時間差“t6−t5”をイベント送信側機器30Eからのイベント待ち時間として待ち時間管理テーブル15aに設定する。
また、イベント発生順序判定部14は、イベントe5に関して、前述したように、イベント送信側機器30A〜30D、30Fからの「イベント待ち上限時刻(受信時刻)」に、次の時間をそれぞれ設定する。すなわち、イベント発生順序判定部14は、発生時刻に相手方機器からのイベント待ち時間を加算した時間である“t5+w1”、“t5+w2”、“t5+w3”、“t5+w4”、“t5+w6”をそれぞれ設定する。また、イベント発生順序判定部14は、イベントe5はイベント送信側機器30Eの自イベントであるので、イベント送信側機器30Eからの「イベント待ち上限時刻(受信時刻)」に受信時刻“(t5)”を設定する。
そして、イベント発生順序判定部14は、イベントごと、イベント送信側機器ごとに設定した「イベント待ち上限時刻」までそれぞれ計時するタイマを作動させる。そして、イベント発生順序判定部14は、イベント送信側機器ごとの「イベント待ち上限時刻」までに相手方機器から相手イベントを受信したイベントについて、このイベントの送信元機器と、相手方機器との順序を判定済とする。また、イベント発生順序判定部14は、「イベント待ち上限時刻」を超過してタイマがタイムアウトした相手方機器があるイベントについて、このイベントの送信元機器と、相手方機器との順序を判定済とする。
この様に、イベント処理装置10は、各イベントについて、イベントの送信元機器と相手方機器の間の二つの機器間の関係ごとに順序を判定する。よって、イベント処理装置10は、既に判定済のイベント送信側機器間の順序に影響を与えず、イベントを整列する対象とするイベント送信側機器30の追加及び削除に柔軟に対応できる。
以上の実施の形態で開示した各部、各装置の分散及び統合の具体的形態は、図2に示したものに限られず、その全部又は一部を、負荷や使用状況等に応じて、任意の単位で機能的又は物理的に分散及び統合して構成することができる。例えば、受信部11、待ち時間設定部12、バッファリング部13、イベント発生順序判定部14のうちの少なくとも二つが、機能に応じて統合されてもよい。また、受信部11、待ち時間設定部12、バッファリング部13、イベント発生順序判定部14の少なくとも一つが別装置とされ、通信可能に接続され、イベント処理装置10として協働するようにしてもよい。
また、以上の実施の形態で開示した各処理の分散及び統合の具体的形態は、図8〜図10に示したものに限られず、負荷や使用状況等に応じて、任意の単位で分散及び統合して構成することができる。例えば、図9のステップS405a及びステップS405bは、ステップS405c及びステップS405dと処理順序を入れ替えてもよい。
[イベント処理プログラム]
以上の実施の形態で説明した各種の処理は、予め用意されたプログラムをコンピュータで実行されてもよい。図12は、イベント処理プログラムを実行するコンピュータの一例を示す図である。
図12に示すように、コンピュータ100は、バス140を介して接続される操作部110、表示部120、通信部130、CPU150、ROM160、HDD170、RAM180を有する。
HDD170には、図2に示した受信部11、待ち時間設定部12、バッファリング部13、イベント発生順序判定部14と同様の機能を発揮するイベント処理プログラム170a及びイベント処理プログラム170aの実行に要する各種データが予め格納される。イベント処理プログラム170aは、図2に示した各部と同様、適宜統合又は分離してもよい。
図12に示す様に、CPU150が、イベント処理プログラム170aをHDD170から読み出してRAM180に展開する。これによって、イベント処理プログラム170aは、イベント処理プロセス180aとして機能する。なお、イベント処理プロセス180aは、図2に示した各部にて実行される処理、例えば図8〜図10に示す処理を含む。また、CPU150、HDD170及びRAM180上で仮想的に実現される各部は、処理の実行時に適宜に実現されればよい。
なお、イベント処理プログラム170aについては、必ずしも最初からHDD170に格納せずともよい。例えば、コンピュータ100が読み取り可能なフレキシブルディスク、CD−ROM、DVDディスク、光磁気ディスク、ICカード等の「可搬用の物理媒体」にプログラムを記憶させておく。そして、コンピュータ100が、媒体読み取り装置を介して「可搬用の物理媒体」からプログラムを読み出して実行するようにしてもよい。また、公衆網又は閉域網を介してコンピュータ100に接続される他のコンピュータからプログラムを取得して実行するようにしてもよい。
[実施例1]
図13は、実施例1を説明する図である。実施例1は、開示の技術をオンラインゲームの進行管理に利用する例である。図13に示す例では、オンラインゲームにおいて、各種の通信回線で接続された操作端末30A−1〜30B−1等の複数の操作端末からユーザのゲームの進行に係る操作がイベントとして入力される。操作端末30A−1〜30B−1が実施の形態のイベント送信側機器30の例である。
そして、イベントが、操作端末30A−1〜30B−1等の複数の操作端末からオンラインゲームサーバ20−1へ送信される。オンラインゲームサーバ20−1は、受信したイベントに基づいてゲームの進行を管理する。オンラインゲームサーバ20−1が実施の形態のイベント送信側機器30の例である。
オンラインゲームでは、ゲームの進行管理上、操作端末30A−1〜30B−1等の複数の操作端末から入力されたイベントが、オンラインゲームサーバ20−1で、イベントの入力時刻すなわち発生時刻の順序でリアルタイムに処理されることが望ましい。しかし、各ユーザの操作端末30A−1〜30B−1等の複数の操作端末が接続されるネットワーク環境は様々である。また、各ユーザの操作端末30A−1〜30B−1等の複数の操作端末の通信性能も様々である。このため、ネットワーク環境によっては通信遅延が発生し、各ユーザが操作端末30A−1〜30B−1等の複数の操作端末から入力されたイベントが、発生時刻の順序でオンラインゲームサーバ20−1に受信されるとは限らない。
例えば、図13において、操作端末30A−1〜30B−1等の複数の操作端末が接続される個別のネットワーク環境によっては、通信遅延が発生する場合がある。個別のネットワーク環境で通信遅延が発生した場合、各ユーザが操作端末30A−1〜30B−1から入力したイベントが、発生時刻の順序でオンラインゲームサーバ20−1に受信されず、リアルタイム性が求められるオンラインゲームの進行管理に支障を来す。
そこで、開示の技術に係るイベント処理装置10は、操作端末30A−1〜30B−1等の複数の操作端末から送信されたイベントに対して、通信遅延を考慮して発生時刻順で並び替えるイベント発生順序整列処理を行う。そして、イベント処理装置10は、イベント発生順序整列処理を行ったイベントをオンラインゲームサーバ20−1へ出力する。この様に、オンラインゲームサーバ20−1は、発生順序で並び替えられたイベントに基づいてオンラインゲームの進行管理を行うことで、適切にオンラインゲームを進行させることができる。
[実施例2]
図14は、実施例2を説明する図である。実施例2は、開示の技術をオン渋滞マップ作成に利用する例である。図14に示す例では、渋滞マップ作成において、各種の通信回線で接続された携帯端末30A−2〜30D−2等の、車両に持ち込まれる複数の携帯端末から車両の運行に係る情報がイベントとして入力される。携帯端末30A−2〜30D−2が実施の形態のイベント送信側機器30の例である。
車両の運行に係る情報は、GPS(Global Positioning System)による車両の位置情報、車両の速度、車両の進行方向等である。そして、イベントが、携帯端末30A−2〜30D−2等の複数の携帯端末から渋滞マップ作成サーバ20−2へ送信される。渋滞マップ作成サーバ20−2は、受信したイベントに基づいて渋滞マップを作成する。渋滞マップ作成サーバ20−2が実施の形態のイベント送信側機器30の例である。
渋滞マップ作成では、渋滞マップのリアルタイム性を確保するため、携帯端末30A−1〜30B−1等の複数の携帯端末から送信されたイベントが、渋滞マップ作成サーバ20−2で、リアルタイムに処理されることが望ましい。しかし、各携帯端末30A−2〜30D−2等の複数の携帯端末が接続されるネットワーク環境は様々である。また、各携帯端末30A−2〜30D−2等の複数の携帯端末の通信性能も様々である。
さらには、各携帯端末30A−2〜30D−2等の複数の携帯端末が持ち込まれる車両の位置が変化することにより、ネットワーク環境の状態が時々刻々と変化する。よって、携帯端末30A−2〜30D−2等の携帯端末は、無線通信のエリア圏内であればリアルタイムでイベントを送信し、エリア圏外ではイベントを蓄積しておき、エリア圏内になったときに蓄積したイベントを一括送信する。この様な、イベントのリアルタイム送信もしくは一括送信の区別をイベント送信パターンと呼ぶこととする。
この様に、各携帯端末30A−2〜30D−2等の複数の携帯端末から送信されたイベントが、イベント送信パターンを含む様々な要因から生じる通信遅延により、渋滞マップ作成サーバ20−2に受信されたときには、時間的に古い情報になっている場合がある。渋滞マップ作成サーバ20−2が作成した渋滞マップが時間的に古い情報を含んでいる場合、リアルタイム性が要求される渋滞マップとして、信頼度が低下してしまう。
そこで、開示の技術に係るイベント処理装置10は、携帯端末30A−2〜30D−2等の複数の携帯端末から送信されたイベントを、通信遅延やイベント送信パターンの変化を考慮してイベントを発生時刻順で並び替える。そして、イベント処理装置10は、イベントを発生時刻順で並び替えるイベント発生順序整列処理を行ったイベントを渋滞マップ作成サーバ20−2へ出力する。この様にして、渋滞マップ作成サーバ20−2は、発生順序で並び替えられたイベントに基づいて、リアルタイムな渋滞マップの作成を行うことができる。
[実施例3]
図15は、実施例3を説明する図である。実施例3は、開示の技術を圃場管理・圃場作業支援に利用する例である。図15に示す例では、圃場管理・圃場作業支援において、各種の通信回線で接続されたセンサ30A−3〜30C−3や入力端末30D−3からイベントが入力される。すなわち、センサ30A−3〜30C−3や入力端末30Dが実施の形態のイベント送信側機器30の例である。
図15の例では、センサ30A−3は、土壌や農業用水のpH(potential Hydrogen)値を観測するpHセンサである。また、センサ30B−3は、圃場環境の湿度を観測する湿度計である。また、センサ30C−3は、圃場環境の気温や水温を観測する温度計である。また、入力端末30D−3は、圃場作業者が、例えば作業中に発見した観測情報(農作物の生育状況等)や圃場作業の進捗情報等を入力するコンピュータである。
センサ30A−3〜30C−3や入力端末30D−3は、観測情報もしくは入力情報をイベントとして圃場管理及び作業支援サーバ20−3へ送信する。そして、圃場管理及び作業支援サーバ20−3は、受信したイベントに基づいて圃場環境を総合的に判断し、圃場作業の指示を出力する。圃場管理及び作業支援サーバ20−3が、実施の形態のイベント処理アプリケーションサーバ20の例である。
なお、センサ30A−3〜30C−3は、イベントをリアルタイムに送信するもの、周期的に送信するもの、一括して送信するものがある。また、入力端末30D−3がイベントを送信するタイミングも、入力情報に応じて異なる場合がある。この様なイベントの送信タイミングの違いをイベント送信パターンと呼ぶこととする。
圃場管理・圃場作業支援では、農作物の的確な生育管理を行うため、センサ30A−3〜30C−3や入力端末30Dから送信されたイベントが、圃場管理及び作業支援サーバ20−3に適切に処理されることが望ましい。しかし、センサ30A−3〜30C−3や入力端末30D−3から圃場管理及び作業支援サーバ20−3へイベントを送信する際のイベント送信パターンは様々である。
この様に、センサ30A−3〜30C−3や入力端末30D−3から送信されるイベント送信パターンの違いにより、圃場管理及び作業支援サーバ20−3が、受信したイベントに基づいて的確な判断を行えない場合がある。
そこで、開示の技術に係るイベント処理装置10は、センサ30A−3〜30C−3や入力端末30D−3から送信されたイベントを、イベント送信パターンを考慮してイベントを発生時刻順で並び替えた上で圃場管理及び作業支援サーバ20−3へ出力する。この様にして、圃場管理及び作業支援サーバ20−3は、発生順序で並び替えられたイベントに基づいて、農作物の生育状況と圃場環境の総合的な判断に基づいた灌水、農薬や養分の散布の制御及び作業指示をより的確に行うことができる。