(57)【特許請求の範囲】
【請求項１】
1つまたは複数のプロセッサと、前記1つまたは複数のプロセッサによって実行されるプログラムを記憶するメモリとを有するコンピュータで、
ネットワークアプリケーションに関連するユーザ入力イベントを受信するステップであって、各ユーザ入力イベントが前記ネットワークアプリケーションの個々の画像フレームに対応し、前記ユーザ入力イベントがリモートソースからの少なくとも1つのリモートユーザ入力イベントを含む、ステップと、
前記ユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新するステップと、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の画像フレームへの同期データを生成し、更新するステップと、
前記応答データを前記同期データと入れ替えるステップと、
を含み、
前記ユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の前記画像フレームへの応答データを生成し、更新するステップが、さらに、
第1のフレームレートで、前記ユーザ入力イベントに関連する前記個々の画像フレームに対応する前記応答データを更新するステップと、
前記応答データを使用して、前記ネットワークアプリケーションの前記現在の画像フレームを描画するステップと、
を含み、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の画像フレームへの同期データを生成し、更新するステップが、さらに、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームのための最初の同期データを生成するステップと、
前記同期データへの更新の数が前記応答データへの更新の数と同じになるまで、前記最初の同期データへのフレームごとの更新を実行するステップと、
を含む、データ同期のためのコンピュータ実施方法。
【請求項２】
前記同期データへの更新の数が前記応答データへの更新の数と同じになるまで、前記最初の同期データへの前記フレームごとの更新を実行するステップが、
第2のフレームレートで、前記少なくとも1つのリモートユーザに関連する前記個々の画像フレームに対応する前記同期データを更新するステップと、
前記同期データへの更新の数、および前記応答データへの更新の数を、それぞれ決定するステップと、
前記同期データへの更新の数が前記応答データへの更新の数と同じである場合、前記応答データを前記同期データと入れ替えるステップと、
そうでない場合、前記同期データの更新を繰り返すステップと、
を含む、請求項1に記載の方法。
【請求項３】
前記第2のフレームレートが前記第1のフレームレートよりも大きい、請求項2に記載の方法。
【請求項４】
前記同期データを使用して、前記ネットワークアプリケーションの前記現在の画像フレームを描画するステップをさらに含む、請求項1に記載の方法。
【請求項５】
1つまたは複数のプロセッサと、
メモリと、
前記メモリに記憶され、前記1つまたは複数のプロセッサによる実行のために構成された1つまたは複数のプログラムモジュールと、
を備え、前記1つまたは複数のプログラムモジュールが、
ネットワークアプリケーションに関連するユーザ入力イベントを受信するように構成されたユーザ入力イベント受信モジュールであって、各ユーザ入力イベントが前記ネットワークアプリケーションの個々の画像フレームに対応し、前記ユーザ入力イベントがリモートソースからの少なくとも1つのリモートユーザ入力イベントを含む、ユーザ入力イベント受信モジュールと、
前記ユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新するように構成されたローカル応答データ更新モジュールと、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の画像フレームへの同期データを生成し、更新するように構成されたリモートデータ同期モジュールと、
前記応答データを前記同期データと入れ替えるように構成されたデータ交換モジュールと、
を備え、
前記ローカル応答データ更新モジュールが、さらに、
第1のフレームレートで、前記ユーザ入力イベントに関連する前記個々の画像フレームに対応する前記応答データを更新し、
前記応答データを使用して、前記ネットワークアプリケーションの前記現在の画像フレームを描画するように構成され、
前記リモートデータ同期モジュールが、さらに、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームのための最初の同期データを生成し、
前記同期データへの更新の数が前記応答データへの更新の数と同じになるまで、前記最初の同期データへのフレームごとの更新を実行するように構成された、コンピュータシステム。
【請求項６】
前記同期データへの更新の数が前記応答データへの更新の数と同じになるまで、前記最初の同期データへの前記フレームごとの更新を実行するための命令が、さらに、
第2のフレームレートで、前記少なくとも1つのリモートユーザに関連する前記個々の画像フレームに対応する前記同期データを更新するための命令と、
前記同期データへの更新の数、および前記応答データへの更新の数を、それぞれ決定するための命令と、
前記同期データへの更新の数が前記応答データへの更新の数と同じである場合、前記応答データを前記同期データと入れ替えるための命令と、
そうでない場合、前記同期データの更新を繰り返すための命令と、
を含む、請求項5に記載のコンピュータシステム。
【請求項７】
前記第2のフレームレートが前記第1のフレームレートよりも大きい、請求項6に記載のコンピュータシステム。
【請求項８】
前記データ交換モジュールが、さらに、
前記同期データを使用して、前記ネットワークアプリケーションの前記現在の画像フレームを描画するように構成された、請求項5に記載のコンピュータシステム。
【請求項９】
1つまたは複数の命令が記憶されている非一時的コンピュータ可読記憶媒体であって、前記1つまたは複数の命令が、コンピュータシステムによって実行されると、
ネットワークアプリケーションに関連するユーザ入力イベントを受信することであって、各ユーザ入力イベントが前記ネットワークアプリケーションの個々の画像フレームに対応し、前記ユーザ入力イベントがリモートソースからの少なくとも1つのリモートユーザ入力イベントを含む、受信することと、
前記ユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新することと、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の画像フレームへの同期データを生成し、更新することと、
前記応答データを前記同期データと入れ替えることと、
を、前記コンピュータシステムに行わせ、
前記ユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の前記画像フレームへの応答データを生成し、更新するための前記命令が、さらに、
第1のフレームレートで、前記ユーザ入力イベントに関連する前記個々の画像フレームに対応する前記応答データを更新するための命令と、
前記応答データを使用して、前記ネットワークアプリケーションの前記現在の画像フレームを描画するための命令と、
を含み、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームから前記ネットワークアプリケーションの前記現在の画像フレームへの同期データを生成し、更新するための前記命令が、さらに、
前記少なくとも1つのリモートユーザ入力イベントに関連する前記個々の画像フレームのための最初の同期データを生成するための命令と、
前記同期データへの更新の数が前記応答データへの更新の数と同じになるまで、前記最初の同期データへのフレームごとの更新を実行するための命令と、
を含む、非一時的コンピュータ可読記憶媒体。
【請求項１０】
前記同期データへの更新の数が前記応答データへの更新の数と同じになるまで、前記最初の同期データへの前記フレームごとの更新を実行するための前記命令が、
第2のフレームレートで、前記少なくとも1つのリモートユーザに関連する前記個々の画像フレームに対応する前記同期データを更新するための命令と、
前記同期データへの更新の数、および前記応答データへの更新の数を、それぞれ決定するための命令と、
前記同期データへの更新の数が前記応答データへの更新の数と同じである場合、前記応答データを前記同期データと入れ替えるための命令と、
そうでない場合、前記同期データの更新を繰り返すための命令と、
を含む、請求項9に記載の非一時的コンピュータ可読記憶媒体。
【請求項１１】
前記第2のフレームレートが前記第1のフレームレートよりも大きい、請求項10に記載の非一時的コンピュータ可読記憶媒体。
【請求項１２】
1つまたは複数の命令が、前記同期データを使用して、前記ネットワークアプリケーションの前記現在の画像フレームを描画するための命令をさらに含む、請求項9に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、インターネット技術に関し、詳細には、データ同期のためのネットワークアプリケーションの方法および装置に関する。
【０００２】
本出願は、参照によりその全体が本明細書に組み込まれている、2012年8月21に出願した、中国特許出願第201210297918.8号、「Systems and Methods for Data Synchronization in a Network Application」の優先権を主張するものである。
【背景技術】
【０００３】
インターネットの発展に伴い、ネットワークアプリケーションも、インターネット上で急増しており、ユーザは、異なるネットワーク上で実行されている様々なネットワークアプリケーションを介してデータ交換を達成することができる。具体的には、同じネットワークアプリケーションを実行している複数のユーザの間で、各ユーザは、様々な動作命令をトリガするために、ネットワークアプリケーションによって提供されるネットワークインターフェースを使用することができる。ネットワークアプリケーションサーバは、受信した動作命令を処理し、適切なデータを生成することになる。次いで、生成された動作データに基づいて、ネットワークアプリケーションサーバは、ユーザがトリガした動作を、フィードバックとして、アプリケーションの異なるユーザインターフェースに返す。例えば、ネットワークアプリケーションがゲームアプリケーションである場合、2人のユーザは、ゲームアプリケーションをプレイし、インターネットを使用して情報を交換する。一方のユーザが、任意のアプリケーションインターフェースを介してゲームアプリケーション内のキャラクタの移動をトリガすると、ゲームキャラクタは、それに応じて移動することになる。ゲームアプリケーションサーバは、次いで、キャラクタ移動コマンドを、別のユーザによって使用される他のネットワークアプリケーションに転送することになり、それによって、ユーザインターフェース上の対応するキャラクタの移動を可能にする。しかしながら、異なるネットワークアプリケーションは、異なるネットワーク環境を有するので、ネットワークアプリケーションのネットワーク環境がよくない場合、または、ネットワーク環境の変動が大きい場合、それらは、異なるネットワークアプリケーションの適切なデータ同期を妨げる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００４】
ネットワーク環境の変動に関連する上記の不具合および他の問題は、以下に開示する本発明によって低減または排除される。いくつかの実施形態では、本発明は、1つまたは複数のプロセッサと、メモリと、複数の機能を実行するためのメモリに記憶された1つまたは複数のモジュール、プログラム、または命令のセットとを有するコンピュータシステムで実施される。これらの機能を実行するための命令は、1つまたは複数のプロセッサによる実行のために構成されたコンピュータプログラム製品に含まれ得る。
【０００５】
本発明の一態様は、コンピュータシステムによって実行されるコンピュータ実施方法を含む。コンピュータシステムは、ネットワークアプリケーションに関連するユーザ入力イベントを受信する。各ユーザ入力イベントは、ネットワークアプリケーションの個々の画像フレームに対応し、ユーザ入力イベントは、リモートソースからの少なくとも1つのリモートユーザ入力イベントを含む。コンピュータは、ユーザ入力イベントに関連する個々の画像フレームからネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新する。いくつかの実施形態では、ユーザ入力イベントは、すべてコンピュータのローカルユーザからである。コンピュータは、また、少なくとも1つのリモートユーザ入力イベントに関連する個々の画像フレームからネットワークアプリケーションの現在の画像フレームへの同期データを生成し、更新する。最後に、コンピュータは、応答データを同期データと入れ替える。
【０００６】
本発明の別の態様は、コンピュータシステムを含む。コンピュータシステムは、1つまたは複数のプロセッサと、メモリと、メモリに記憶され、1つまたは複数のプロセッサによる実行のために構成された1つまたは複数のプログラムモジュールとを含む。1つまたは複数のプログラムモジュールは、ネットワークアプリケーションに関連するユーザ入力イベントを受信するように構成されたユーザ入力イベント受信モジュールであって、各ユーザ入力イベントがネットワークアプリケーションの個々の画像フレームに対応し、ユーザ入力イベントがリモートソースからの少なくとも1つのリモートユーザ入力イベントを含む、ユーザ入力イベント受信モジュールと、ユーザ入力イベントに関連する個々の画像フレームからネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新するように構成されたローカル応答データ更新モジュールと、少なくとも1つのリモートユーザ入力イベントに関連する個々の画像フレームからネットワークアプリケーションの現在の画像フレームへの同期データを生成し、更新するように構成されたリモートデータ同期モジュールと、応答データを同期データと入れ替えるように構成されたデータ交換モジュールとを含む。
【０００７】
本発明の別の態様は、1つまたは複数の命令が記憶されている非一時的コンピュータ可読記憶媒体を含み、1つまたは複数の命令は、コンピュータシステムによって実行されると、ネットワークアプリケーションに関連するユーザ入力イベントを受信することであって、各ユーザ入力イベントがネットワークアプリケーションの個々の画像フレームに対応し、ユーザ入力イベントがリモートソースからの少なくとも1つのリモートユーザ入力イベントを含む、受信することと、ユーザ入力イベントに関連する個々の画像フレームからネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新することと、少なくとも1つのリモートユーザ入力イベントに関連する個々の画像フレームからネットワークアプリケーションの現在の画像フレームへの同期データを生成し、更新することと、応答データを同期データと入れ替えることとを、コンピュータシステムに行わせる。
【０００８】
いくつかの実施形態は、クライアント-サーバネットワーク環境のクライアント側またはサーバ側のどちらでも実施され得る。
【０００９】
本発明の上記の特徴および利点、ならびに、その追加の特徴および利点は、図面と併せて好ましい実施形態の詳細な説明の結果として、以下でより明確に理解されるであろう。
【図面の簡単な説明】
【００１０】
【図１】いくつかの実施形態による、ネットワークアプリケーションが異なるタイプのユーザ入力イベントを処理する方法を説明するフローチャートである。
【図２】いくつかの実施形態による、ネットワークアプリケーションがリモートコンピュータからのリモートユーザ入力イベントを処理する方法を説明するフローチャートである。
【図３】いくつかの実施形態による、ネットワークアプリケーションが応答データに基づいて同期データを更新する方法を説明するフローチャートである。
【図４】いくつかの実施形態による、異なるタイプのユーザ入力イベントを処理するためのネットワークアプリケーション内のモジュールを説明するブロック図である。
【図５】いくつかの実施形態による、ネットワークアプリケーション内のリモートデータ同期モジュールを説明するブロック図である。
【図６】いくつかの実施形態による、ネットワークアプリケーション内のデータ処理モジュールを説明するブロック図である。
【図７】いくつかの実施形態による、ネットワークアプリケーションの2人のユーザに関連するコンピュータがユーザ入力イベントを互いに同期する方法を説明するブロック図である。
【図８】いくつかの実施形態によるネットワーク環境のブロック図である。
【図９】いくつかの実施形態による例示的なクライアントコンピュータのブロック図である。
【図１０】いくつかの実施形態によるサーバのブロック図である。
【発明を実施するための形態】
【００１１】
同様の参照番号は、図面のいくつかの図を通して対応する部分を指す。
【００１２】
ここで、その例が添付図面に示されている実施形態を詳細に参照する。以下の詳細な説明では、本明細書に提示される主題の完全な理解を提供するために、多数の特定の詳細が述べられる。しかし、主題は、これらの特定の詳細なしに実施され得ることが、当業者には明らかであろう。他の例では、周知の方法、手順、構成要素、および回路は、実施形態の態様を不必要に曖昧にしないようにするために、詳細には説明されない。
【００１３】
図8は、いくつかの実施形態によるネットワーク環境のブロック図である。ネットワーク環境800は、1つまたは複数のクライアントコンピュータ(830-1、830-3)と、1つまたは複数のサーバ810とを含む。クライアントコンピュータは、ネットワーク820(例えば、インターネット)を介してサーバに接続される。一方、異なるクライアントコンピュータは、ネットワーク820を介して互いに通信することもできる。例えば、以下に説明するように、クライアントコンピュータ830-1で生成されたユーザ入力イベントは、サーバ810および/またはクライアントコンピュータ830-3に送信され得る。ネットワーク810を介して、ネットワーク環境800内の異なるエンティティは、情報を交換することができる。いくつかの実施形態では、ネットワーク環境800は、オンラインゲームアプリケーションをサポートする。異なるユーザは、異なるクライアントコンピュータからオンラインゲームアプリケーションに参加する。サーバ810は、限定はしないが、ユーザ識別子、パスワード、ユーザ口座残高、現在のユーザステータス(例えば、ユーザによる最後の入力)、などを含む、ユーザの情報を記憶するためのユーザ情報データベース812を含む。
【００１４】
図1は、いくつかの実施形態による、ネットワークアプリケーションが異なるタイプのユーザ入力イベントを処理する方法を説明するフローチャートである。例示の目的のため、ネットワークアプリケーションは、図8に示すクライアントコンピュータで実行されているオンラインゲームアプリケーションである。ステップS10では、コンピュータは、ネットワークアプリケーションに関連するユーザ入力イベントを受信する。ユーザ入力イベントは、コンピュータからのローカルユーザ入力イベント、ならびに、リモートコンピュータからのリモートユーザ入力イベントの両方を含む。ローカルユーザ入力イベントは、コンピュータのユーザによって生成され、または、ユーザの行動によってトリガされる。例えば、ユーザがマウスを移動するか、キー入力を行ったとき、ローカルユーザ入力イベントは、それに応じて生成され得る。同様に、現在同じネットワークアプリケーションを実行している第2のクライアントコンピュータでの第2のユーザによるマウスの移動は、最初に、第2のクライアントコンピュータでローカルユーザ入力イベントを生成し、ローカルユーザ入力イベントは、次いで、ネットワーク810を介してクライアントコンピュータに送信され、これは、リモートユーザ入力イベントであるとみなされ得る。そのようなユーザ入力イベントは、ネットワークアプリケーションのグラフィカルユーザインターフェース上のオブジェクトの移動を引き起こすことができる。理想的には、異なるコンピュータにおける異なるグラフィカルユーザインターフェース上の同じオブジェクトの移動は、ほぼ同時に起こるべきである。しかし、現実には、潜在的なネットワーク輻輳に起因して、同じユーザ入力イベントが異なるクライアントコンピュータに到達するために、異なる時間がかかる可能性があり、これは、ユーザ体験の低下をもたらす可能性がある。したがって、本発明の1つの機能は、異なるグラフィカルユーザインターフェース上の異なるユーザによって制御されるオブジェクトの移動の間の同期を改善することである。いくつかの実施形態では、コンピュータによって受信される各ユーザ入力イベントは、イベントがネットワークアプリケーションによって取り込まれたときを示すネットワークアプリケーションの個々の画像フレームに対応し、ユーザ入力イベントは、リモートソースからの少なくとも1つのリモートユーザ入力イベントを含む。
【００１５】
ステップS30では、コンピュータは、ユーザ入力イベントに関連する画像フレームからネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新する。いくつかの実施形態では、ローカルユーザ入力イベント(または、ほとんど遅延がない近くのコンピュータからのユーザ入力イベント)の受信に際して、コンピュータは、ユーザ入力イベントに関連する最初の画像フレームを決定し、次いで、最初の画像フレームに関連する応答データを生成する。例えば、応答データは、特定のオブジェクトが異なる画像フレームにわたってグラフィカルユーザインターフェース上で移動する方法についての情報を含むことができる。最初の画像フレームが現在の画像フレームと異なる場合、コンピュータは、次いで、それに応じて応答データを更新する。以下に説明するように、応答データは、グラフィカルユーザインターフェース上に現在の画像フレームを描画するために使用される。いくつかの実施形態では、コンピュータは、第1のフレームレート、例えば、通常、ネットワークアプリケーションのデフォルトのフレームレートである毎秒60フレームで、ユーザ入力イベントに関連する個々の画像フレームに対応する応答データを更新する。グラフィカルユーザインターフェースは、フレームごとに描画されるので、応答データへの更新も、フレーム単位で実行される。応答データへの更新があるたびに、対応する画像フレームは、また、コンピュータがユーザ入力にほとんど瞬間的に応答することができるように、更新された応答データを使用して再描画される。このプロセスは、新しいユーザ入力イベント(例えば、ローカルユーザ入力イベント)があるときはいつでも、ネットワークアプリケーションがユーザの命令と常に同期するように、コンピュータが応答データを更新することになるように、連続的に繰り返し実行される。
【００１６】
上述したように、1つのコンピュータでのローカルユーザ入力イベントは、別のコンピュータでのリモートユーザ入力イベントになり得る。同様に、コンピュータに到達するユーザ入力イベントは、コンピュータでのネットワークアプリケーションのローカルの現在のステータスと同期しない可能性があるリモートユーザ入力イベントを含むこともできる。したがって、ステップS50で、コンピュータは、また、少なくとも1つのリモートユーザ入力イベントに関連する画像フレームからネットワークアプリケーションの現在の画像フレームへの同期データを生成し、更新する。応答データへの更新と同様に、同期データへの更新も、応答データへの更新の数が同期データへの更新の数と同じになるまで、フレーム単位で実行される。いくつかの実施形態では、同期データは、現在の画像フレームを描画するために使用され得ない。代わりに、ステップS70で、コンピュータは、最初に、例えば、応答データを記憶するためのデータ構造に同期データを記憶することによって、現在のグラフィカルユーザインターフェースを描画するためにすでに使用されている応答データを、同期データと入れ替える。いくつかの実施形態では、コンピュータは、次いで、ネットワークアプリケーションのグラフィカルユーザインターフェースを描画するために、同期データを使用する。異なるクライアントコンピュータにおけるユーザが同期した方式で互いに同じゲームをプレイすることができるように、同期データをネットワークアプリケーションに適用することによって、コンピュータで実行されているネットワークアプリケーションのインスタンスは、他のコンピュータで実行されている同じネットワークアプリケーションの他のインスタンスと同期され続ける。
【００１７】
いくつかの実施形態では、応答データは、ネットワーク環境からの影響(例えば、ネットワーク輻輳)を受けないとみなされる。コンピュータに到達するユーザ入力イベントがローカルまたはリモートでのいずれであるかにかかわらず、コンピュータは、応答データを更新することによって、迅速に動作することができ、現在の画像フレームを描画するために、更新された応答データを使用することができる。しかし、大きな遅延があるクライアントコンピュータから来るリモートユーザ入力イベントについて、ソースクライアントコンピュータは、リモートユーザ入力イベントの到着前に、それ自体の応答データをすでに更新している可能性があるので、コンピュータは、リモートユーザ入力イベントに基づいて応答データを更新することができない。代わりに、コンピュータは、リモートユーザ入力イベントに関連する画像フレームとネットワークアプリケーションの現在の画像フレームとの間のギャップを事実上測定するその同期データを更新するために、リモートユーザ入力イベントを使用する。同期データは、次いで、応答データと同じ画像フレームに対応するまで、繰り返し(例えば、フレームごとに)更新される。最後に、異なるユーザが同じネットワークアプリケーションを同期して使用してデータを交換することができるように、コンピュータは、画像フレームを描画するために、更新された同期データを使用する。
【００１８】
図2は、いくつかの実施形態による、ネットワークアプリケーションがリモートコンピュータからのリモートユーザ入力イベントを処理する方法を説明するフローチャートである。ステップS500では、コンピュータは、リモートコンピュータからリモートユーザ入力イベントを受信する。リモートユーザ入力イベントは、コンピュータと同期しないものとし、したがって、直接応答データを更新するために使用され得ないことに留意されたい。これに応じて、ステップS510では、コンピュータは、リモートユーザ入力イベントに関連する個々の画像フレームのための最初の同期データを生成する。例えば、これが、コンピュータがそのリモートコンピュータからリモートユーザ入力イベントを受信した最初のときである場合、コンピュータは、リモートユーザ入力イベントに関連する画像フレームに対応する最初の同期データを生成する必要がある可能性がある。次に、ステップS530では、コンピュータは、同期データへの更新の数が応答データへの更新の数と同じになるまで、最初の同期データへのフレームごとの更新を実行し、次いで、応答データを同期データと入れ替える。
【００１９】
例えば、コンピュータが、リモートユーザ入力イベントを受信し、リモートユーザ入力イベントが、ネットワークアプリケーションのN番目の画像フレームに対応し、応答データが、(N+M)番目の画像フレーム(M≧0)に対応するものとする。すなわち、2つのコンピュータは、現在同期していない。したがって、コンピュータは、2つのコンピュータを再び同期させるために、(N+M)番目の画像フレームへの同期データを迅速に更新する必要がある。
【００２０】
図3は、いくつかの実施形態による、ネットワークアプリケーションが応答データと同期するように同期データを更新する方法を説明するフローチャートである。ステップS531では、コンピュータは、通常、応答データを更新するためにコンピュータによって使用される第1のフレームレートよりも大きい第2のフレームレート(例えば、毎秒90または120フレーム)で、リモートユーザ入力イベントに関連する画像フレームに対応する同期データを更新する。そうでない場合、同期データは、応答データと再び同期することは決してできない。ステップS533では、コンピュータは、同期データへの更新の数、および応答データへの更新の数を決定する。ステップS535では、コンピュータは、同期データへの更新の数が応答データへの更新の数と同じであるかどうかを判断する。そうである(イエスの)場合、ステップS537では、コンピュータは、次いで、応答データを更新された同期データと入れ替える、そうではない(ノーの)場合、コンピュータは、次いで、ステップS531で同期データを更新するために戻る。
【００２１】
上記で説明した手法では、応答データの生成および更新、ならびに同期データの生成および更新は、それらが同じネットワークアプリケーションを使用する異なるコンピュータで異なるユーザによって生成されるので、互いに独立であることに留意されたい。しかしながら、同期データへの更新が定義済みの条件を満たすとき、同期データは、応答データと再び同期され得、したがって、ネットワークアプリケーションのユーザ体験を改善することができる。
【００２２】
図4は、いくつかの実施形態による、異なるタイプのユーザ入力イベントを処理するためのネットワークアプリケーション内のモジュールを説明するブロック図である。具体的には、ユーザ入力イベント受信モジュール10は、ネットワークアプリケーションに関連するユーザ入力イベントを受信するように構成される。ユーザ入力イベントは、コンピュータからのローカルユーザ入力イベント、ならびに、リモートコンピュータからのリモートユーザ入力イベントの両方を含む。ローカルユーザ入力イベントは、コンピュータのユーザによって生成され、または、ユーザの行動によってトリガされる。例えば、ユーザがマウスを移動するか、キー入力を行ったとき、ローカルユーザ入力イベントは、それに応じて生成され得る。同様に、現在同じネットワークアプリケーションを実行している第2のクライアントコンピュータでの第2のユーザによるマウスの移動は、最初に、第2のクライアントコンピュータでローカルユーザ入力イベントを生成し、ローカルユーザ入力イベントは、次いで、ネットワーク810を介してクライアントコンピュータに送信され、これは、リモートユーザ入力イベントであるとみなされ得る。そのようなユーザ入力イベントは、ネットワークアプリケーションのグラフィカルユーザインターフェース上のオブジェクトの移動を引き起こすことができる。理想的には、異なるコンピュータにおける異なるグラフィカルユーザインターフェース上の同じオブジェクトの移動は、ほぼ同時に起こるべきである。しかし、現実には、潜在的なネットワーク輻輳に起因して、同じユーザ入力イベントが異なるクライアントコンピュータに到達するために、異なる時間がかかる可能性があり、これは、ユーザ体験の低下をもたらす可能性がある。したがって、本発明の1つの機能は、異なるグラフィカルユーザインターフェース上の異なるユーザによって制御されるオブジェクトの移動の間の同期を改善することである。いくつかの実施形態では、ユーザ入力イベント受信モジュール10によって受信される各ユーザ入力イベントは、イベントがネットワークアプリケーションによって取り込まれたときを示すネットワークアプリケーションの個々の画像フレームに対応し、ユーザ入力イベントは、リモートソースからの少なくとも1つのリモートユーザ入力イベントを含む。
【００２３】
ローカル応答データ更新モジュール30は、ユーザ入力イベントに関連する画像フレームからネットワークアプリケーションの現在の画像フレームへの応答データを生成し、更新するように構成される。いくつかの実施形態では、ローカルユーザ入力イベント(または、ほとんど遅延がない近くのコンピュータからのユーザ入力イベント)の受信に際して、ローカル応答データ更新モジュール30は、ユーザ入力イベントに関連する最初の画像フレームを決定し、次いで、最初の画像フレームに関連する応答データを生成する。例えば、応答データは、特定のオブジェクトが異なる画像フレームにわたってグラフィカルユーザインターフェース上で移動する方法についての情報を含むことができる。最初の画像フレームが現在の画像フレームと異なる場合、ローカル応答データ更新モジュール30は、次いで、それに応じて応答データを更新する。以下に説明するように、応答データは、グラフィカルユーザインターフェース上に現在の画像フレームを描画するために使用される。いくつかの実施形態では、ローカル応答データ更新モジュール30は、第1のフレームレート、例えば、通常、ネットワークアプリケーションのデフォルトのフレームレートである毎秒60フレームで、ユーザ入力イベントに関連する個々の画像フレームに対応する応答データを更新する。グラフィカルユーザインターフェースは、フレームごとに描画されるので、応答データへの更新も、フレーム単位で実行される。応答データへの更新があるたびに、対応する画像フレームは、また、コンピュータがユーザ入力にほとんど瞬間的に応答することができるように、更新された応答データを使用して再描画される。このプロセスは、新しいユーザ入力イベント(例えば、ローカルユーザ入力イベント)があるときはいつでも、ネットワークアプリケーションがユーザの命令と常に同期するように、コンピュータが応答データを更新することになるように、連続的に繰り返し実行される。
【００２４】
リモートデータ同期モジュール50は、少なくとも1つのリモートユーザ入力イベントに関連する画像フレームからネットワークアプリケーションの現在の画像フレームへの同期データを生成し、更新するように構成される。応答データへの更新と同様に、同期データへの更新も、応答データへの更新の数が同期データへの更新の数と同じになるまで、リモートデータ同期モジュール50によってフレーム単位で実行される。いくつかの実施形態では、同期データは、現在の画像フレームを描画するために使用され得ない。代わりに、リモートデータ同期モジュール50は、データ交換モジュール70に更新同期データを提供し、データ交換モジュール70は、最初に、例えば、応答データを記憶するためのデータ構造に同期データを記憶することによって、応答データを同期データと入れ替えるように構成される。いくつかの実施形態では、画像描画モジュール(図4には示さず)は、ネットワークアプリケーションのグラフィカルユーザインターフェースを描画するために、同期データを使用する。異なるクライアントコンピュータにおけるユーザが同期した方式で互いに同じゲームをプレイすることができるように、同期データをネットワークアプリケーションに適用することによって、コンピュータで実行されているネットワークアプリケーションのインスタンスは、他のコンピュータで実行されている同じネットワークアプリケーションの他のインスタンスと同期し続ける。
【００２５】
いくつかの実施形態では、応答データは、ネットワーク環境からの影響(例えば、ネットワーク輻輳)を受けないとみなされる。コンピュータに到達するユーザ入力イベントがローカルまたはリモートでのいずれであるかにかかわらず、コンピュータは、応答データを更新することによって、迅速に動作することができ、現在の画像フレームを描画するために、更新された応答データを使用することができる。しかし、大きな遅延があるクライアントコンピュータから来るリモートユーザ入力イベントについて、ソースクライアントコンピュータは、リモートユーザ入力イベントの到着前に、それ自体の応答データをすでに更新している可能性があるので、コンピュータは、リモートユーザ入力イベントに基づいて応答データを更新することができない。代わりに、コンピュータは、リモートユーザ入力イベントに関連する画像フレームとネットワークアプリケーションの現在の画像フレームとの間のギャップを事実上測定するその同期データを更新するために、リモートユーザ入力イベントを使用する。同期データは、次いで、応答データと同じ画像フレームに対応するまで、繰り返し(例えば、フレームごとに)更新される。最後に、異なるユーザが同じネットワークアプリケーションを同期して使用してデータを交換することができるように、コンピュータは、画像フレームを描画するために、更新された同期データを使用する。
【００２６】
図5は、いくつかの実施形態による、ネットワークアプリケーション内のリモートデータ同期モジュールを説明するブロック図である。この例では、リモートデータ同期モジュール50は、入力イベント応答モジュール510およびデータ処理モジュール530をさらに含む。例えば、入力イベント応答モジュール510は、リモートコンピュータからリモートユーザ入力イベントを受信し、リモートユーザ入力イベントに関連する個々の画像フレームのための最初の同期データを生成するように構成される。例えば、リモートユーザ入力イベントは、コンピュータと同期していないものとし、したがって、直接応答データを更新するために使用され得ない。これが、コンピュータがそのリモートコンピュータからリモートユーザ入力イベントを受信した最初のときである場合、コンピュータは、リモートユーザ入力イベントに関連する画像フレームに対応する最初の同期データを生成する必要がある可能性がある。データ処理モジュール530は、同期データへの更新の数が応答データへの更新の数と同じになるまで、最初の同期データへのフレームごとの更新を実行し、次いで、応答データを同期データと入れ替えるように構成される。
【００２７】
例えば、コンピュータが、リモートユーザ入力イベントを受信し、リモートユーザ入力イベントが、ネットワークアプリケーションのN番目の画像フレームに対応し、応答データが、(N+M)番目の画像フレーム(M≧0)に対応するものとする。すなわち、2つのコンピュータは、現在同期していない。したがって、コンピュータは、2つのコンピュータを再び同期させるために、(N+M)番目の画像フレームへの同期データを迅速に更新する必要がある。
【００２８】
図6は、いくつかの実施形態による、ネットワークアプリケーション内のデータ処理モジュールを説明するブロック図である。この例では、データ処理モジュール530は、同期データ更新モジュール531と、データ更新頻度決定モジュール533と、応答データ更新モジュール535とをさらに含む。例えば、同期データ更新モジュール531は、通常、応答データを更新するためにコンピュータによって使用される第1のフレームレートよりも大きい第2のフレームレート(例えば、毎秒90または120フレーム)で、リモートユーザ入力イベントに関連する画像フレームに対応する同期データを更新するように構成される。データ更新頻度決定モジュール533は、同期データへの更新の数、および応答データへの更新の数を決定するように構成される。応答データ更新モジュール535は、同期データへの更新の数が応答データへの更新の数と同じであるかどうかを判断するように構成される。そうである場合、応答データ更新モジュール535は、次いで、応答データを更新された同期データと入れ替える。そうではない場合、応答データ更新モジュール535は、次いで、同期データ更新モジュール531に、同期データを更新するように通知する。
【００２９】
上記で説明した手法では、ローカル応答データ更新モジュール30およびリモートデータ同期モジュール50は、それらが同じネットワークアプリケーションを使用する異なるコンピュータで異なるユーザによって生成されるので、互いに独立して動作することに留意されたい。しかしながら、同期データへの更新が定義済みの条件を満たすとき、同期データは、応答データと再び同期され得、したがって、ネットワークアプリケーションのユーザ体験を改善することができる。いくつかの実施形態では、応答データ更新モジュール30は、クライアントコンピュータに位置し、リモートデータ同期モジュール50は、サーバ810に位置する。いくつかの他の実施形態では、応答データ更新モジュール30とリモートデータ同期モジュール50の両方は、サーバ810に位置することができる。
【００３０】
図7は、いくつかの実施形態による、ネットワークアプリケーションの2人のユーザに関連するコンピュータがユーザ入力イベントを互いに同期する方法を説明するブロック図である。この例では、ユーザ1(700-1)は、別のコンピュータを使用するユーザ2(700-2)と情報を交換するために、ローカルコンピュータを使用することができる。例えば、2人のユーザは、オンラインゲームアプリケーションをプレイすることができる。例えば、ユーザ1に関連するコンピュータは、異なるタイプのユーザ入力イベントを受信するためのユーザ入力イベント受信モジュール10を含むことができる。受信したユーザ入力イベントに対して、ローカル応答データ更新モジュール30は、ユーザ1からのローカルユーザ入力イベントを処理する(例えば、ローカルユーザ入力イベントに関連する応答データを生成し、更新する)役割を果たす。リモートデータ同期モジュール50内では、入力イベント応答モジュール510およびデータ処理モジュール530は、(ローカルユーザ入力イベントと同期していない可能性がある)リモートユーザ入力イベントを処理し、同じネットワークアプリケーションを実行している異なるコンピュータを互いに同期させ続ける役割を果たす。
【００３１】
この例では、ユーザ1に関連するコンピュータは、ネットワークアプリケーションの3つの異なる画像フレームにそれぞれ関連する、ユーザ1によってトリガされた3つのローカル入力イベントである、ローカルユーザ入力イベント1、ローカルユーザ入力イベント2、およびローカルユーザ入力イベント3を受信する。上述したように、各ユーザ入力イベントに対して、ローカル応答データ更新モジュール30は、応答データを生成および更新し、個々の画像フレームを描画するために応答データを使用するようにトリガされる。ネットワークアプリケーションが第4の画像フレームを描画するとき、ユーザ2に関連するコンピュータからのリモートユーザ入力イベントがコンピュータに到着する。このイベントは、ローカルユーザ入力イベント1およびリモートユーザ入力イベント1に基づいて同期データを生成するようにコンピュータの入力イベント応答モジュール510をトリガする。データ処理モジュール530は、次いで、同期データが応答データのように同じ数更新されるように、第1の画像フレームから第2、第3、および第4の画像フレームへの同期化データを更新する。最後に、同期データは、応答データを記憶するためのデータ構造に記憶され、次いで、ユーザ1に関連するコンピュータでの第4の画像フレームがユーザ2に関連するコンピュータでの対応する画像フレームと同期するように、それに応じて第4の画像フレームを描画するために使用される。ユーザ2に関連するコンピュータは、3つのローカルユーザ入力イベントを、それらが応答データを更新するために使用され得ないようにそれらが実質的な遅延を有してコンピュータに到着する場合、実質的に同じ方法で処理することに留意されたい。
【００３２】
図9は、いくつかの実施形態による例示的なクライアントコンピュータのブロック図である。例示的なクライアントコンピュータ830は、典型的には、1つまたは複数の処理ユニット(CPU)902と、1つまたは複数のネットワークまたは他の通信インターフェース904と、メモリ910と、これらの構成要素を相互接続するための1つまたは複数の通信バス909とを含む。通信バス909は、システム構成要素間を相互接続し、これらの間の通信を制御する回路網(時には、チップセットと呼ばれる)を含むことができる。クライアントコンピュータ830は、ユーザインターフェース905、例えば、ディスプレイ906およびキーボード908を含むことができる。メモリ910は、高速ランダムアクセスメモリを含むことができ、1つまたは複数の磁気ディスク記憶デバイスなどの不揮発性メモリを含むこともできる。メモリ910は、CPU 902から遠隔地に配置された大容量記憶装置を含むことができる。いくつかの実施形態では、メモリ910は、以下のプログラム、モジュール、およびデータ構造、または、これらのサブセットもしくはスーパセットを記憶する。
・様々な基本システムサービスを処理し、ハードウェア依存タスクを実行するための手順を含むオペレーティングシステム912。
・インターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、などの、1つまたは複数の通信ネットワーク(ワイヤードまたはワイヤレス)を介して、クライアントコンピュータ830をサーバ810または他のコンピュータに接続するために使用されるネットワーク通信モジュール914。
・ユーザインターフェース905を介してユーザ入力を受信するように構成されたユーザインターフェースモジュール916。
・1つまたは複数のクライアント側ネットワークアプリケーション918であって、各ネットワークアプリケーションは、図4に関連して上記で説明したような、ユーザ入力イベント受信モジュール10と、ローカル応答データ更新モジュール30と、リモートデータ同期モジュール50と、データ交換モジュール70とをさらに含む。
【００３３】
図10は、いくつかの実施形態によるサーバのブロック図である。例示的なサーバ810は、典型的には、1つまたは複数の処理ユニット(CPU)1002と、1つまたは複数のネットワークまたは他の通信インターフェース1004と、メモリ1010と、これらの構成要素を相互接続するための1つまたは複数の通信バス1009とを含む。通信バス1009は、システム構成要素間を相互接続し、これらの間の通信を制御する回路網(時には、チップセットと呼ばれる)を含むことができる。サーバ810は、オプションで、ユーザインターフェース1005、例えば、ディスプレイ1006およびキーボード1008を含むことができる。メモリ1010は、高速ランダムアクセスメモリを含むことができ、1つまたは複数の磁気ディスク記憶デバイスなどの不揮発性メモリを含むこともできる。メモリ1010は、CPU1002から遠隔地に配置された大容量記憶装置を含むことができる。いくつかの実施形態では、メモリ1010は、以下のプログラム、モジュール、およびデータ構造、または、これらのサブセットもしくはスーパセットを記憶する。
・様々な基本システムサービスを処理し、ハードウェア依存タスクを実行するための手順を含むオペレーティングシステム1012。
・インターネット、他のワイドエリアネットワーク、ローカルエリアネットワーク、メトロポリタンエリアネットワーク、などの、1つまたは複数の通信ネットワーク(ワイヤードまたはワイヤレス)を介して、サーバ810を他のサーバまたはクライアントコンピュータ830に接続するために使用されるネットワーク通信モジュール1014。
・他のモジュール、および、サーバ810の適切な動作のために必要なメモリ1012に記憶されたデータ構造を初期化するシステム初期化モジュール1016。
・ユーザインターフェース1005を介してユーザ入力を受信するように構成されたオプションのユーザインターフェースモジュール1018。
・1つまたは複数のサーバ側ネットワークアプリケーション1020であって、各ネットワークアプリケーションは、ユーザ情報データ1022(例えば、ユーザ識別子、パスワード、ユーザ口座残高、現在のユーザステータス)をさらに含む。
【００３４】
特定の実施形態が上記で説明されているが、本発明をこれらの特定の実施形態に限定することは、意図されていないことが理解されるであろう。それとは逆に、本発明は、添付の特許請求の範囲の要旨および範囲内にある代替形態、変更形態、および等価形態を含む。本明細書に提示される主題の完全な理解を提供するために、多数の特定の詳細が述べられる。しかし、主題は、これらの特定の詳細なしに実施され得ることが、当業者には明らかであろう。他の例では、周知の方法、手順、構成要素、および回路は、実施形態の態様を不必要に曖昧にしないようにするために、詳細には説明されない。
【００３５】
本明細書で本発明の説明で使用される用語は、特定の実施形態を説明する目的のためのものであり、本発明を限定することを意図するものではない。本発明の説明および添付の特許請求の範囲で使用されるとき、単数形「a」、「an」、および「the」は、文脈が別途明らかに指示しない限り、複数形も含むことを意図している。本明細書で使用される「および/または」という用語は、1つまたは複数の関連する列挙された項目の任意のおよびすべての可能な組み合わせを指し、これらを含むことも理解されるであろう。さらに、「含む」、「含んでいる」、「備える」、および/または「備えている」という用語は、本明細書で使用されるとき、述べられた特徴、動作、要素、および/または構成要素の存在を特定するが、1つまたは複数の他の特徴、動作、要素、構成要素、および/またはこれらのグループの存在または追加を排除しないことが理解されるであろう。
【００３６】
本明細書で使用されるとき、「場合」という用語は、文脈に応じて、述べられた先行条件が真である「とき」、または「のに際し」、または「という判断に応答して」、または「ことの検出に応答して」を意味すると解釈され得る。同様に、「「述べられた先行条件が真である」と判断された場合」、または「「述べられた先行条件が真である」場合」、または「「述べられた先行条件が真である」とき」というフレーズは、文脈に応じて、述べられた先行条件が真である「と判断すると」、または「という判断に際して」、または「という判断に応答して」、または「という判断にしたがって」、または「ことの検出に応答して」を意味すると解釈され得る。
【００３７】
様々な図面のいくつかは、いくつかの論理的段階を特定の順序で示しているが、順序に依存しない段階は、並べ替えられてよく、他の段階は、組み合わされてよく、または分解されてよい。いくつかの並べ替えまたは他のグループ化が具体的に述べられているが、他のものは、当業者には明らかであるので、代替物の網羅的なリストを提示しない。さらに、段階は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの任意の組み合わせで実施され得ることを認識すべきである。
【００３８】
前述の説明は、説明の目的のため、特定の実施形態に関して説明してきた。しかしながら、上記の例示的な考察は、網羅的であることを意図せず、または、本発明を、開示された正確な形態に限定することを意図していない。多くの変更および変形が、上記の教示に鑑みて可能である。実施形態は、本発明の原理およびその実地応用を最良に説明し、それによって、当業者が本発明、および、考えられる特定の用途に適するように様々な変更を加えた様々な実施形態を最良に利用することを可能にするために、選択および説明された。
【符号の説明】
【００３９】
10  ユーザ入力イベント受信モジュール
30  ローカル応答データ更新モジュール
50  リモートデータ同期モジュール
70  データ交換モジュール
510  入力イベント応答モジュール
530  データ処理モジュール
531  同期データ更新モジュール
533  データ更新頻度決定モジュール
535  応答データ更新モジュール
700-1  ユーザ1
700-2  ユーザ2
800  ネットワーク環境
810  サーバ
812  ユーザ情報データベース
820  ネットワーク
830  クライアントコンピュータ
830-1  クライアントコンピュータ
830-3  クライアントコンピュータ
832-1  ネットワークアプリケーション
832-3  ネットワークアプリケーション
902  CPU
904  通信インターフェース
905  ユーザインターフェース
906  ディスプレイ
908  キーボード
909  通信バス
910  メモリ
912  オペレーティングシステム
914  ネットワーク通信モジュール
916  ユーザインターフェースモジュール
918  クライアント側ネットワークアプリケーション
1002  CPU
1004  通信インターフェース
1005  ユーザインターフェース
1006  ディスプレイ
1008  キーボード
1009  通信バス
1010  メモリ
1012  オペレーティングシステム
1014  ネットワーク通信モジュール
1016  システム初期化モジュール
1018  ユーザインターフェースモジュール
1020  サーバ側ネットワークアプリケーション
1022  ユーザ情報データ
【図１】
0005922846.tif 000002
【図２】
0005922846.tif 000003
【図３】
0005922846.tif 000004
【図４】
0005922846.tif 000005
【図５】
0005922846.tif 000006
【図６】
0005922846.tif 000007
【図７】
0005922846.tif 000008
【図８】
0005922846.tif 000009
【図９】
0005922846.tif 000010
【図１０】
0005922846.tif 000011