以下、本発明の実施形態を図面を参照して詳細に説明する。
[第1の実施形態]
図1は、本発明の第1の実施形態に係る通信システムの構成例を示す図である。
図1において、第1の実施形態における通信システムは、ユーザPC102,103とコンテンツサイト101とがインターネット等のネットワーク104を介して互いに接続されている。複数のクライアントとなるユーザPC102,103は、サーバとなるコンテンツサイト101に対してポーリングを行う。なお、本実施形態では、図示例の通信システムについて説明するが、これに限定されるものではなく、ネットワーク上に他のPCやプリンタ等が接続されていてもよい。また、ユーザPCは、図示の数に限定されるものではない。
ユーザPC102,103は、ネットワーク104での情報転送が可能な標準プロトコルを有するブラウザ120を動作させることが可能である。また、ユーザPC102,103は、ブラウザ120を動作させることにより、HTTP等のプロトコルを用いてコンテンツサイト101にアクセスし、HTMLやXML等の記述言語で作成されたWebページ情報を取得して解析することができる。さらに、ユーザPC102,103は、解析したWebページを不図示のディスプレイ上に表示させることができる。
また、ユーザPC102,103は、プログラム130を動作させることにより、所定の間隔で登録されたハイパーリンクの指し示すデータの状態情報の取得することができる。さらに、ユーザPC102,103は、プログラム130を動作させることにより、HTTP等のプロトコルを用いてコンテンツサイト101にアクセスし、HTMLやXML等の記述言語で作成された状態情報を取得して解析することができる。そして、ユーザPC102,103は、状態情報を解析した結果からデータを含む情報の更新が認められる場合には、更新があったことをディスプレイ上に表示させることができる。
コンテンツサイト101は、制御部106により、ユーザPC102,103からのアクセスに対して情報DB(データベース)107から必要なWebページ情報や状態情報を取得し、アクセス元に送信を行う。また、コンテンツサイト101は、制御部106により、後述する図示の処理を行う。
なお、本実施形態では、Webページ情報を表示するブラウザ120とデータの状態情報の取得を試行するプログラム130とを分けているが同一であってもよいことは云うまでもない。また、本実施形態では、プログラム130は、ユーザに対して更新があったことをディスプレイ上に表示させるが、表示を行わずデータの収集を行ってDBなどにデータを登録する自動収集ツールの機能の一部であってもよいことは云うまでもない。
図2は、図1のユーザPC102,103及びコンテンツサイト101のハードウェア構成の概略を示すブロック図である。
ユーザPC102,103、コンテンツサイト101は、CRTディスプレイ(CRT)201、VRAM202、BMU203を有する。また、キーボード204、PD205、CPU206、ROM207、RAM208、HDD209、FDD210、及びネットワークI/F211を有する。
CRT(Cathode Ray Tube)ディスプレイ201には、例えば、編集中の文書、図形、画像その他の編集情報、アイコン、メッセージ、メニューその他のユーザインタフェース情報が表示される。VRAM202は、CRTディスプレイ201に接続され、該CRTディスプレイ201に表示するための画像が描画される。このVRAM202に生成された画像データは、所定の規定に従ってCRTディスプレイ201に転送され、これによりCRTディスプレイ201に画像が表示される。
BMU(ビットムーブユニット)203は、例えば、メモリ間(例えば、VRAM202と他のメモリとの間)のデータ転送や、メモリと各I/Oデバイス(例えば、ネットワークI/F211)との間のデータ転送を制御する。キーボード204は、文書等を入力するための各種キーを有する。PD(ポインティングデバイス)205は、例えば、CRTディスプレイ201に表示されたアイコン、メニューその他のコンテンツを指示するために使用される。
CPU206は、ROM207、HDD209又はFDD(フレキシブルディスクドライブ)210に格納された制御プログラムに基づいて、上述した各デバイスを制御する。ROM207は、各種制御プログラムやデータを保存する。RAM208は、CPU206のワーク領域、エラー処理時のデータの退避領域、制御プログラムのロード領域等を有する。なお、図1におけるブラウザ120やプログラム130は、ROM207、HDD209又はFDD210に格納される。情報DB107は、HDD209上に構成される。
HDD209は、情報処理装置内で実行される各制御プログラムやコンテンツを格納する。FDD210は、フロッピー(登録商標)ディスク等に代表されるフレキシブルディスクに対するアクセスを制御する。ネットワークI/F211は、他の情報処理装置やプリンタ等とネットワーク104を介して通信を行う。CPUバス212は、アドレスバス、データバス及びコントロールバスを含む。CPU206に対する制御プログラムの提供は、ROM207、HDD209、FDD210から行うこともできるし、ネットワークI/F211を介してネットワーク104経由で他の情報処理装置等から行うこともできる。
次に、図1の通信システムでユーザPC102からコンテンツサイト101にポーリングリクエスト(単に「リクエスト」とも呼ぶ)を送信してから次回リクエスト送信日時を登録するまでの流れを説明する。なお、ユーザPC103もユーザPC102と同様に、以下の処理を実行するものとする。
図3は、図1の通信システムでユーザPC102からコンテンツサイト101にリクエストを送信してから次回リクエスト送信日時を登録するまでの流れを示すフローチャートである。
ユーザPC102は、図6(a)に示すようなリクエスト送信履歴テーブル600を参照し、次回リクエスト送信予定日時になると(ステップS300でYES)、リクエスト送信履歴テーブル600を取得する(ステップS301)。
図6(a)において、リクエスト送信履歴テーブル600は、送信ID601と、次回リクエスト送信予定日時602と、調整ID603と、実際の送信日時604とで構成される。送信ID601は、次回リクエスト送信予定日時と調整IDと実際の送信日時の組合せを識別して管理するために付与されたIDである。次回リクエスト送信予定日時602は、ユーザPC102からコンテンツサイト101に次回問い合わせを行う予定日時である。調整ID603は、コンテンツサイト101が送信予定日時の調整を行ったかどうかを示す識別情報である。実際の送信日時604は、コンテンツの更新有無を問い合わせるためにユーザPC102からコンテンツサイト101にリクエストを送信した実際の送信日時(実行日時)である。
リクエスト送信履歴テーブル600は、ユーザPC102固有のリクエスト送信履歴情報であり、ユーザPC102内のHDD209に保管される(第1の保管手段)。なお、ユーザPC103内のHDD209にも、同様に、ユーザPC103固有のリクエスト送信履歴テーブルが保管されているものとする。
次に、ステップS302にて、ユーザPC102は、ステップS301で取得したリクエスト送信履歴テーブル600とポーリングリクエストをコンテンツサイト101に送信する。このとき、ユーザPC102は、送信するリクエスト送信履歴テーブル600の今回の送信に対応する送信IDに関連付けられた送信日時604に、最新のリクエスト送信日時として現在時刻をセットして送信する。
ステップS303にて、コンテンツサイト101は、ポーリングリクエスト及びリクエスト送信履歴テーブル600をユーザPC102から受信する。次に、ステップS304にて、コンテンツサイト101は、次回リクエスト送信予定日時を算出する。この算出方法については、例えばコンテンツの更新履歴から次回更新時を予測したり、単純に現在時刻から一定時間後を予定日時としても構わない。ステップS304は第1の算出手段の一例である。
ステップS305にて、コンテンツサイト101は、次回リクエスト送信予定日時の調整処理を行う。この調整処理の詳細については図4を用いて詳述する。ステップS306にて、コンテンツサイト101は、ポーリング結果と共に、ステップS305で調整した次回リクエスト送信予定日時の情報をユーザPC102に返す。
ステップS307にて、ユーザPC102は、コンテンツサイト101からポーリング結果と次回リクエスト送信予定日時の情報を受信する。そして、受信した次回リクエスト送信予定日時を最新のリクエスト送信予定日時としてリクエスト送信履歴テーブル600の次回リクエスト送信予定日時602に登録して、本処理を終了する。
ユーザPC102は、ステップS307で登録した次回リクエスト送信予定日時になると、改めてステップS301から処理を実行する。
図4は、図3のステップS305におけるリクエスト送信予定日時調整処理の詳細を示すフローチャートである。
ステップS401にて、コンテンツサイト101内のCPU206は週次調整処理を行う。この週次調整処理の詳細については図5を用いて詳述する。
次に、ステップS402にて、CPU206は、図11に例示するリクエスト送信予定テーブル1000を参照し、次回リクエスト送信予定日時に既に送信予定が登録されているか否かを判定する。
図11において、リクエスト送信予定テーブル1000は、送信予定日時を返したユーザPC102の端末ID1001と、ユーザPC102に返した次回送信予定日時1002とで構成されている。リクエスト送信予定テーブル(予定日時情報)1000は、コンテンツサイト101内のHDD209に作成され、ユーザPC毎(クライアント毎)の送信予定日時が保存管理されている(第2の保管手段)。
ステップS402の判定の結果、次回リクエスト送信予定日時に、どのユーザPCからも送信予定が登録されていない場合(ステップS402でNO)、ステップS405に進む。ステップS405では、CPU206は、次回リクエスト送信予定日時をリクエスト送信予定テーブル1000に登録してリターンする。
一方、次回リクエスト送信予定日時に既に他のユーザPC(例えば、ユーザPC103等)からのリクエスト送信予定が登録されていた場合(ステップS402でYES)、ステップS403へ進む。ステップS403では、CPU206は、次回リクエスト送信予定日時を一定時間シフトして、ステップS402に戻り、ずらした次回リクエスト送信予定日時に送信予定が登録されていないかを判定する。
次回リクエスト送信予定日時を一定時間シフトする場合は以下のように処理する。例えば、コンテンツサイト101で図11に示すリクエスト送信予定テーブル1000が運用されていたときは、送信予定日時の時刻が5分刻みで変動していることから、次回リクエスト送信予定日時の時刻を5分間遅らせる。
なお、コンテンツサイト101にアクセスするユーザPCの端末数が多くなれば、次回リクエスト送信予定時刻のシフト時間を短くしてもよい。
また、本実施形態では、同一時刻にリクエストを受け付けられるユーザPCの端末数を1台としているが、これに限定されない。同一時刻にリクエストを受け付ける端末数は、コンテンツサイト101の処理能力次第で変わるものであり、例えば、同一時刻に複数台の異なる端末からリクエストを受け付けることも可能である。この場合、ステップS402では、リクエスト送信予定日時に送信する端末の有無で判断をするのではなく、リクエスト送信予定日時に送信する端末が処理上限に達しているかどうかで判断することは言うまでもない。
図5は、図4のステップS401における週次調整処理の詳細を示すフローチャートである。
ステップS501にて、CPU206は、図3のステップS304で算出した次回リクエスト送信予定日時から曜日を取得する。なお、この曜日の取得方法は、次回リクエスト送信予定日時に基づいて不図示のカレンダー機能により取得してもよいし、インターネット上から取得してもよい。
ステップS502では、CPU206はユーザPC102から受信したリクエスト送信履歴テーブル600からステップS501で取得した次回リクエスト送信予定日の曜日と同じ曜日が送信予定に指定されている最後(最新)の送信履歴(送信日時)を取得する。なお、不図示であるが、該当する送信履歴が取得できなかった場合、以降の処理を行わずにリターンする。図示例では、リクエスト送信履歴テーブル600に曜日に関する情報が登録されていないが、曜日情報を登録するように構成してもよいし、曜日情報を求めるように構成してもよい。
ステップS503にて、CPU206は、ステップS502で取得した送信履歴に対応する実際のリクエスト送信日時をリクエスト送信履歴テーブル600から取得する。このリクエスト送信履歴テーブル600は図3のステップS302にてユーザPC102からコンテンツサイト101に送付されたものであり、コンテンツサイト102上のHDD209に保存してもよいし、RAM208上に保管してもよい。
ステップS504にて、CPU206は、ステップS502で取得した送信履歴のリクエスト送信予定日時(S1)とステップS503で取得した実際のリクエスト送信日時(E1)とを比較し、送信予定日と同じ日にリクエストを送信しているかを判定する。送信予定日と同一の日にリクエストを送信していると判定したときは(ステップS504でYES)、以降の処理を行わずにリターンする。
一方、ステップS504でリクエストを送信予定日と同じ日に送信していないと判定した場合、CPU206は、リクエスト送信履歴テーブル600から、同じ曜日が送信予定日に指定されているもう一つ前の送信履歴を取得する(ステップS505)。なお、不図示であるが、該当する送信履歴が取得できなかった場合、以降の処理を行わずにリターンする。
ステップS506にて、CPU206は、ステップS505で取得したリクエスト送信履歴に対応する実際のリクエスト送信日時をリクエスト送信履歴テーブル600から取得する。
次に、ステップS507にて、CPU206は、ステップS505で取得した送信履歴のリクエスト送信予定日時(S2)とステップS506で取得した実際のリクエスト送信日時(E2)とを比較する。そして、送信予定日と同じ日にリクエストを送信しているかを判定する。送信予定日と同一の日にリクエストを送信していると判定したときは(ステップS507でYES)、以降の処理を行わずにリターンする。
一方、ステップS507でリクエストを送信予定日と同じ日に送信していないと判定した場合、CPU206は、図3のステップS304で算出した次回リクエスト送信予定日時を一定時間シフトして(ステップS508)、リターンする。例えば、ステップS502からステップS506で求めた2回の送信予定日時S1,S2と実際の送信日時E1,E2を利用し、時間差E1−S1と時間差E2−S2の小さいほうをシフト時間に決定して、次回リクエスト送信予定日時をシフト時間分ずらす。
図3のステップS306にて、コンテンツサイト101がユーザPC102に次回リクエスト送信予定日時を返すときは、週次調整による時間シフトを行ったことを示す調整IDに1をセットして同時に返すものとする。これは、ユーザPC102が次回リクエスト送信時にコンテンツサイト101が調整ID=1の送信履歴を含むリクエスト送信履歴テーブル600を受信した場合、送信履歴と実際のリクエスト送信日時とを比較する。そして、比較の結果、時刻が異なるときには、例えば一定時間リクエスト送信予定日時を遅らせる等の時間調整に利用できるためである。
図6(a)において、最後(最新)のリクエスト送信履歴が2008/6/13_9:00に送信されていることが判る(送信ID11)。これは、コンテンツサイト101が毎日コンテンツの更新を行っていることから、送信予定日時が翌日の9:00に返されているためである(送信ID8〜11)。
送信ID7では、送信予定日時として登録された2008/6/7にはリクエストが送信されず、実際の送信日時は2008/6/9である。また、その1週間前の送信ID2では、5/31(土曜日)と6/1(日曜日)の2日間のリクエスト送信がなかったことを示す。これらの送信履歴から上述した図5の週次調整処理が行われると、送信ID12に示すように、次回リクエスト送信予定日時が調整される。送信ID12には、送信予定日時を調整したことを示すID=1が登録されている。
上記処理により、例えば毎日曜日が休業でユーザPCが起動していない環境からのポーリングリクエストが翌月曜日にずれ込んで送られることを事前に想定し、月曜日のリクエスト受信量を事前に調整することで、負荷集中を避けることができる。
上記第1の実施形態によれば、クライアントからの送信履歴を考慮して次回問い合わせ予定日時を調整することにより、複数のクライアントからサーバへの問い合わせによるネットワーク負荷やサーバへのアクセス集中を回避して効率的な通信を行うことができる。
なお、本実施形態では、1週間単位(または日単位)のクライアントの稼働状態を基準に負荷調整を行ったが、例えば一か月単位などの調整を行ってもよい。また、本実施形態では、週次調整を行うために過去2回の送信履歴をもとにユーザPCの稼働状態を判定したが、これに限定されず、過去1回であっても3回以上であってもよい。
[第2の実施形態]
本発明の第2の実施形態は、上記第1の実施形態におけるリクエスト送信予定時間の週次調整に対して、時刻単位のクライアントの稼働状態を基準に負荷調整を行う点で相違する。以下に、上記第1の実施形態と異なる点のみを説明する。
図7は、本発明の第2の実施形態におけるリクエスト送信予定日時調整処理を示すフローチャートである。本処理は、図3のステップS305にて実行される処理である。
ステップS701にて、コンテンツサイト101内のCPU206は日次調整処理を行う。この日次調整処理の詳細については図8を用いて詳述する。
次に、ステップS702にて、CPU206は、ユーザPC102から受信したリクエスト送信履歴テーブル600を参照して、リクエスト送信時刻(送信履歴)に一貫性があるかどうかを判定する。一貫性の有無の判定については後述する。なお、本実施形態では、リクエストの送信に要する時間で年月日時分秒が指定されている時間のことを送信日時、送信日時のうち年月日を除いた1日の中での時間帯を示す時間のことを送信時刻と呼ぶことにする。
ステップS702の判定の結果、送信履歴に一貫性がないと判定した場合、CPU206は、ステップS701で調整した次回リクエスト送信予定日時をリクエスト送信予定テーブル1000に登録せずに処理を終了する。これは、コンテンツサイト101内のCPU206が、ユーザPC102から受信したリクエスト送信履歴テーブル600に基づいて、当該ユーザPC102がランダムな時間に起動したり終了したりする稼働状態であると判断するためである。また、CPU206は、次回リクエスト送信予定日時をリクエスト送信予定テーブル1000に登録しても、その時間帯にユーザPC102が稼働中でないおそれがあり、予定通りにユーザPC102からリクエストが送信されないと判断するためである。
ステップS702の判定の結果、送信履歴に一貫性があると判定した場合はステップS703へ進む。ステップS703では、CPU206は、リクエスト送信予定テーブル1000を参照し、次回リクエスト送信予定日時に既に送信予定が登録されているか否かを判定する。
ステップS703の判定の結果、次回リクエスト送信予定日時に、どのユーザPCからも送信予定が登録されていない場合(ステップS703でNO)、ステップS705へ進む。ステップS705では、CPU206は、次回リクエスト送信予定日時をリクエスト送信予定テーブル1000に登録してリターンする。
一方、次回リクエスト送信予定日時に既に他のユーザPC(例えば、ユーザPC103)からのリクエスト送信予定が登録されていた場合(ステップS703でYES)、ステップS704へ進む。ステップS704では、CPU206は、次回リクエスト送信予定日時を一定時間シフトして、ステップS703に戻り、ずらした次回リクエスト送信予定日時に送信予定が登録されていないかを判定する。
次回リクエスト送信予定日時を一定時間シフトする場合、以下のように処理する。例えば、コンテンツサイト101で図11に示すリクエスト送信予定テーブル1000が運用されていたときは、送信予定日時の時刻が5分刻みで変動していることから、次回リクエスト送信予定日時の時刻を5分間遅らせる。
なお、コンテンツサイト101にアクセスするアクセスするユーザPCの端末数が多くなれば、次回リクエスト送信予定時刻のシフト時間を短くしてもよい。
また、本実施形態では、同一時刻にリクエストを受け付けられるユーザPCの端末数を1台としているが、これに限定されない。同一時刻にリクエストを受け付ける端末数は、コンテンツサイト101の処理能力次第で変わるものであり、例えば、同一時刻に複数台の異なる端末からリクエストを受け付けることも可能である。この場合、ステップS703では、リクエスト送信予定日時に送信する端末の有無で判断をするのではなく、リクエスト送信予定日時に送信する端末が処理上限に達しているかどうかで判断することは言うまでもない。
図8は、図6のステップS701における日次調整処理の詳細を示すフローチャートである。
ステップS801にて、CPU206は、図3のステップS304で算出した次回リクエスト送信予定日時から次回リクエスト送信予定時刻を取得する。ステップS802にて、CPU206は、ユーザPC102から受信したリクエスト送信履歴テーブル600から、ステップS801で取得した次回リクエスト送信予定時刻と同じ時刻(日が異なって時、分が同じ)の最後(最新)の送信履歴を取得する。なお、不図示であるが、該当する送信履歴が取得できなかった場合、以降の処理を行わずにリターンする。
ステップS803にて、CPU206は、ステップS802で取得した送信履歴に対応する実際のリクエスト送信日時および送信時刻をリクエスト送信履歴テーブル600から取得する。
ステップS804にて、CPU206は、ステップS802で取得した送信履歴のリクエスト送信予定時刻(ST1)とステップS803で取得した実際のリクエスト送信時刻(ET1)を比較する。そして、送信予定時刻と同一の時刻にリクエストを送信しているかを判定する。送信予定時刻と同一の時刻にリクエストを送信していると判定したときは(ステップS804でYES)、以降の処理を行わずにリターンする。
一方、ステップS804でリクエストを送信予定時刻と同一の時刻に送信していないと判定した場合、CPU206は、リクエスト送信履歴テーブル600から、同じ時刻が送信予定時刻に指定されているもう一つ前の送信履歴を取得する(ステップS805)。なお、不図示であるが、該当する送信履歴が取得できなかった場合、以降の処理を行わずにリターンする。
ステップS806にて、CPU206は、ステップS805で取得したリクエスト送信履歴に対応する実際のリクエスト送信時刻をリクエスト送信履歴テーブル600から取得する。
次に、ステップS807にて、CPU206は、ステップS805で取得した送信履歴のリクエスト送信予定時刻(ST2)とステップS806で取得した実際のリクエスト送信時刻(ET2)とを比較する。そして、送信予定時刻と同一の時刻にリクエストを送信しているかを判定する。送信予定時刻と同一の時刻にリクエストを送信していると判定したときは(ステップS807でYES)、以降の処理を行わずにリターンする。
一方、ステップS807でリクエストを予定時刻と同じ時刻に送信していないと判定した場合、CPU206は、次回リクエスト送信予定日時の時刻をシフトするための次回リクエスト送信予定時刻調整処理を行う(ステップS808)。この次回リクエスト送信予定時刻調整処理の詳細については図9を用いて詳述する。
なお、図8におけるステップS804,S807でリクエスト送信予定時刻と実際のリクエスト送信時刻とが同じかどうかの判断を行ったが、時刻がまったく一致している場合に限らない。例えば、両時刻の差が一定時間以内(例えば2分以内等)であれば、同じであると判断しても構わない。
図9は、図8のステップS808における次回リクエスト送信予定時刻調整処理の詳細を示すフローチャートである。
ステップS901にて、CPU206は、図8のステップS802で取得した送信予定時刻ST1から新たな送信予定時刻ST3を算出する。この送信予定時刻ST3は、例えば、上述した送信予定時刻ST1の15分前とする。なお、送信予定時刻ST3には、送信予定時刻ST1の近傍で当該送信予定時刻ST1とは異なる時刻を設定できれば、どのような方法で算出しても構わない。そのため、送信予定時刻ST3は、ステップS802,S803で取得した送信予定時刻ST1と実際の送信時刻ET1及びステップS805、S806で求めた送信予定時刻ST2と実際の送信時刻ET2から算出するようにしてもよい。
具体的には、例えば、送信予定時刻ST1より時刻ST1とET1の差分の2分の1の時間だけ後ろにずらした時刻を設定してもよい。逆に、送信予定時刻ST2より時刻ST2とET2の差分の2分の1の時間だけ前にずらした時刻を設定してもよい。また、ET1,ET2それぞれより前の時刻であれば、一定時間(例えば、10分等)だけST1をずらしても構わない。ステップS901は第2の算出手段の一例である。
ステップS902にて、CPU206は、リクエスト送信履歴テーブル600から、リクエスト送信予定日時ST1以降に送信予定時刻がST3に調整されている送信履歴を検索する。ステップS903にて、CPU206は、ステップS902の条件に合う送信履歴があったかどうかを判定し、履歴がなかった場合には(ステップS903でNO)、送信予定時刻をST3としてリターンする。
一方、ステップS903の判定の結果、ST3を送信予定時刻とした送信履歴が存在した場合(ステップS903でYES)、CPU206は、その送信履歴の実際のリクエスト送信時刻ET3を取得する(ステップS904)。
ステップS905にて、CPU206は、送信予定時刻ST3と実際の送信時刻ET3とを比較し、送信予定時刻ST3と同一の時刻にリクエストが送信されていた場合には、送信予定時刻をST3として、リターンする。
一方、送信予定時刻ST3と同一の時刻にリクエストが送信されていなかった場合、CPU206は、実際のリクエスト送信時刻ET1、ET2、ET3に一貫性があるかどうかを判定する(ステップS906)。ここでは、それぞれの送信時刻に1時間以上の差があれば一貫性はないと判断する。なお、一貫性の判断時間は、予め規定されている時間であれば何でもよく、1時間に固定されるものでないことは言うまでもない。
ステップS906の判定の結果、リクエスト送信時刻ET1、ET2、ET3に一貫性がないと判断した場合、CPU206は、時間調整処理をリセットし、ステップS304で算出した次回リクエスト送信予定日時を予定日時とする(ステップS907)。この場合、図7で説明したとおり、ユーザPC102がランダムな時間にリクエストを送信してくるものと判断して、CPU206は、リクエスト送信予定テーブル1000には次回送信予定日時を登録しない。
一方、ステップS906の判定の結果、リクエスト送信時刻ET1,ET2,ET3に一貫性があると判断した場合、CPU206は、ステップS908にて、リクエスト送信時刻ET3に送信予定時刻ST3の効果があったかどうかを判定する。送信予定時刻ST3の効果がなかった場合(S908でNO)、つまりST3として、ST1,ST2より前の時刻にリクエスト送信予定時刻を設定したにも関わらず、ET3がET1,ET2と大差ない時刻であった場合、ユーザPC102は以下を実行する。すなわち、ユーザPC102は、ET1,ET2,ET3の時刻前後まで停止しているとみなす。そして、ステップS909にて、次回リクエスト送信予定時刻ST4としてET1,ET2,ET3の中間時刻をもった次回送信予定日時をリクエスト送信予定テーブル1000に登録する。
一方、ステップS908の判定の結果、送信予定時刻ST3の効果があった場合(ステップS908でYES)、つまりST1,ST2からST3に時間をずらしただけET1,ET2からET3に時間がずれた場合、以下となる。すなわち、ユーザPC102は何らかの理由で負荷の大きな処理をしているため、予定時刻通りにリクエストが出せないと判断することができる。この場合、ステップS910にて次回リクエスト送信予定時刻をS1,S3の近傍から大幅にずらした時間(例えば、1時間後)に再調整する。
図6(b)は、図9のステップS907で調整をリセットした場合のリクエスト送信履歴テーブルの一例を示す図である。
図6(b)において、リクエスト送信履歴テーブル700は、リクエスト送信履歴テーブル600と同様に、送信ID601と、次回リクエスト送信予定日時602と、調整ID603と、実際の送信日時604とで構成される。
図示例では、送信ID2のリクエスト送信予定日時が2008/6/2_8:20になっているが、実際の送信日時は2008/6/2_8:33である。翌日の6/3も同じ時刻がリクエスト送信予定時刻になっているが、実際の送信日時は2008/6/3_10:16である(送信ID3)。そこで、ステップS901における時刻調整がなされた送信ID4のリクエスト送信予定日時は2008/6/4_8:05となっている。
しかし、実際の送信日時は2008/6/4_14:10となっていて、3回のリクエスト送信時刻に一貫性がないと判断され、次のリクエスト送信予定時刻は2008/6/5_8:20(送信ID5)と調整前の時刻に戻っている。この場合、調整IDには、調整リセットを示す調整ID=99がセットされている。
図6(c)は、図9のステップS909で送信予定日時の調整をした場合のリクエスト送信履歴テーブルの一例を示す図である。
図6(c)において、リクエスト送信履歴テーブル800は、リクエスト送信履歴テーブル600と同様に、送信ID601と、次回リクエスト送信予定日時602と、調整ID603と、実際の送信日時604とで構成される。
図示例では、送信ID2のリクエスト送信予定日時が2008/6/2_9:20になっているが、実際の送信日時は2008/6/2_9:33である。翌日の6/3も同じ時刻がリクエスト送信予定時刻になっているが、実際の送信日時は2008/6/3_9:32である(送信ID3)。そこで、ステップS901における時刻調整がなされた送信ID4のリクエスト送信予定日時は2008/6/4_9:05となっている。
しかし、実際の送信日時は2008/6/4_9:34となっていて、リクエスト送信予定時刻を調整したにも関わらず、実際のリクエスト送信時刻にはその影響が出ていない。この場合、毎日9:30頃にユーザPC102が起動すると想定して過去3回の送信履歴から2008/6/5_9:33が次回リクエスト送信予定日時になり、5分単位で丸められた時刻9:35がセットされている。なお、送信ID4には、時刻調整を行ったことを示す調整ID=2がセットされている。
図10(a)は、図9のステップS910で送信予定日時の再調整した場合のリクエスト送信履歴テーブルの一例を示す図である。
図10(a)において、リクエスト送信履歴テーブル900は、リクエスト送信履歴テーブル600と同様に、送信ID601と、次回リクエスト送信予定日時602と、調整ID603と、実際の送信日時604とで構成される。
図示例では、送信ID2のリクエスト送信予定日時が2008/6/2_8:30になっているが、実際の送信日時は2008/6/2_8:38である。翌日の6/3も同じ時刻がリクエスト送信予定時刻になっているが、実際の送信日時は2008/6/3_8:39である(送信ID3)。そこで、ステップS901における時刻調整がなされた送信ID4のリクエスト送信予定日時は2008/6/4_8:15となっている。
しかしながら、送信ID4の実際の送信日時は2008/6/4_8:23となっていて、リクエスト送信予定時刻を調整した時間だけ実際のリクエスト送信時刻が早くなっている。この場合、毎日同時間帯にはユーザPC102が何らかの重い処理を実行していて、リクエストが送信できない状態にあると判断し、送信ID5に示すように次回リクエスト送信日時を1時間繰り下げている。送信ID5の調整IDには、時刻再調整を行ったことを示す調整ID=3がセットされている。
上記処理により、例えば、毎日同じ時間に起動するユーザPCに対して、そのユーザPCが起動する時刻よりも前に次回リクエスト送信予定時刻がセットされてしまうという問題を回避することができる。
また、リクエスト送信予定時刻にリクエストを送信してこないユーザPCの次回リクエスト送信予定日時を調整し、予定外の時間にリクエストを送信するユーザPCを極力減らすことでリクエスト負荷の均質化を図ることができる。
なお、本実施形態では、日次調整処理を行うために過去2回の送信履歴をもとにユーザPCの稼働状態を判定したが、これに限定されず、過去1回であっても3回以上であってもよい。
[第3の実施形態]
本発明の第3の実施形態は、上記第2の実施形態に対して、リクエスト送信予定時間の日次調整を別の方法で実行する点において相違する。以下に、上記第2の実施形態と異なる点のみを説明する。
図9のステップ910では、例えば、ユーザPC102が何らかの処理を実行することによってリクエスト送信時刻が常に予定時刻より一定時間遅れている場合について、CPU206が次回リクエスト送信予定日時の再調整を行っている。しかし、このような場合、コンテンツサイト101への負荷を分散させるには別の方法があるので、その内容を説明する。
ステップS910においてET3がST3の影響を受けている場合、ステップS907と同様に調整をリセットしても構わない。この場合、引き続き行われるステップS703〜S705にて、ステップS304で算出した送信予定日時にET3とST3の時差を考慮した送信予定日時をリクエスト送信予定テーブル1000に登録する。または、ステップS304で算出した送信予定日時にユーザPC102から送られてくる時間の差分を考慮した送信予定日時をリクエスト送信予定テーブル1000に登録する。
図10(b)は、本発明の第3の実施形態におけるリクエスト送信履歴テーブルの一例を示す図である。
図10(b)において、リクエスト送信履歴テーブル1100は、リクエスト送信履歴テーブル600と同様に、送信ID601と、次回リクエスト送信予定日時602と、調整ID603と、実際の送信日時604とで構成される。リクエスト送信履歴テーブル1100は、ステップS910で送信予定日時の再調整をリセットした場合のリクエスト送信履歴情報である。
図示例では、送信ID2のリクエスト送信予定日時が2008/6/2_8:30になっているが、実際の送信日時は2008/6/2_8:38である。翌日の6/3も同じ時刻が送信予定時刻になっているが、実際の送信日時は2008/6/3_8:39である(送信ID3)。そこで、ステップS901における時刻調整がなされた送信ID4のリクエスト送信予定日時は2008/6/4_8:15となっている。
しかしながら、送信ID4の実際の送信日時は2008/6/4_8:23となっていて、リクエスト送信予定時刻を調整した時間だけ実際のリクエスト送信時刻が早くなっている。この場合、毎日同時間帯にはユーザPC102が何らかの重い処理を実行していて、リクエストが送信できない状態にあると判断し、送信ID5に示すように次回リクエスト送信日時が8:30にリセットされている。送信ID5の調整IDには、時刻再調整を行ったことを示す調整ID=4がセットされている。このとき、コンテンツサイト101に保管されるリクエスト送信予定テーブル1000には、2008/6/5_8:30が登録されるのではない。すなわち、リクエスト送信履歴テーブル1100にある誤差8分を5分単位で丸めた時差10分を考慮した2008/6/5_8:40が登録されることになる。
[第4の実施形態]
上記第1〜第3の実施形態では、リクエスト送信履歴テーブルがユーザPC102側で保存管理される構成について説明したが、本発明の第4の実施形態として、コンテンツサイト101側でユーザPC毎に保存管理される構成であってもよい。この場合、不図示であるが、リクエスト送信履歴テーブルには、送信ID601、次回リクエスト送信予定日時602、調整ID603、実際の送信日時604に加えて、各ユーザPCの一意に特定するための端末IDが登録管理される。
また、第4の実施形態では、図3のステップS302でユーザPC102がポーリングリクエストを送信するときに、コンテンツサイト101に対してリクエストの送信日時を送付する必要がある。そして、コンテンツサイト101は、ステップS303にてポーリングリクエストと共にリクエストの送信日時を受信する。この場合、上記第1の実施で送信されたリクエスト送信履歴テーブル600は、コンテンツサイト101で保管されているリクエスト送信履歴テーブル600からユーザPC102の端末IDを用いて検索することができることは言うまでもない。
本発明の実施形態は、ネットワーク又は各種記憶媒体を介して取得したソフトウェア(プログラム)をパーソナルコンピュータ(CPU,プロセッサ)にて実行することでも実現できる。