(57)【要約】  ローカルデバイスは、リモートデバイスによる実行のための少なくとも１つの指示（例えば、ビデオゲームのゲームスクリーンをレンダリングする指示）を取得する。該少なくとも１つの指示を表すパケットが作成され、リモートデバイスに対して解放される。パケットの作成は、パケットインデックスが少なくとも１つの指示に既に割荒れられたか否かを決定するために、パケットディクショナリを調べることを含む。この場合には、パケットは、パケットインデックスを含むように形成される。そうでなければ、パケットは、少なくとも１つの指示に関連付けられた関数識別子及びパラメータセットを含むように形成される。関数識別子及びパラメータセットを符号化するよりもパケットインデックスを符号化するには、少ないビットを必要とするので、パケットが以前送信された少なくとも１つの指示を表すとき、送信したパケットを要約することができる。【特許請求の範囲】
【請求項１】
リモートデバイスに接続可能なローカルデバイスにより実行される方法であって、
前記リモートデバイスによる実行のための少なくとも１つの指示を取得するステップと、
前記少なくとも１つの指示を表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定するステップと、
前記判定ステップが肯定的なとき、前記パケットインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする方法。
【請求項２】
前記少なくとも１つの指示は、前記リモートデバイスによる実行のための関数の識別子と、前記関数の実行に用いられるパラメータの組み合わせとを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定するステップは、前記記憶手段内のパケットディクショナリが、前記関数の識別子及び前記パラメータの組み合わせに対応するエントリを含むか否かを判定するステップを含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記パケットを作成するステップは、
前記判定ステップが肯定的なとき、前記関数の識別子又は前記パラメータの組み合わせ内のいずれのパラメータも含まないように前記パケットを形成するステップをさらに含むことを特徴とする請求項２に記載の方法。
【請求項５】
前記少なくとも１つの指示は、前記ローカルデバイス上で起動するアプリケーションにより発行されることを特徴とする請求項１から請求項４のうち何れかに記載の方法。
【請求項６】
前記アプリケーションは、ゲーム状態管理処理であることを特徴とする請求項５に記載の方法。
【請求項７】
前記少なくとも１つの指示は、ビデオゲームのゲーム画面の少なくとも一部をレンダリングするための少なくとも１つの指示を含むことを特徴とする請求項１から請求項６のうち何れかに記載の方法。
【請求項８】
前記少なくとも１つの指示は、前記ビデオゲームのスコアボードを取り込むための少なくとも１つの指示を含むことを特徴とする請求項１から請求項７のうち何れかに記載の方法。
【請求項９】
前記少なくとも１つの指示は、前記ビデオゲームの他のプレイヤを見付けるための少なくとも１つの指示を含むことを特徴とする請求項１から請求項７のうち何れかに記載の方法。
【請求項１０】
前記少なくとも１つの指示は、前記ビデオゲームについてのゲームニュースを検索するための少なくとも１つの指示を含むことを特徴とする請求項１から請求項７のうち何れかに記載の方法。
【請求項１１】
前記取得ステップ、前記作成ステップ及び前記解放ステップは、前記ローカルデバイス上で起動する第１マーシャリング処理により実行され、前記少なくとも１つの指示は、少なくとも１つの第１指示を含み、第１装置は、第１ローカルデバイスであり、前記方法は、第２ローカルデバイス上で起動する第２マーシャリング処理により実行される追加ステップをさらに含み、
前記追加ステップは、
前記リモートデバイスによる実行のための少なくとも１つの第２指示を取得するステップと、
前記少なくとも１つの第２指示を表す第２パケットを作成するステップと、
前記リモートデバイスに対して前記第２パケットを送出するステップと
を含み、
前記第２パケットを作成するステップは、
前記記憶手段を調べて、第２パケットインデックスが前記少なくとも１つの第２指示に既に割り当てられたか否かを第２判定するステップと、
前記第２判定ステップが肯定的なとき、前記第２パケットインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする請求項１から請求項１０のうち何れかに記載の方法。
【請求項１２】
前記第１指示及び第２指示が同一であるとき、前記第１パケットインデックス及び第２パケットインデックスは同一であることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記記憶手段は、前記第１ローカルデバイス及び第２ローカルデバイスにより共有されるメモリ空間であることを特徴とする請求項１１又は請求項１２に記載の方法。
【請求項１４】
前記少なくとも１つの第１指示は、前記リモートデバイスによる実行のための第１関数の識別子と、該第１関数の実行に用いられるパラメータの第１組み合わせとを含み、
前記少なくとも１つの第２指示は、前記リモートデバイスによる実行のための第２関数の識別子と、該第２関数の実行に用いられるパラメータの第２組み合わせと含むことを特徴とする請求項１１に記載の方法。
【請求項１５】
前記第２パケットを作成するステップは、
前記第２判定ステップが肯定的なとき、前記第２関数の識別子又は前記パラメータの第２組み合わせ内のいずれのパラメータも含まないように前記第２パケットを形成するステップをさらに含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記判定ステップは、第１判定ステップであり、
前記パケットを作成するステップは、
前記第１判定ステップが否定的なとき、前記記憶手段を調べて、パラメータインデックスが前記パラメータの組み合わせに既に割り当てられたか否かを第２判定するステップと、
前記第２判定ステップが肯定的なとき、前記パラメータ組み合わせインデックスを含むように前記パケットを形成するステップと
をさらに含むことを特徴とする請求項２に記載の方法。
【請求項１７】
前記パケットを作成するステップは、
前記第２判定ステップが肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するステップをさらに含むことを特徴とする請求項１６に記載の方法。
【請求項１８】
前記判定ステップは、第１判定ステップであり、
前記パケットを作成するステップは、
前記第１判定ステップが否定的なとき、前記記憶手段を調べて、パラメータインデックスが前記パラメータの組み合わせ内の個別パラメータのそれぞれに既に割り当てられたか否かを第２判定するステップと、
前記第２判定ステップが肯定的なとき、前記パラメータの組み合わせの前記各パラメータのための前記パラメータインデックスを含むように前記パケットを形成するステップと
をさらに含むことを特徴とする請求項２に記載の方法。
【請求項１９】
前記パケットを作成するステップは、前記第２判定ステップが肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するステップをさらに含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記パケットを作成するステップは、前記第２判定ステップが肯定的なとき、
パラメータ組み合わせインデックスを前記パラメータの組み合わせに割り当てるステップと、
前記パラメータの組み合わせに関連付けて、前記パラメータ組み合わせインデックスを前記記憶手段に記憶するステップと
をさらに含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
前記割り当てステップは、前記リモートデバイスにとって公知の処理に従って実行されることを特徴とする請求項２０に記載の方法。
【請求項２２】
前記パケットを作成するステップは、前記第２判定ステップが肯定的なとき、前記パラメータ組み合わせインデックスをさらに含むように前記パケットを形成するステップをさらに含むことを特徴とする請求項２０に記載の方法。
【請求項２３】
前記パケットを作成するステップは、
前記判定ステップが否定的なとき、以前に割り当てられたパラメータインデックスに関連付けられていない１つ以上のパラメータを特定するステップと、
前記１つ以上のパラメータのそれぞれに対して、各パラメータインデックスを割り当て、前記パラメータに関連付けて、パラメータインデックステーブル内に前記各パラメータインデックスを記憶するステップと
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項２４】
前記割り当てステップは、前記リモートデバイスに公知の処理に従って実行されることを特徴とする請求項２３に記載の方法。
【請求項２５】
前記パケットを作成するステップは、前記判定ステップが否定的なとき、前記１つ以上のパラメータのそれぞれを含むように前記パケットを形成するステップをさらに含むことを特徴とする請求項２３に記載の方法。
【請求項２６】
前記パケットを作成するステップは、前記判定ステップが否定的なとき、前記１つ以上のパラメータにそれぞれ関連付けられた前記パラメータインデックスをさらに含むように前記パケットを形成するステップをさらに含むことを特徴とする請求項２５に記載の方法。
【請求項２７】
前記パケットを作成するステップは、
前記判定ステップが否定的なとき、パラメータインデックスが既に割り当てられた１つ以上のパラメータを特定するステップと、
前記１つ以上のパラメータにそれぞれ関連付けられた前記パラメータインデックスをさらに含むように前記パケットを形成するステップと
をさらに含むことを特徴とする請求項２５に記載の方法。
【請求項２８】
前記パケットを形成すると、該パケットは、パラメータインデックスが既に割り当てられた前記１つ以上のパラメータのいずれも含まないことを特徴とする請求項２７に記載の方法。
【請求項２９】
前記パケットを送出するステップは、通信ユニットの出力キューに前記パケットを位置させるステップを含むことを特徴とする請求項１から請求項２８のうち何れかに記載の方法。
【請求項３０】
前記リモートデバイスによる実行のための前記関数の識別子は、前記パラメータの少なくとも１つに符号化されることを特徴とする請求項２及び請求項１６から請求項２２のうち何れかに記載の方法。
【請求項３１】
リモートデバイスに接続可能な装置であって、
前記リモートデバイスによる実行のための少なくとも１つの指示を取得するインタフェースと、
前記少なくとも１つの指示を表すパケットを作成し、前記インタフェースを介して、前記リモートデバイスに対して前記パケットを送出する処理ユニットと、
共有パケットディクショナリを含む記憶手段と
を備え、
前記パケットを作成するために、前記処理ユニットは、
前記共有パケットディクショナリを調べて、パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定し、
前記判定が肯定的なとき、前記パケットインデックスを含むように前記パケットを形成する
ように構成されることを特徴とする装置。
【請求項３２】
前記少なくとも１つの指示は、前記リモートデバイスによる実行のための関数の識別子と、該関数の実行に用いられるパラメータの組み合わせとを含むことを特徴とする請求項３１に記載の装置。
【請求項３３】
パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定するために、前記処理ユニットは、
前記共有パケットディクショナリが、前記関数の識別子及び前記パラメータの組み合わせに対応するエントリを含むか否かを判定するように構成されることを特徴とする請求項３２に記載の装置。
【請求項３４】
前記パケットを作成するために、前記処理ユニットは、
前記判定が肯定的なとき、前記関数の識別子又は前記パラメータの組み合わせ内の前記パラメータのいずれも含まないように前記パケットを形成するようにさらに構成されることを特徴とする請求項３２に記載の装置。
【請求項３５】
前記処理ユニットは、前記少なくとも１つの指示を発行するアプリケーションを起動するようにさらに構成されることを特徴とする請求項３１に記載の装置。
【請求項３６】
前記アプリケーションは、ビデオゲームを含み、前記少なくとも１つの指示は、前記ビデオゲームのゲーム画面のレンダリング指示であることを特徴とする請求項３５に記載の装置。
【請求項３７】
前記記憶手段は、パラメータ組み合わせインデックステーブルをさらに備え、前記判定は第１判定であり、
前記パケットを作成するために、前記処理ユニットは、
前記第１判定が否定的なとき、前記パラメータ組み合わせインデックステーブルを調べて、パラメータ組み合わせインデックスが前記パラメータの組み合わせに既に割り当てられたか否かを第２判定し、
前記第２判定が肯定的なとき、前記パラメータ組み合わせインデックスを含むように前記パケットを形成する
ようにさらに構成されることを特徴とする請求項３２に記載の装置。
【請求項３８】
前記パケットを作成するために、前記処理ユニットは、
前記第２判定が肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するようにさらに構成されることを特徴とする請求項３７に記載の装置。
【請求項３９】
前記判定は、第１判定であり、前記記憶手段は、パラメータインデックステーブルを備え、
前記パケットを作成するために、前記処理ユニットは、前記第１判定が否定的なとき、
前記パラメータインデックステーブルを調べて、パラメータインデックスが前記パラメータの組み合わせ内の個別パラメータのそれぞれに既に割り当てられたか否かを第２判定し、
前記第２判定が肯定的なとき、前記パラメータの組み合わせ内の前記各パラメータのためのパラメータインデックスを含むように前記パケットを形成する
ようにさらに構成されることを特徴とする請求項３２に記載の装置。
【請求項４０】
前記パケットを作成するために、前記処理ユニットは、前記第２判定ステップが肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するようにさらに構成されることを特徴とする請求項３９に記載の装置。
【請求項４１】
前記パケットを作成するために、前記処理ユニットは、前記第２判定ステップが肯定的なとき、
パラメータ組み合わせインデックスを前記パラメータの組み合わせに割り当て、
前記パラメータの組み合わせに関連付けて、前記パラメータ組み合わせインデックスを前記記憶手段に記憶する
ようにさらに構成されることを特徴とする請求項４０に記載の装置。
【請求項４２】
前記パケットを作成するために、前記処理ユニットは、前記第２判定ステップが肯定的なとき、前記パラメータ組み合わせインデックスをさらに含むように前記パケットを形成するようにさらに構成されることを特徴とする請求項４１に記載の装置。
【請求項４３】
前記記憶手段は、パラメータインデックステーブルを備え、
前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、
パラメータインデックスが以前に割り当てられていない１つ以上のパラメータを特定し、
前記１つ以上のパラメータのそれぞれに対して、各パラメータインデックスを割り当て、前記パラメータに関連付けて、前記パラメータインデックステーブルに前記各パラメータインデックスを記憶するようにさらに構成されることを特徴とする請求項３１に記載の装置。
【請求項４４】
前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、前記１つ以上のパラメータのそれぞれを含むように前記パケットを形成するようにさらに構成されることを特徴とする請求項４１に記載の装置。
【請求項４５】
前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、前記１つ以上のパラメータにそれぞれ関連付けられたパラメータインデックスをさらに含むように前記パケットを形成するようにさらに構成されることを特徴とする請求項４４に記載の装置。
【請求項４６】
前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、
パラメータインデックスが既に割り当てられた１つ以上のパラメータを特定し、
前記１つ以上のパラメータにそれぞれ関連付けられた前記パラメータインデックスをさらに含むように前記パケットを形成する
ようにさらに構成されることを特徴とする請求項４４に記載の装置。
【請求項４７】
前記パケットを形成すると、該パケットは、前記１つ以上のパラメータのいずれも含まないことを特徴とする請求項４６に記載の装置。
【請求項４８】
前記インタフェースは、出力キューを備え、前記パケットは、該出力キューに位置することにより解放されることを特徴とする請求項３１から請求項４７のうち何れかに記載の装置。
【請求項４９】
前記リモートデバイスによる実行のための前記関数の識別子は、前記パラメータの少なくとも１つに符号化されることを特徴とする請求項３２に記載の装置。
【請求項５０】
プライベートデータネットワークを介して前記リモートデバイスに接続されることを特徴とする請求項３１に記載の装置。
【請求項５１】
請求項３１から請求項４６の何れかに記載の装置と、
第２装置と
を備える組み合わせであって、
前記第２装置は、
前記リモートデバイスによる実行のための少なくとも１つの第２指示の識別子を取得するインタフェースと、
前記少なくとも１つの第２指示を表す第２パケットを作成し、前記インタフェースを介して、前記リモートデバイスに対して該第２パケットを送出する処理ユニットと
を備え、
前記第２パケットを作成するために、前記処理ユニットは、
前記共有パケットディクショナリを調べて、パケットインデックスが前記少なくとも１つの第２指示に既に割り当てられたか否かを第２判定し、
前記第２判定が肯定的なとき、前記第２パケットインデックスを含むように前記第２パケットを形成するよう構成されることを特徴とする組み合わせ。
【請求項５２】
前記第１指示及び第２指示が同一であるとき、前記第１パケットインデックス及び第２パケットインデックスは同一であることを特徴とする請求項５１に記載の組み合わせ。
【請求項５３】
前記第１指示は、第１関数の識別子と、該第１関数の実行に用いられるパラメータの第１組み合わせとを含み、前記第２指示は、第２関数の識別子と、該第２関数の実行に用いられるパラメータの第２組み合わせとを含むことを特徴とする請求項５１に記載の組み合わせ。
【請求項５４】
前記第１パケットを作成するために、前記第１装置の処理エンティティは、前記第１判定が肯定的なとき、前記第２関数の識別子又は前記パラメータの第２組み合わせ内のパラメータのいずれも含まないように前記第２パケットを形成するようにさらに構成されることを特徴とする請求項５３に記載の組み合わせ。
【請求項５５】
前記第２パケットを作成するために、前記第２装置の処理エンティティは、前記第２判定が肯定的なとき、前記第２関数の識別子又は前記パラメータの第２組み合わせ内のパラメータのいずれも含まないように前記第２パケットを形成するようにさらに構成されることを特徴とする請求項５４に記載の組み合わせ。
【請求項５６】
前記第１装置及び前記第２装置は、クラウドゲーミングサーバ内に具現化されることを特徴とする請求項５１から請求項５５のうち何れかに記載の組み合わせ。
【請求項５７】
前記共有パケットディクショナリは、前記クラウドゲーミングサーバの一部であることを特徴とする請求項５６に記載の組み合わせ。
【請求項５８】
前記共有パケットディクショナリは、記憶領域ネットワークを介して、前記第１装置及び前記第２装置にアクセス可能であることを特徴とする請求項５１に記載の組み合わせ。
【請求項５９】
前記第１装置は、コンピュータネットワークを介して、前記第２装置に接続されることを特徴とする請求項５１から請求項５８のうち何れかに記載の組み合わせ。
【請求項６０】
前記第１装置は、データセンタにおいて前記第２装置に接続されることを特徴とする請求項５１から請求項５８のうち何れかに記載の組み合わせ。
【請求項６１】
ローカルデバイスの少なくとも１つのプロセッサによる実行のための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、該ローカルデバイスの少なくとも１つのプロセッサによる該指示の実行は、前記ローカルデバイスに以下のステップを含む方法を実行させ、
前記方法は、
リモートデバイスによる実行のための少なくとも１つのコマンドの識別子を取得するステップと、
前記少なくとも１つのコマンドを表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、パケットインデックスが前記少なくとも１つのコマンドに既に割り当てられたか否かを判定するステップと、
前記判定が肯定的なとき、前記パケットインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【請求項６２】
リモートデバイスに接続可能なローカルデバイスにより実行される方法であって、
前記リモートデバイスによる実行のための一連の指示を取得するステップと、
前記一連の指示を表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、シーケンスインデックスが前記一連の指示に既に割り当てられたか否かを判定するステップと、
前記判定ステップが肯定的なとき、前記シーケンスインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする方法。
【請求項６３】
前記パケットを作成するステップは、
前記判定ステップが否定的なとき、前記一連の指示における各指示のためにパケットを作成するステップと、
前記リモートデバイスに対して各パケットを送出するステップと
をさらに含むことを特徴とする請求項６２に記載の方法。
【請求項６４】
リモートデバイスに接続可能な装置であって、
前記リモートデバイスによる実行のための一連の指示を取得するインタフェースと、
前記一連の指示を表すパケットを作成し、前記インタフェースを介して、前記リモートデバイスに対して前記パケットを送出する処理ユニットと、
シーケンスディクショナリを含む記憶手段と
を備え、
前記パケットを作成するために、前記処理ユニットは、
前記シーケンスディクショナリを調べて、シーケンスインデックスが前記一連の指示に既に割り当てられたか否かを判定し、
前記判定が肯定的なとき、前記パケットインデックスを含むように前記パケットを形成するよう構成されることを特徴とする装置。
【請求項６５】
ローカルデバイスの少なくとも１つのプロセッサによる実行のための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、該ローカルデバイスの少なくとも１つのプロセッサによる該指示の実行は、前記ローカルデバイスに以下のステップを含む方法を実行させ、
前記方法は、
前記リモートデバイスによる実行のための一連のコマンドを取得するステップと、
前記一連のコマンドを表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、シーケンスインデックスが前記一連のコマンドに既に割り当てられたか否かを判定するステップと、
前記判定ステップが肯定的なとき、前記シーケンスインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【請求項６６】
第１装置に接続可能な第２装置により実行される方法であって、
前記第１装置により位置されるリモート関数呼び出しに関連付けられたパケットインデックスを含むパケットを前記第１装置から取得するステップと、
前記パケットインデックスに基づくパケットディクショナリを調べて、前記リモート関数呼び出しに関連付けられた関数を特定するとともに、該リモート関数呼び出しに関連付けられたパラメータの組み合わせを判定するステップと、
前記パラメータの組み合わせ内の前記パラメータを用いて、前記関数を実行するステップと
を含むことを特徴とする方法。
【請求項６７】
前記リモート関数呼び出しに関連付けられた前記パラメータの組み合わせを判定するために、前記方法は、
前記パケットインデックスに基づく前記パケットディクショナリから、前記パラメータの組み合わせに関連付けられたパラメータインデックスの組み合わせを判定し、前記パラメータインデックスの組み合わせ内の前記パラメータインデックスに基づいて、パラメータインデックステーブルを調べて、前記パラメータの組み合わせ内のパラメータを判定するステップ
を含むことを特徴とする請求項６６に記載の方法。
【請求項６８】
前記リモート関数呼び出しに関連付けられた関数を特定するために、前記方法は、
前記パケットインデックスに基づくパケットディクショナリから、少なくとも１つの関数インデックスを決定するとともに、前記関数インデックスに基づいて、関数テーブルを調べて、前記リモート関数呼び出しに関連付けられた関数を特定するステップを含むことを特徴とする請求項６６に記載の方法。
【請求項６９】
１つ以上の先行するステップの間に、
前記リモート関数呼び出しに関連付けられた前記関数の身元（identity）を含むパケットを前記第１装置から取得するステップと、
前記関数インデックスに関連付けて、前記関数テーブル内に前記関数の身元を記憶するステップと
をさらに含むことを特徴とする請求項６８に記載の方法。
【請求項７０】
前記１つ以上の先行するステップの間に、
前記リモート関数呼び出しに関連付けられた前記パラメータを含む少なくとも１つのパケットを前記第１装置から取得するステップと、
前記パラメータインデックスのそれぞれに関連付けて、前記パラメータインデックステーブル内に前記パラメータを記憶するステップと
をさらに含むことを特徴とする請求項６９に記載の方法。
【請求項７１】
前記１つ以上の先行するステップの間に、
前記関数インデックスと、前記パラメータの組み合わせに関連付けられたパラメータインデックスの組み合わせとを含むパケットを前記第１装置から取得するステップと、
前記パケットインデックスに関連付けて、前記関数インデックス及び前記パラメータインデックスの組み合わせを前記パケットディクショナリに記憶するステップと
さらに含むことを特徴とする請求項７０に記載の方法。
【請求項７２】
サーバの少なくとも１つのプロセッサによる実行のための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、前記サーバの少なくとも１つのプロセッサによる該指示の実行は、前記サーバに以下のステップを含む方法を実行させ、
前記方法は、
前記第１装置により位置されるリモート関数呼び出しに関連付けたパケットインデックスを含むパケットを、前記サーバに接続される計算装置から取得するステップと、
前記パケットインデックスに基づくパケットディクショナリを調べて、前記リモート関数呼び出しに関連付けられた関数を特定するとともに、該リモート関数呼び出しに関連付けられたパラメータの組み合わせを決定するステップと、
前記パラメータの組み合わせ内の前記パラメータを用いて前記関数を実行するステップと
を含むことを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【請求項７３】
第１装置に接続可能な第２装置により実行される方法であって、
前記第１装置に位置されるリモート関数呼び出しに関連付けられた複数のパラメータインデックスを少なくとも含むパケットを該第１装置から取得するステップと、
前記複数のパラメータインデックスに基づいて、パラメータインデックステーブルを調べて、前記リモート関数呼び出しに関連付けられたパラメータの組み合わせ内の複数のパラメータを決定するステップと、
前記リモート関数呼び出しに関連付けられた関数を特定するステップと、
前記パラメータの組み合わせ内の前記パラメータを用いて、前記第２装置において前記第１装置のための前記関数を実行するステップと
を含むことを特徴とする方法。
【請求項７４】
前記パケットは、関数インデックスを含み、
前記リモート関数呼び出しに関連付けられた関数を特定するステップは、前記関数インデックスに基づいて、関数テーブルを調べるステップを含むことを特徴とする請求項７３に記載の方法。
【請求項７５】
前記関数インデックス及び前記パラメータインデックスの組み合わせに応じて、前記パケットディクショナリにパケットインデックスを記憶するステップをさらに含むことを特徴とする請求項７３に記載の方法。
【請求項７６】
前記関数インデックス及び前記パラメータインデックスの組み合わせに前記パケットインデックスを割り当てるステップをさらに含み、
該割当ステップは、前記第１装置に公知の処理に従って実行されることを特徴とする請求項７５に記載の方法。
【請求項７７】
第１装置に接続可能な第２装置により実行される方法であって、
前記第１装置により発行される一連の指示に関連付けられたシーケンスインデックスを含むパケットを該第１装置から取得するステップと、
前記シーケンスインデックスに基づくシーケンスディクショナリを調べて、一連のリモート手続き呼び出しにそれぞれ関連付けられた複数の関数を特定するとともに、各関数のために、各パラメータの組み合わせを決定するステップと、
前記各パラメータの組み合わせ内の前記パラメータを用いて、前記複数の関数を実行するステップと
を含むことを特徴とする方法。
【請求項７８】
オンラインゲーム機内のローカルデバイスの少なくとも１つのプロセッサにより実行するための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、
該ローカルデバイスの前記少なくとも１つのプロセッサによる前記指示の実行により、
ゲームの複数の参加者のゲーム状態を管理するためのゲーム状態管理処理と、
前記ゲーム状態管理処理により発行されるコマンドを取得する複数のローカルスタブであって、前記コマンドの所定の１つを取得するとき、前記ローカルスタブの所定の１つは、前記所定の指示に関連付けられたパケット識別子を見付けることを試みて、前記複数のローカルスタブ間で共有されるパケットディクショナリを調べるように構成され、パケット識別子を見付けると、前記ローカルスタブの該所定の１つは、前記ローカルデバイスから離れた装置における前記所定の指示のリモート実行のために、前記パケット識別子を含むパケットをリモートスタブに対して送出するよう構成される、前記複数のローカルスタブと
を実行させることを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【請求項７９】
前記ローカルデバイスは、中央サーバであり、前記リモートデバイスは、ＧＰＵを備えたレンダリングサーバであることを特徴とする請求項７８に記載の一時的ではないコンピュータに読み取り可能な媒体。
【請求項８０】
前記少なくとも１つのプロセッサは、協働して前記ゲーム状態管理処理を実行する複数のプロセッサを含むことを特徴とする請求項７８又は請求項７９に記載の一時的ではないコンピュータに読み取り可能な媒体。
【請求項８１】
前記ローカルスタブは、前記ゲームの参加者にそれぞれ関連付けられていることを特徴とする請求項７８から請求項８０のうち何れかに記載の一時的ではないコンピュータに読み取り可能な媒体。
【請求項８２】
前記コマンドは、レンダリング指示を含むことを特徴とする請求項７８から請求項８１のうち何れかに記載の一時的ではないコンピュータに読み取り可能な媒体。
【請求項８３】
前記ローカルスタブの所定の１つは、前記リモートデバイスに対して前記パケットを送出したことに応じて、レンダリングされたゲームシーンを受信するように構成されることを特徴とする請求項７８から請求項８２のうち何れかに記載の一時的ではないコンピュータに読み取り可能な媒体。
【請求項８４】
リモートデバイスへの接続のためのインタフェースと、
ゲームの複数の参加者のゲーム状態を管理するために、ゲーム状態管理処理を実行する少なくとも１つのプロセッサと、
パケットディクショナリを記憶する記憶手段と
を備え、
前記少なくとも１つのプロセッサは、前記ゲーム状態管理処理により発行される指示を取得するための複数のローカルスタブを実行し、所定組の指示を取得するとき、前記ローカルスタブの所定の１つは、前記所定組の指示に関連付けられたパケット識別子を見付けることを試みて、前記複数のローカルスタブ間で共有される前記パケットディクショナリを調べるよう構成され、パケット識別子を見付けると、前記ローカルスタブの前記所定の１つは、前記所定組の指示のリモート実行のために、前記インタフェースを介して前記パケット識別子を含むパケットを前記リモートデバイスに対して送出するよう構成されることを特徴とする計算装置。
【請求項８５】
中央サーバにより実現される計算装置であって、前記リモートデバイスは、ＧＰＵを備えた少なくとも１つのレンダリングサーバを含むことを特徴とする請求項８４に記載の計算装置。
【請求項８６】
前記少なくとも１つのプロセッサは、協働して前記ゲーム状態管理処理を実行する複数のプロセッサを含むことを特徴とする請求項８４又は請求項８５に記載の計算装置。
【請求項８７】
前記ローカルスタブは、前記ゲームの参加者にそれぞれ関連付けられることを特徴とする請求項８４から請求項８６のうち何れかに記載の計算装置。
【請求項８８】
前記コマンドは、レンダリング指示であることを特徴とする請求項８４から請求項８７のうち何れかに記載の計算装置。
【請求項８９】
前記ローカルスタブの所定の１つは、前記リモートデバイスに対して前記パケットを送出したことに応じて、レンダリングされたゲームシーンを受信するよう構成されることを特徴とする請求項８４から請求項８８のうち何れかに記載の計算装置。
【請求項９０】
ビデオゲームの少なくとも１人の参加者のためにゲーム状態管理処理を実行し、ネットワークを介して、該少なくとも１人の参加者に関連付けられた少なくとも１つの装置から受信した入力に基づいて、該ビデオゲームの状態を調整するゲーム状態サーバと、
前記少なくとも１人の参加者のためのゲーム画面をレンダリングし、前記ネットワークを介して、前記少なくとも１人の参加者に前記ゲーム画面を送信させるレンダリングサーバであって、前記ゲーム状態サーバにより圧縮され、該レンダリングサーバに送信され、該レンダリングサーバにより解凍されるレンダリングコマンドに基づく前記レンダリングを実行するレンダリングサーバと
を備えることを特徴とするサーバシステム。
【請求項９１】
前記ゲーム状態サーバから前記レンダリングサーバに前記圧縮レンダリングコマンドを送信する第２ネットワークをさらに含むことを特徴とする請求項９０に記載のサーバシステム。
【請求項９２】
前記第２ネットワークは、低遅延（低遅延）プライベートデータネットワークを備えることを特徴とする請求項９１に記載のサーバシステム。
【請求項９３】
前記レンダリングコマンドを圧縮するために、前記ゲーム状態サーバは、一組のレンダリングコマンドを取得し、前記一組のレンダリング指示を表すパケットが前記レンダリングサーバに以前に送信されたか否かを判定しようと試みてパケットディクショナリを調べ、該試みが成功すると、前記パケットのインデックスを前記レンダリングサーバに送信するように構成されることを特徴とする請求項９０から請求項９２のうち何れかに記載のサーバシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ネットワークを介した計算装置間の通信に関し、より詳細には、第１計算装置が第２計算装置で実行すべき関数を呼び出すとき、ネットワークリソース、特に帯域幅の効果的な利用へのアプローチに関する。
【背景技術】
【０００２】
エンターテインメントの世界では、プライベートデータネットワークや公衆データネットワークを介して、声、音楽、映像及び他の形式のデータのリアルタイムあるいは準リアルタイム配信を提供することが実用化されてきている。
【０００３】
ユーザがネットワークを介して前述の形式の媒体を受動的に受信するために、自分の計算装置を用いて、多くの楽しみを得ることができる。しかしながら、ユーザが配信されるものに影響を与えたり、他の方法でそれに参加したりすることができるとき、優れたユーザの経験を可能とすることができる。しばしば引用される例は、ＩＰＴＶである。ＩＰＴＶでは、ユーザ入力が監視されるとともに、典型的に、保証された帯域幅を提供するプライベートデータネットワークを介して、ユーザに配信されるテレビ信号の本質に適合するために、そのユーザ入力が使用される。異なる例は、ユーザがプライベートデータネットワークよりもむしろインターネットを介してサポートされるビデオ又は音声会議に参加するＳｋｙｐｅである。
【０００４】
また、ビデオゲーム業界は、インターネットのパワーを利用することにより提供するのに多くの課題がある。インターネット接続がより速く、より確実になるにつれて、中央ソースで生成された大量のグラフィックスをビデオゲームの参加者に送信することが実現可能になっている。さらに、「クラウド（cloud）」において画像（images）をレンダリングしているので、ユーザは、ゲーム経験に参加するために、通常のＰＣ、タブレット又はスマートフォンを利用することができ、これにより、高価なビデオゲーム機の必要性を無視する。このことは、クラウドゲーミングシステムとして公知である。
【０００５】
クラウドゲーミングシステムでは、計算負担は、ゲームプロバイダにシフトされる。しかしながら、利用可能なゲームプロバイダのリソースは無限ではない。実用的観点から、計算リソースの制限は、ゲームのリアル感や、どんなときでもゲームのバージョンを同時に遊戯するユーザの数、あるいはその両方に影響を与え得る。
【０００６】
クラウドベースソリューション（cloud-based solution）の追加された計算負担を扱うために、いくつかのクラウドゲーミングプロバイダは、１つのコンピュータによりゲーム状態を監視し、もう１つのコンピュータによりレンダリングを実行するモデルにシフトしていっている。レンダリングを達成するために、レンダリングコマンドは、ゲーム状態コンピュータにより設置され、レンダリングコンピュータにより実行される。しかしながら、この構成は、２つのコンピュータ間の相互接続帯域幅に要求を突き付け、したがって、レンダリングコマンドを遠隔で実行するとき、この帯域幅を効果的に利用することが重要になっている。同様の考えは、リモート手続き呼び出しを大量に用いる他の産業にも適用されている。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明の種々の非限定的な態様は、以下の文節において提示される。
【０００８】
１．  リモートデバイスに接続可能なローカルデバイスにより実行される方法であって、
前記リモートデバイスによる実行のための少なくとも１つの指示を取得するステップと、
前記少なくとも１つの指示を表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定するステップと、
前記判定ステップが肯定的なとき、前記パケットインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする方法。
【０００９】
２．  前記少なくとも１つの指示は、前記リモートデバイスによる実行のための関数の識別子と、前記関数の実行に用いられるパラメータの組み合わせとを含むことを特徴とする第１項に記載の方法。
【００１０】
３．  前記パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定するステップは、前記記憶手段内のパケットディクショナリが、前記関数の識別子及び前記パラメータの組み合わせに対応するエントリを含むか否かを判定するステップを含むことを特徴とする第２項に記載の方法。
【００１１】
４．  前記パケットを作成するステップは、
前記判定ステップが肯定的なとき、前記関数の識別子又は前記パラメータの組み合わせ内のいずれのパラメータも含まないように前記パケットを形成するステップをさらに含むことを特徴とする第２項に記載の方法。
【００１２】
５．  前記少なくとも１つの指示は、前記ローカルデバイス上で起動するアプリケーションにより発行されることを特徴とする第１項から第４項のうち何れかに記載の方法。
【００１３】
６．  前記アプリケーションは、ゲーム状態管理処理であることを特徴とする第５項に記載の方法。
【００１４】
７．  前記少なくとも１つの指示は、ビデオゲームのゲーム画面の少なくとも一部をレンダリングするための少なくとも１つの指示を含むことを特徴とする第１項から第６項のうち何れかに記載の方法。
【００１５】
８．  前記少なくとも１つの指示は、前記ビデオゲームのスコアボードを取り込むための少なくとも１つの指示を含むことを特徴とする第１項から第７項のうち何れかに記載の方法。
【００１６】
９．  前記少なくとも１つの指示は、前記ビデオゲームの他のプレイヤを見付けるための少なくとも１つの指示を含むことを特徴とする第１項から第７項のうち何れかに記載の方法。
【００１７】
１０．  前記少なくとも１つの指示は、前記ビデオゲームについてのゲームニュースを検索するための少なくとも１つの指示を含むことを特徴とする第１項から第７項のうち何れかに記載の方法。
【００１８】
１１．  前記取得ステップ、前記作成ステップ及び前記解放ステップは、前記ローカルデバイス上で起動する第１マーシャリング処理により実行され、前記少なくとも１つの指示は、少なくとも１つの第１指示を含み、第１装置は、第１ローカルデバイスであり、前記方法は、第２ローカルデバイス上で起動する第２マーシャリング処理により実行される追加ステップをさらに含み、
前記追加ステップは、
前記リモートデバイスによる実行のための少なくとも１つの第２指示を取得するステップと、
前記少なくとも１つの第２指示を表す第２パケットを作成するステップと、
前記リモートデバイスに対して前記第２パケットを送出するステップと
を含み、
前記第２パケットを作成するステップは、
前記記憶手段を調べて、第２パケットインデックスが前記少なくとも１つの第２指示に既に割り当てられたか否かを第２判定するステップと、
前記第２判定ステップが肯定的なとき、前記第２パケットインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする第１項から第１０項のうち何れかに記載の方法。
【００１９】
１２．  前記第１指示及び第２指示が同一であるとき、前記第１パケットインデックス及び第２パケットインデックスは同一であることを特徴とする第１１項に記載の方法。
【００２０】
１３．  前記記憶手段は、前記第１ローカルデバイス及び第２ローカルデバイスにより共有されるメモリ空間であることを特徴とする第１１項又は第１２項に記載の方法。
【００２１】
１４．  前記少なくとも１つの第１指示は、前記リモートデバイスによる実行のための第１関数の識別子と、該第１関数の実行に用いられるパラメータの第１組み合わせとを含み、
前記少なくとも１つの第２指示は、前記リモートデバイスによる実行のための第２関数の識別子と、該第２関数の実行に用いられるパラメータの第２組み合わせと含むことを特徴とする第１１項に記載の方法。
【００２２】
１５．  前記第２パケットを作成するステップは、
前記第２判定ステップが肯定的なとき、前記第２関数の識別子又は前記パラメータの第２組み合わせ内のいずれのパラメータも含まないように前記第２パケットを形成するステップをさらに含むことを特徴とする第１４項に記載の方法。
【００２３】
１６．  前記判定ステップは、第１判定ステップであり、
前記パケットを作成するステップは、
前記第１判定ステップが否定的なとき、前記記憶手段を調べて、パラメータインデックスが前記パラメータの組み合わせに既に割り当てられたか否かを第２判定するステップと、
前記第２判定ステップが肯定的なとき、前記パラメータ組み合わせインデックスを含むように前記パケットを形成するステップと
をさらに含むことを特徴とする第２項に記載の方法。
【００２４】
１７．  前記パケットを作成するステップは、
前記第２判定ステップが肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するステップをさらに含むことを特徴とする第１６項に記載の方法。
【００２５】
１８．  前記判定ステップは、第１判定ステップであり、
前記パケットを作成するステップは、
前記第１判定ステップが否定的なとき、前記記憶手段を調べて、パラメータインデックスが前記パラメータの組み合わせ内の個別パラメータのそれぞれに既に割り当てられたか否かを第２判定するステップと、
前記第２判定ステップが肯定的なとき、前記パラメータの組み合わせの前記各パラメータのための前記パラメータインデックスを含むように前記パケットを形成するステップと
をさらに含むことを特徴とする第２項に記載の方法。
【００２６】
１９．  前記パケットを作成するステップは、前記第２判定ステップが肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するステップをさらに含むことを特徴とする第１８項に記載の方法。
【００２７】
２０．  前記パケットを作成するステップは、前記第２判定ステップが肯定的なとき、
パラメータ組み合わせインデックスを前記パラメータの組み合わせに割り当てるステップと、
前記パラメータの組み合わせに関連付けて、前記パラメータ組み合わせインデックスを前記記憶手段に記憶するステップと
をさらに含むことを特徴とする第１９項に記載の方法。
【００２８】
２１．  前記割り当てステップは、前記リモートデバイスにとって公知の処理に従って実行されることを特徴とする第２０項に記載の方法。
【００２９】
２２．  前記パケットを作成するステップは、前記第２判定ステップが肯定的なとき、前記パラメータ組み合わせインデックスをさらに含むように前記パケットを形成するステップをさらに含むことを特徴とする第２０項に記載の方法。
【００３０】
２３．  前記パケットを作成するステップは、
前記判定ステップが否定的なとき、以前に割り当てられたパラメータインデックスに関連付けられていない１つ以上のパラメータを特定するステップと、
前記１つ以上のパラメータのそれぞれに対して、各パラメータインデックスを割り当て、前記パラメータに関連付けて、パラメータインデックステーブル内に前記各パラメータインデックスを記憶するステップと
をさらに含むことを特徴とする第１項に記載の方法。
【００３１】
２４．  前記割り当てステップは、前記リモートデバイスに公知の処理に従って実行されることを特徴とする第２３項に記載の方法。
【００３２】
２５．  前記パケットを作成するステップは、前記判定ステップが否定的なとき、前記１つ以上のパラメータのそれぞれを含むように前記パケットを形成するステップをさらに含むことを特徴とする第２３項に記載の方法。
【００３３】
２６．  前記パケットを作成するステップは、前記判定ステップが否定的なとき、前記１つ以上のパラメータにそれぞれ関連付けられた前記パラメータインデックスをさらに含むように前記パケットを形成するステップをさらに含むことを特徴とする第２５項に記載の方法。
【００３４】
２７．  前記パケットを作成するステップは、
前記判定ステップが否定的なとき、パラメータインデックスが既に割り当てられた１つ以上のパラメータを特定するステップと、
前記１つ以上のパラメータにそれぞれ関連付けられた前記パラメータインデックスをさらに含むように前記パケットを形成するステップと
をさらに含むことを特徴とする第２５項に記載の方法。
【００３５】
２８．  前記パケットを形成すると、該パケットは、パラメータインデックスが既に割り当てられた前記１つ以上のパラメータのいずれも含まないことを特徴とする第２７項に記載の方法。
【００３６】
２９．  前記パケットを送出するステップは、通信ユニットの出力キューに前記パケットを位置させるステップを含むことを特徴とする第１項から第２８項のうち何れかに記載の方法。
【００３７】
３０．  前記リモートデバイスによる実行のための前記関数の識別子は、前記パラメータの少なくとも１つに符号化されることを特徴とする第２項及び第１６項から第２２項のうち何れかに記載の方法。
【００３８】
３１．  リモートデバイスに接続可能な装置であって、
前記リモートデバイスによる実行のための少なくとも１つの指示を取得するインタフェースと、
前記少なくとも１つの指示を表すパケットを作成し、前記インタフェースを介して、前記リモートデバイスに対して前記パケットを送出する処理ユニットと、
共有パケットディクショナリを含む記憶手段と
を備え、
前記パケットを作成するために、前記処理ユニットは、
前記共有パケットディクショナリを調べて、パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定し、
前記判定が肯定的なとき、前記パケットインデックスを含むように前記パケットを形成する
ように構成されることを特徴とする装置。
【００３９】
３２．  前記少なくとも１つの指示は、前記リモートデバイスによる実行のための関数の識別子と、該関数の実行に用いられるパラメータの組み合わせとを含むことを特徴とする第３１項に記載の装置。
【００４０】
３３．  パケットインデックスが前記少なくとも１つの指示に既に割り当てられたか否かを判定するために、前記処理ユニットは、
前記共有パケットディクショナリが、前記関数の識別子及び前記パラメータの組み合わせに対応するエントリを含むか否かを判定するように構成されることを特徴とする第３２項に記載の装置。
【００４１】
３４．  前記パケットを作成するために、前記処理ユニットは、
前記判定が肯定的なとき、前記関数の識別子又は前記パラメータの組み合わせ内の前記パラメータのいずれも含まないように前記パケットを形成するようにさらに構成されることを特徴とする第３２項に記載の装置。
【００４２】
３５．  前記処理ユニットは、前記少なくとも１つの指示を発行するアプリケーションを起動するようにさらに構成されることを特徴とする第３１項に記載の装置。
【００４３】
３６．  前記アプリケーションは、ビデオゲームを含み、前記少なくとも１つの指示は、前記ビデオゲームのゲーム画面のレンダリング指示であることを特徴とする第３５項に記載の装置。
【００４４】
３７．  前記記憶手段は、パラメータ組み合わせインデックステーブルをさらに備え、前記判定は第１判定であり、
前記パケットを作成するために、前記処理ユニットは、
前記第１判定が否定的なとき、前記パラメータ組み合わせインデックステーブルを調べて、パラメータ組み合わせインデックスが前記パラメータの組み合わせに既に割り当てられたか否かを第２判定し、
前記第２判定が肯定的なとき、前記パラメータ組み合わせインデックスを含むように前記パケットを形成する
ようにさらに構成されることを特徴とする第３２項に記載の装置。
【００４５】
３８．  前記パケットを作成するために、前記処理ユニットは、
前記第２判定が肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するようにさらに構成されることを特徴とする第３７項に記載の装置。
【００４６】
３９．  前記判定は、第１判定であり、前記記憶手段は、パラメータインデックステーブルを備え、
前記パケットを作成するために、前記処理ユニットは、前記第１判定が否定的なとき、
前記パラメータインデックステーブルを調べて、パラメータインデックスが前記パラメータの組み合わせ内の個別パラメータのそれぞれに既に割り当てられたか否かを第２判定し、
前記第２判定が肯定的なとき、前記パラメータの組み合わせ内の前記各パラメータのためのパラメータインデックスを含むように前記パケットを形成する
ようにさらに構成されることを特徴とする第３２項に記載の装置。
【００４７】
４０．  前記パケットを作成するために、前記処理ユニットは、前記第２判定ステップが肯定的なとき、前記パラメータのいずれも含まないように前記パケットを形成するようにさらに構成されることを特徴とする第３９項に記載の装置。
【００４８】
４１．  前記パケットを作成するために、前記処理ユニットは、前記第２判定ステップが肯定的なとき、
パラメータ組み合わせインデックスを前記パラメータの組み合わせに割り当て、
前記パラメータの組み合わせに関連付けて、前記パラメータ組み合わせインデックスを前記記憶手段に記憶する
ようにさらに構成されることを特徴とする第４０項に記載の装置。
【００４９】
４２．  前記パケットを作成するために、前記処理ユニットは、前記第２判定ステップが肯定的なとき、前記パラメータ組み合わせインデックスをさらに含むように前記パケットを形成するようにさらに構成されることを特徴とする第４１項に記載の装置。
【００５０】
４３．  前記記憶手段は、パラメータインデックステーブルを備え、
前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、
パラメータインデックスが以前に割り当てられていない１つ以上のパラメータを特定し、
前記１つ以上のパラメータのそれぞれに対して、各パラメータインデックスを割り当て、前記パラメータに関連付けて、前記パラメータインデックステーブルに前記各パラメータインデックスを記憶するようにさらに構成されることを特徴とする第３１項に記載の装置。
【００５１】
４４．  前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、前記１つ以上のパラメータのそれぞれを含むように前記パケットを形成するようにさらに構成されることを特徴とする第４１項に記載の装置。
【００５２】
４５．  前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、前記１つ以上のパラメータにそれぞれ関連付けられたパラメータインデックスをさらに含むように前記パケットを形成するようにさらに構成されることを特徴とする第４４項に記載の装置。
【００５３】
４６．  前記パケットを作成するために、前記処理ユニットは、前記判定が否定的なとき、
パラメータインデックスが既に割り当てられた１つ以上のパラメータを特定し、
前記１つ以上のパラメータにそれぞれ関連付けられた前記パラメータインデックスをさらに含むように前記パケットを形成する
ようにさらに構成されることを特徴とする第４４項に記載の装置。
【００５４】
４７．  前記パケットを形成すると、該パケットは、前記１つ以上のパラメータのいずれも含まないことを特徴とする第４６項に記載の装置。
【００５５】
４８．  前記インタフェースは、出力キューを備え、前記パケットは、該出力キューに位置することにより解放されることを特徴とする第３１項から第４７項のうち何れかに記載の装置。
【００５６】
４９．  前記リモートデバイスによる実行のための前記関数の識別子は、前記パラメータの少なくとも１つに符号化されることを特徴とする第３２項に記載の装置。
【００５７】
５０．  プライベートデータネットワークを介して前記リモートデバイスに接続されることを特徴とする第３１項に記載の装置。
【００５８】
５１．  第３１項から第４６項の何れかに記載の装置と、
第２装置と
を備える組み合わせであって、
前記第２装置は、
前記リモートデバイスによる実行のための少なくとも１つの第２指示の識別子を取得するインタフェースと、
前記少なくとも１つの第２指示を表す第２パケットを作成し、前記インタフェースを介して、前記リモートデバイスに対して該第２パケットを送出する処理ユニットと
を備え、
前記第２パケットを作成するために、前記処理ユニットは、
前記共有パケットディクショナリを調べて、パケットインデックスが前記少なくとも１つの第２指示に既に割り当てられたか否かを第２判定し、
前記第２判定が肯定的なとき、前記第２パケットインデックスを含むように前記第２パケットを形成するよう構成されることを特徴とする組み合わせ。
【００５９】
５２．  前記第１指示及び第２指示が同一であるとき、前記第１パケットインデックス及び第２パケットインデックスは同一であることを特徴とする第５１項に記載の組み合わせ。
【００６０】
５３．  前記第１指示は、第１関数の識別子と、該第１関数の実行に用いられるパラメータの第１組み合わせとを含み、前記第２指示は、第２関数の識別子と、該第２関数の実行に用いられるパラメータの第２組み合わせとを含むことを特徴とする第５１項に記載の組み合わせ。
【００６１】
５４．  前記第１パケットを作成するために、前記第１装置の処理エンティティは、前記第１判定が肯定的なとき、前記第２関数の識別子又は前記パラメータの第２組み合わせ内のパラメータのいずれも含まないように前記第２パケットを形成するようにさらに構成されることを特徴とする第５３項に記載の組み合わせ。
【００６２】
５５．  前記第２パケットを作成するために、前記第２装置の処理エンティティは、前記第２判定が肯定的なとき、前記第２関数の識別子又は前記パラメータの第２組み合わせ内のパラメータのいずれも含まないように前記第２パケットを形成するようにさらに構成されることを特徴とする第５４項に記載の組み合わせ。
【００６３】
５６．  前記第１装置及び前記第２装置は、クラウドゲーミングサーバ内に具現化されることを特徴とする第５１項から第５５項のうち何れかに記載の組み合わせ。
【００６４】
５７．  前記共有パケットディクショナリは、前記クラウドゲーミングサーバの一部であることを特徴とする第５６項に記載の組み合わせ。
【００６５】
５８．  前記共有パケットディクショナリは、記憶領域ネットワークを介して、前記第１装置及び前記第２装置にアクセス可能であることを特徴とする第５１項に記載の組み合わせ。
【００６６】
５９．  前記第１装置は、コンピュータネットワークを介して、前記第２装置に接続されることを特徴とする第５１項から第５８項のうち何れかに記載の組み合わせ。
【００６７】
６０．  前記第１装置は、データセンタにおいて前記第２装置に接続されることを特徴とする第５１項から第５８項のうち何れかに記載の組み合わせ。
【００６８】
６１．  ローカルデバイスの少なくとも１つのプロセッサによる実行のための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、該ローカルデバイスの少なくとも１つのプロセッサによる該指示の実行は、前記ローカルデバイスに以下のステップを含む方法を実行させ、
前記方法は、
リモートデバイスによる実行のための少なくとも１つのコマンドの識別子を取得するステップと、
前記少なくとも１つのコマンドを表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、パケットインデックスが前記少なくとも１つのコマンドに既に割り当てられたか否かを判定するステップと、
前記判定が肯定的なとき、前記パケットインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【００６９】
６２．  リモートデバイスに接続可能なローカルデバイスにより実行される方法であって、
前記リモートデバイスによる実行のための一連の指示を取得するステップと、
前記一連の指示を表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、シーケンスインデックスが前記一連の指示に既に割り当てられたか否かを判定するステップと、
前記判定ステップが肯定的なとき、前記シーケンスインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする方法。
【００７０】
６３．  前記パケットを作成するステップは、
前記判定ステップが否定的なとき、前記一連の指示における各指示のためにパケットを作成するステップと、
前記リモートデバイスに対して各パケットを送出するステップと
をさらに含むことを特徴とする第６２項に記載の方法。
【００７１】
６４．  リモートデバイスに接続可能な装置であって、
前記リモートデバイスによる実行のための一連の指示を取得するインタフェースと、
前記一連の指示を表すパケットを作成し、前記インタフェースを介して、前記リモートデバイスに対して前記パケットを送出する処理ユニットと、
シーケンスディクショナリを含む記憶手段と
を備え、
前記パケットを作成するために、前記処理ユニットは、
前記シーケンスディクショナリを調べて、シーケンスインデックスが前記一連の指示に既に割り当てられたか否かを判定し、
前記判定が肯定的なとき、前記パケットインデックスを含むように前記パケットを形成するよう構成されることを特徴とする装置。
【００７２】
６５．  ローカルデバイスの少なくとも１つのプロセッサによる実行のための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、該ローカルデバイスの少なくとも１つのプロセッサによる該指示の実行は、前記ローカルデバイスに以下のステップを含む方法を実行させ、
前記方法は、
前記リモートデバイスによる実行のための一連のコマンドを取得するステップと、
前記一連のコマンドを表すパケットを作成するステップと、
前記リモートデバイスに対して前記パケットを送出するステップと
を含み、
前記パケットを作成するステップは、
記憶手段を調べて、シーケンスインデックスが前記一連のコマンドに既に割り当てられたか否かを判定するステップと、
前記判定ステップが肯定的なとき、前記シーケンスインデックスを含むように前記パケットを形成するステップと
を含むことを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【００７３】
６６．  第１装置に接続可能な第２装置により実行される方法であって、
前記第１装置により位置されるリモート関数呼び出しに関連付けられたパケットインデックスを含むパケットを前記第１装置から取得するステップと、
前記パケットインデックスに基づくパケットディクショナリを調べて、前記リモート関数呼び出しに関連付けられた関数を特定するとともに、該リモート関数呼び出しに関連付けられたパラメータの組み合わせを決定するステップと、
前記パラメータの組み合わせ内の前記パラメータを用いて、前記関数を実行するステップと
を含むことを特徴とする方法。
【００７４】
６７．  前記リモート関数呼び出しに関連付けられた前記パラメータの組み合わせを決定するために、前記方法は、
前記パケットインデックスに基づく前記パケットディクショナリから、前記パラメータの組み合わせに関連付けられたパラメータインデックスの組み合わせを決定し、前記パラメータインデックスの組み合わせ内の前記パラメータインデックスに基づいて、パラメータインデックステーブルを調べて、前記パラメータの組み合わせ内のパラメータを決定するステップ
を含むことを特徴とする第６６項に記載の方法。
【００７５】
６８．  前記リモート関数呼び出しに関連付けられた関数を特定するために、前記方法は、
前記パケットインデックスに基づくパケットディクショナリから、少なくとも１つの関数インデックスを決定するとともに、前記関数インデックスに基づいて、関数テーブルを調べて、前記リモート関数呼び出しに関連付けられた関数を特定するステップを含むことを特徴とする第６６項に記載の方法。
【００７６】
６９．  １つ以上の先行するステップの間に、
前記リモート関数呼び出しに関連付けられた前記関数の身元（identity）を含むパケットを前記第１装置から取得するステップと、
前記関数インデックスに関連付けて、前記関数テーブル内に前記関数の身元を記憶するステップと
をさらに含むことを特徴とする第６８項に記載の方法。
【００７７】
７０．  前記１つ以上の先行するステップの間に、
前記リモート関数呼び出しに関連付けられた前記パラメータを含む少なくとも１つのパケットを前記第１装置から取得するステップと、
前記パラメータインデックスのそれぞれに関連付けて、前記パラメータインデックステーブル内に前記パラメータを記憶するステップと
をさらに含むことを特徴とする第６９項に記載の方法。
【００７８】
７１．  前記１つ以上の先行するステップの間に、
前記関数インデックスと、前記パラメータの組み合わせに関連付けられたパラメータインデックスの組み合わせとを含むパケットを前記第１装置から取得するステップと、
前記パケットインデックスに関連付けて、前記関数インデックス及び前記パラメータインデックスの組み合わせを前記パケットディクショナリに記憶するステップと
さらに含むことを特徴とする第７０項に記載の方法。
【００７９】
７２．  サーバの少なくとも１つのプロセッサによる実行のための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、前記サーバの少なくとも１つのプロセッサによる該指示の実行は、前記サーバに以下のステップを含む方法を実行させ、
前記方法は、
前記第１装置により位置されるリモート関数呼び出しに関連付けたパケットインデックスを含むパケットを、前記サーバに接続される計算装置から取得するステップと、
前記パケットインデックスに基づくパケットディクショナリを調べて、前記リモート関数呼び出しに関連付けられた関数を特定するとともに、該リモート関数呼び出しに関連付けられたパラメータの組み合わせを決定するステップと、
前記パラメータの組み合わせ内の前記パラメータを用いて前記関数を実行するステップと
を含むことを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【００８０】
７３．  第１装置に接続可能な第２装置により実行される方法であって、
前記第１装置に位置されるリモート関数呼び出しに関連付けられた複数のパラメータインデックスを少なくとも含むパケットを該第１装置から取得するステップと、
前記複数のパラメータインデックスに基づいて、パラメータインデックステーブルを調べて、前記リモート関数呼び出しに関連付けられたパラメータの組み合わせ内の複数のパラメータを決定するステップと、
前記リモート関数呼び出しに関連付けられた関数を特定するステップと、
前記パラメータの組み合わせ内の前記パラメータを用いて、前記第２装置において前記第１装置のための前記関数を実行するステップと
を含むことを特徴とする方法。
【００８１】
７４．  前記パケットは、関数インデックスを含み、
前記リモート関数呼び出しに関連付けられた関数を特定するステップは、前記関数インデックスに基づいて、関数テーブルを調べるステップを含むことを特徴とする第７３項に記載の方法。
【００８２】
７５．  前記関数インデックス及び前記パラメータインデックスの組み合わせに応じて、前記パケットディクショナリにパケットインデックスを記憶するステップをさらに含むことを特徴とする第７３項に記載の方法。
【００８３】
７６．  前記関数インデックス及び前記パラメータインデックスの組み合わせに前記パケットインデックスを割り当てるステップをさらに含み、
該割当ステップは、前記第１装置に公知の処理に従って実行されることを特徴とする第７５項に記載の方法。
【００８４】
７７．  第１装置に接続可能な第２装置により実行される方法であって、
前記第１装置により発行される一連の指示に関連付けられたシーケンスインデックスを含むパケットを該第１装置から取得するステップと、
前記シーケンスインデックスに基づくシーケンスディクショナリを調べて、一連のリモート手続き呼び出しにそれぞれ関連付けられた複数の関数を特定するとともに、各関数のために、各パラメータの組み合わせを決定するステップと、
前記各パラメータの組み合わせ内の前記パラメータを用いて、前記複数の関数を実行するステップと
を含むことを特徴とする方法。
【００８５】
７８．  オンラインゲーム機内のローカルデバイスの少なくとも１つのプロセッサにより実行するための指示を記憶する一時的ではないコンピュータに読み取り可能な媒体であって、
該ローカルデバイスの前記少なくとも１つのプロセッサによる前記指示の実行により、
ゲームの複数の参加者のゲーム状態を管理するためのゲーム状態管理処理と、
前記ゲーム状態管理処理により発行されるコマンドを取得する複数のローカルスタブであって、前記コマンドの所定の１つを取得するとき、前記ローカルスタブの所定の１つは、前記所定の指示に関連付けられたパケット識別子を見付けることを試みて、前記複数のローカルスタブ間で共有されるパケットディクショナリを調べるように構成され、パケット識別子を見付けると、前記ローカルスタブの該所定の１つは、前記ローカルデバイスから離れた装置における前記所定の指示のリモート実行のために、前記パケット識別子を含むパケットをリモートスタブに対して送出するよう構成される、前記複数のローカルスタブと
を実行させることを特徴とする一時的ではないコンピュータに読み取り可能な媒体。
【００８６】
７９．  前記ローカルデバイスは、中央サーバであり、前記リモートデバイスは、ＧＰＵを備えたレンダリングサーバであることを特徴とする第７８項に記載の一時的ではないコンピュータに読み取り可能な媒体。
【００８７】
８０．  前記少なくとも１つのプロセッサは、協働して前記ゲーム状態管理処理を実行する複数のプロセッサを含むことを特徴とする第７８項又は第７９項に記載の一時的ではないコンピュータに読み取り可能な媒体。
【００８８】
８１．  前記ローカルスタブは、前記ゲームの参加者にそれぞれ関連付けられていることを特徴とする第７８項から第８０項のうち何れかに記載の一時的ではないコンピュータに読み取り可能な媒体。
【００８９】
８２．  前記コマンドは、レンダリング指示を含むことを特徴とする第７８項から第８１項のうち何れかに記載の一時的ではないコンピュータに読み取り可能な媒体。
【００９０】
８３．  前記ローカルスタブの所定の１つは、前記リモートデバイスに対して前記パケットを送出したことに応じて、レンダリングされたゲームシーンを受信するように構成されることを特徴とする第７８項から第８２項のうち何れかに記載の一時的ではないコンピュータに読み取り可能な媒体。
【００９１】
８４．  リモートデバイスへの接続のためのインタフェースと、
ゲームの複数の参加者のゲーム状態を管理するために、ゲーム状態管理処理を実行する少なくとも１つのプロセッサと、
パケットディクショナリを記憶する記憶手段と
を備え、
前記少なくとも１つのプロセッサは、前記ゲーム状態管理処理により発行される指示を取得するための複数のローカルスタブを実行し、所定組の指示を取得するとき、前記ローカルスタブの所定の１つは、前記所定組の指示に関連付けられたパケット識別子を見付けることを試みて、前記複数のローカルスタブ間で共有される前記パケットディクショナリを調べるよう構成され、パケット識別子を見付けると、前記ローカルスタブの前記所定の１つは、前記所定組の指示のリモート実行のために、前記インタフェースを介して前記パケット識別子を含むパケットを前記リモートデバイスに対して送出するよう構成されることを特徴とする計算装置。
【００９２】
８５．  中央サーバにより実現される計算装置であって、前記リモートデバイスは、ＧＰＵを備えた少なくとも１つのレンダリングサーバを含むことを特徴とする第８４項に記載の計算装置。
【００９３】
８６．  前記少なくとも１つのプロセッサは、協働して前記ゲーム状態管理処理を実行する複数のプロセッサを含むことを特徴とする第８４項又は第８５項に記載の計算装置。
【００９４】
８７．  前記ローカルスタブは、前記ゲームの参加者にそれぞれ関連付けられることを特徴とする第８４項から第８６項のうち何れかに記載の計算装置。
【００９５】
８８．  前記コマンドは、レンダリング指示であることを特徴とする第８４項から第８７項のうち何れかに記載の計算装置。
【００９６】
８９．  前記ローカルスタブの所定の１つは、前記リモートデバイスに対して前記パケットを送出したことに応じて、レンダリングされたゲームシーンを受信するよう構成されることを特徴とする第８４項から第８８項のうち何れかに記載の計算装置。
【００９７】
９０．  ビデオゲームの少なくとも１人の参加者のためにゲーム状態管理処理を実行し、ネットワークを介して、該少なくとも１人の参加者に関連付けられた少なくとも１つの装置から受信した入力に基づいて、該ビデオゲームの状態を調整するゲーム状態サーバと、
前記少なくとも１人の参加者のためのゲーム画面をレンダリングし、前記ネットワークを介して、前記少なくとも１人の参加者に前記ゲーム画面を送信させるレンダリングサーバであって、前記ゲーム状態サーバにより圧縮され、該レンダリングサーバに送信され、該レンダリングサーバにより解凍されるレンダリングコマンドに基づく前記レンダリングを実行するレンダリングサーバと
を備えることを特徴とするサーバシステム。
【００９８】
９１．  前記ゲーム状態サーバから前記レンダリングサーバに前記圧縮レンダリングコマンドを送信する第２ネットワークをさらに含むことを特徴とする第９０項に記載のサーバシステム。
【００９９】
９２．  前記第２ネットワークは、低遅延（低遅延）プライベートデータネットワークを備えることを特徴とする第９１項に記載のサーバシステム。
【０１００】
９３．  前記レンダリングコマンドを圧縮するために、前記ゲーム状態サーバは、一組のレンダリングコマンドを取得し、前記一組のレンダリング指示を表すパケットが前記レンダリングサーバに以前に送信されたか否かを判定しようと試みてパケットディクショナリを調べ、該試みが成功すると、前記パケットのインデックスを前記レンダリングサーバに送信するように構成されることを特徴とする第９０項から第９２項のうち何れかに記載のサーバシステム。
【０１０１】
本発明のこれらの及び他の態様及び特徴は、添付図面に関連して、本発明の特定の実施形態の以下の記述をレビューすることにより、当業者にとって明らかになるであろう。
【図面の簡単な説明】
【０１０２】
【図１】非限定的な実施形態における、中央サーバと、レンダリングサーバとを含むシステムのブロック図である。
【図２】非限定的な実施形態における中央サーバの種々の機能モジュールを示すブロック図である。
【図３】非限定的な実施形態におけるレンダリングサーバの種々の機能モジュールを示すブロック図である。
【図４】中央サーバにより実行されるゲーム状態管理処理のステップを示すフローチャートである。
【図５Ａ】クライアント装置から受信するプレイヤキャラクタ入力情報のデータ構造を示す。
【図５Ｂ】中央サーバで実行されるゲーム状態管理処理により発行されるレンダリング指示のデータ構造を示す。
【図６】非限定的な例示の実施形態における、それに関わるリモート手続き呼び出し及び機能エンティティを概念的に示す。
【図７Ａ】本発明の非限定的な実施形態における、マーシャリング処理のステップを代表するフローチャートである。
【図７Ｂ】本発明の非限定的な実施形態における、関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリを含むマーシャリング処理に用いられる種々のマッピングを示す。
【図７Ｃ】本発明のいくつかの非限定的な実施形態において用いられるパラメータ組み合わせインデックステーブルを示す。
【図７Ｄ】本発明の別の非限定的な実施形態による図７Ａの変形例である。
【図８Ａ】本発明の非限定的な実施形態における、３つの例示指示の１番目を処理するための関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリの状態を概念的に示す。
【図８Ｂ】本発明の非限定的な実施形態における、結果として生じるパケットと同様に、第１指示を処理した後の関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリの状態を概念的に示す。
【図８Ｃ】本発明の非限定的な実施形態における、結果として生じるパケットと同様に、３つの例示指示の２番目を処理した後の関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリの状態を概念的に示す。
【図８Ｄ】本発明の非限定的な実施形態における、３つの例示指示の３番目を処理したことにより生じるパケットを概念的に示す。
【図９Ａ】本発明の非限定的な実施形態における、アンマーシャリング処理のステップを代表するフローチャートである。
【図９Ｂ】本発明の非限定的な実施形態における、関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリを含むアンマーシャリング処理に用いられる種々のマッピングを示す。
【図９Ｃ】本発明のいくつかの非限定的な実施形態において用いられ得るパラメータ組み合わせインデックステーブルを示す。
【図９Ｄ】本発明の別の非限定的な実施形態における図９Ａの変形例である。
【図１０Ａ】本発明の非限定的な実施形態における、第１受信パケットを処理する前の関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリの状態を概念的に示す。
【図１０Ｂ】本発明の非限定的な実施形態における、第１受信パケットを処理した後の関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリの状態を概念的に示す。
【図１０Ｃ】本発明の非限定的な実施形態における、第２受信パケットを処理した後の関数インデックステーブル、パラメータインデックステーブル及びパケットディクショナリの状態を概念的に示す。
【図１１Ａ】本発明の非限定的な実施形態における、指示のシーケンスを処理するためのマーシャリング処理におけるステップを代表するフローチャートである。
【図１１Ｂ】本発明の非限定的な実施形態における、図１１Ａのマーシャリング処理に用いられるシーケンスディクショナリを示す。
【図１２Ａ】本発明の非限定的な実施形態における、シーケンス毎に３つの指示の３例シーケンスの一番目を処理する前の、関数インデックステーブル、パラメータインデックステーブル、パケットディクショナリ及びシーケンスディクショナリの状態を概念的に示す。
【図１２Ｂ】本発明の非限定的な実施形態における、結果として生じるパケットと同様に、３つの指示の第１例シーケンスを処理した後の、関数インデックステーブル、パラメータインデックステーブル、パケットディクショナリ及びシーケンスディクショナリの状態を概念的に示す。
【図１２Ｃ】本発明の非限定的な実施形態における、結果として生じるパケットと同様に、３つの指示の第２例シーケンスを処理した後の、関数インデックステーブル、パラメータインデックステーブル、パケットディクショナリ及びシーケンスディクショナリの状態を概念的に示す。
【図１３】本発明の非限定的な実施形態における、指示の３例シーケンスの三番目を処理することにより生じるパケットを概念的に示す。
【図１４Ａ】共通の装置上で実施される複数のローカルスタブが独立してそれらのためのマッピングセットを保持するアーキテクチャを概念的に示すブロック図である。
【図１４Ｂ】共通の装置上で実施される複数のローカルスタブが共通セットのマッピングを共有するアーキテクチャを概念的に示すブロック図である。
【図１５】多数の装置上で実施される複数のローカルスタブが共通セットのマッピングを共有するアーキテクチャを概念的に示すブロック図である。  明細書及び図面は、本発明のある実施形態の例示の目的のみのためであり、理解への支援であることを明確に理解すべきである。それらは、本発明の限定の定義を意図するものではない。
【発明を実施するための形態】
【０１０３】
ａ．［クラウドベースアーキテクチャ］
図１は、本発明の一実施形態におけるクラウドコンピューティングアーキテクチャ１０を示す。クラウドコンピューティングアーキテクチャ１０は、１つ以上のクライアント装置３００ａ〜３００ｅにサービスを提供するためのサーバシステムを含む。以下の記述では、表現「クライアント装置３００」（あるいは「複数のクライアント装置３００」）は、他の方法で特定しない場合には、クライアント装置３００ａ〜３００ｅのいずれか又はすべてをいう。非限定的な実施形態では、クラウドコンピューティングアーキテクチャ１０は、ビデオゲームアーキテクチャであり、サーバシステムにより提供される「サービス」は、シングルプレイヤゲームやマルチプレイヤビデオゲームであればよい。ビデオゲームは、貨幣利得の可能性でプレイされるゲーム（ギャンブル）と同様に、エンターテインメントのために純粋にプレイされるゲームを含むことを理解されたい。
【０１０４】
いくつかの実施形態では、クライアント装置３００の１つ以上は、例えば、パーソナルコンピュータ、家庭ゲーム機（ＸＢＯＸ（登録商標）、ＰＳ３（登録商標）、Ｗｉｉ（登録商標）などのコンソール）、あるいは、携帯ゲーム機とすることができる。他の実施形態では、クライアント装置３００の１つ以上は、携帯電話、ＰＤＡもしくはタブレット（例えば、ｉＰａｄ（登録商標））などの通信・計算装置であってもよい。クライアント装置３００は、タッチスクリーン、キーボード、ゲームコントローラ、ジョイスティックなどの入力装置を備え、クライアント装置３００のユーザが入力を提供し、ゲームに参加することを可能にする。他の実施形態では、クライアント装置３００の所定の１つのユーザは、体動を作り出し、外部オブジェクトを振ってもよく、これらの移動は、カメラや他のセンサ（例えば、Ｋｉｎｅｃｔ（登録商標））により検出されるが、クライアント装置内で動作するソフトウェアは、ユーザがクライアント装置への入力を提供しようとしたか否かを正確に推測しようと試み、もしそうならば、そのような入力の本質である。
【０１０５】
非限定的な一実施形態では、サーバシステムは、中央サーバ２００と、レンダリングサーバ１００とを備える。しかしながら、他の非限定的な実施形態では、サーバシステムは、クラスタ毎に１つ以上のサーバの１つ以上の集まりを備えてもよい。中央サーバ２００やレンダリングサーバ１００などのサーバシステム内のサーバは、例えば、専用ネットワーク、データセンタ、もしくは仮想プライベートネットワーク（ＶＰＮ）などのネットワーク４５０を介して通信可能である。ネットワーク４５０は、理想的に低遅延ネットワークであればよい。
【０１０６】
中央サーバ２００（「ゲーム状態サーバ」という場合もある）は、クライアント装置３００ａ〜３００ｅから入力信号２０を受信する。入力信号２０は、公衆データネットワーク（例えば、インターネット）やプライベートＩＰネットワークなどのネットワーク４００を介して、バックチャネルを通して種々のクライアント装置３００ａ〜３００ｅから受信することができる。入力信号２０は、ユーザ動作を検出するクライアント装置３００ａ〜３００ｅの結果であればよく、あるいは、クライアント装置３００ａ〜３００ｅ自体により自動的に生成され得る。所定のクライアント装置からの入力信号２０は、クライアント装置のユーザが、制御下のキャラクタを移動させ、ジャンプさせ、キックさせ、回転させ、揺り動かせ、引っ張らせ、握らせることなどを望むことを伝えることができる。その代わりに、あるいは、それに加えて、所定のクライアント装置からの入力信号２０は、クライアント装置のユーザが、特定のカメラ視野（例えば、一人称又は三人称）を選択することを望むことを伝えることができる。
【０１０７】
レンダリングサーバ１００は、中央サーバ２００から受信したコマンド／指示に基づいて、クライアント装置３００ａ〜３００ｅのためのゲーム画面をレンダリングするために構成される。ネットワーク４５０を介してパケット４０の形式で、中央サーバ２００からレンダリングサーバ１００にこれらのコマンドを送信することができる。レンダリングされたゲーム画面を含む出力信号３０は、レンダリングサーバ１００によって、インターネットなどのネットワーク４００を介してクライアント装置３００に分配される。いくつかの実施形態では、ネットワーク４００を介して、中央サーバ２００とレンダリングサーバ１００との間に、低遅延、高帯域幅チャネルを確立することができればよい。その場合、ネットワーク４５０、４００は、同じ物理的リソースを利用することができるであろう。他の実施形態では、ネットワーク４５０、４００は、別々のネットワークであり、別々の物理的パスを横断する。
【０１０８】
ゲームにおける異なるクライアント装置３００の位置、カメラアングル及び他のゲームパラメータに依存して、該異なるクライアント装置３００のために異なるゲーム画面を作成する。クライアント装置３００がゲーム画面を表示するためのレンダリング機能性を必要としないという事実は、興味深い。すなわち、各クライアント装置３００は、入力を検出するためのユーザインタフェースを含むとともに、受信され、レンダリングされたゲーム画面を表示するための表示装置を備える（あるいは、接続可能である）装置であればよい。ゲーム画面を生成することがビデオストリームを検出する処理により使用されるよりも多くのハードウェアリソースを使用するので、現システムによって、レンダリングサーバ１００からクライアント装置３００に既にレンダリングされたゲーム画面を送信することにより、クライアント装置３００のレンダリング性能とは無関係に、ユーザがゲームに参加することができる。
【０１０９】
ｂ．［中央サーバ］
図２を参照して、本実施形態の中央サーバ２００を構成する種々の機能モジュールを説明する。中央ＣＰＵ２０１は、中央サーバ２００の各モジュールの動作を制御する。より詳細には、中央ＣＰＵ２０１は、例えば、中央ＲＯＭ２０２や中央記憶媒体２０４からプログラム指示を読み出す。中央ＣＰＵ２０１は、中央ＲＡＭ２０３内にプログラム指示を展開し、プログラムを実行する。それにより、「ゲーム状態管理処理」を実行するとともに、中央サーバ２００内の種々の他のモジュールの動作を制御する。
【０１１０】
中央ＲＯＭ２０２は、例えば、プログラム可能な不揮発性メモリであればよい。中央ＲＯＭ２０２は、ゲーム状態管理処理のためのプログラム指示を記憶するとともに、他のプログラム指示を記憶してもよい。また、中央ＲＯＭ２０２は、中央サーバ２００の各モジュールの動作に要求されるデータなどの情報を記憶する。
【０１１１】
中央ＲＡＭ２０３は、揮発性メモリであればよい。中央ＲＡＭ２０３は、ゲーム状態管理処理操作プログラムのための拡張領域として用いられるだけでなく、例えば、中央サーバ２００の他のモジュールの動作中に出力される中間データを一時的に記憶するための記憶領域としても用いられる。
【０１１２】
中央記憶媒体２０４は、例えば、中央サーバ２００に着脱可能なＨＤＤなどの大容量記憶装置であればよい。本実施形態では、中央記憶媒体２０４は、例えば、ゲームに関わる参加者を管理するためのデータベースや、ゲーム上の種々の情報を管理するためのデータベースとして用いられる。それらのデータベースは、ゲームの各参加者に提供すべきゲーム画面を生成するのに必要とされる。
【０１１３】
中央通信ユニット２０５は、中央サーバ２００の通信インタフェースである。中央通信ユニット２０５は、ネットワーク４００を介して、クライアント装置３００から入力信号２０を受信する。また、中央通信ユニット２０５は、ネットワーク４５０を介して、パケット４０をレンダリングサーバ１００に送信する。必要又は適当であるとき、中央通信ユニット２０５は、種々の通信仕様に適合するデータフォーマットにデータを変換すればよい。
【０１１４】
当然のことながら、本明細書で用いられるように、用語「参加者」は、「プレイヤ」と「傍観者」の両者をいう。ここで、「プレイヤ」は、ゲームプレイ中いくつかの制御を発揮させる、典型的に割り当てられたキャラクタであり、「傍観者」は、ゲームプレイ上制御されることなく、自分の選んだ位置からプレイヤの動作を典型的に見ることができる。
【０１１５】
ｃ．［レンダリングサーバ］
図３は、非限定的な実施形態における、レンダリングサーバ１００の種々の機能モジュールを示すブロック図である。ＣＰＵ１０１は、レンダリングサーバ１００の種々のモジュールの動作を制御する。より詳細には、ＣＰＵ１０１は、ＲＯＭ１０２又は記憶媒体１０４に記憶されたプログラム指示を読み出し、該プログラム指示をＲＡＭ１０３上に展開し、プログラムを実行する。それにより、「レンダリング制御処理」を実行するとともに、各モジュールの動作を制御する。
【０１１６】
ＲＯＭ１０２は、例えば、プログラム可能な不揮発性メモリである。ＲＯＭ１０２は、レンダリング制御処理用のプログラム指示、他のプログラム指示、及び、レンダリングサーバ１００の各モジュールの動作に必要なデータなどの情報を記憶する。
【０１１７】
ＲＡＭ１０３は、揮発性メモリであればよい。ＲＡＭ１０３は、操作プログラム拡張領域としてだけでなく、例えば、レンダリングサーバ１００の各モジュールの動作中に出力される中間データを一時的に記憶する記憶領域としても利用される。記憶媒体１０４は、例えば、レンダリングサーバ１００に着脱可能なＨＤＤなどの大容量記憶装置であればよい。
【０１１８】
通信ユニット１１３は、レンダリングサーバ１００の通信インタフェースである。通信ユニット１１３は、他の装置とデータを交換する。例えば、通信ユニット１１３は、ネットワーク４５０を介して、中央サーバ２００からパケット４０を受信する。通信ユニット１１３は、ネットワーク４５０を介して受信したデータをレンダリングサーバ１００で読み取り可能な任意のデータフォーマットに変換し、例えば、ＲＡＭ１０３内にそのデータを一時的に記憶する。さらに、通信ユニット１１３は、ネットワーク４００を介して、レンダリングされたゲーム画面をクライアント装置３００に送信する。（クライアント装置３００の１つなどの）送信先装置にデータを送信するとき、通信ユニット１１３は、ネットワーク４００又は送信先装置に適合するデータ送信フォーマットに該データを転換し、送信先装置にそのデータを送信する。
【０１１９】
ｄ．［グラフィック処理ユニット］
クライアント装置３００に提供すべきゲーム画面は、レンダリングサーバ１００内のもしくはレンダリングサーバ１００にアクセス可能な１つ以上のグラフィック処理ユニット（ＧＰＵ）１０５により生成される。各ＧＰＵ１０５は、ゲーム画面のレンダリング領域を提供するビデオメモリ１０９（例えば、ＶＲＡＭ）に接続される。接続されたＶＲＡＭ１０９上でレンダリングを実行するとき、各ＧＰＵ１０５は、キャッシュメモリ（図示せず）にオブジェクトを展開し、マッピングされたオブジェクトを対応するＶＲＡＭ１０９に書き込む。本実施形態では、１つのビデオメモリ１０９が１つのＧＰＵ１０５に接続されているが、本発明はこれに限定されないことに注意されたい。すなわち、ＧＰＵ１０５に接続されたビデオメモリ１０９の数は、任意の数であればよい。
【０１２０】
（動作するＧＰＵの数に関連し得る）処理能力に応じて、レンダリングサーバ１００は、複数の参加者のための複数のゲーム画面を同時に生成することが可能であってもよいことを理解されたい。ＧＰＵ１０５は、レンダリング指示（「レンダリングコマンド」ともいう）を提供することにより制御される。フレーム毎の三角形、線もしくは点を描画するために、あるいは、ＧＰＵ１０５上で高並列操作を開始するために、ＧＰＵ１０５との相互作用は、低レベルＡＰＩを通して達成することができる。低レベルＡＰＩは、コヒーレント抽象化（coherent abstraction）で異なるＧＰＵ実行を隠す。低レベルＡＰＩの１つの非限定的な例は、ワシントン州レドモンドにあるマイクロソフト社（Microsoft Corporation）から利用可能なDirect3D（登録商標）である。概して、レンダリングコマンドをＧＰＵに供給することは、ＧＰＵにより実行すべき関数を呼び出すことを意味する。
【０１２１】
特定のオブジェクトをレンダリングするのに用いられるレンダリングコマンドの一部であり得る詳細なデータの例は、モデルデータ、テクスチャデータ、使用すべきレンダリングプログラム（例えば、シェーダ）のアイデンティティ（identity）、及びレンダリングプログラムにより利用される計算用データ（例えば、光源強度、光源ベクトル、回転行列）の１つ以上を含めばよい。もちろん、レンダリングコマンドは、あるオブジェクトをレンダリングする処理に用いられる他の情報を含んでもよい。
【０１２２】
特定の参加者のためのゲーム画面のレンダリングは、数百、数千のレンダリング指示の実行を要求してもよい。特定の参加者のために一度ゲーム画面をレンダリングすると、ゲーム画面は、レンダリングサーバ１００によって、特定の参加者に関連付けられたクライアント装置３００に供給される。このように、本実施形態のシステム１０は、各参加者のために、毎秒数回（例えば、３０又は６０回）の割合で種々のクライアント装置３００において提供される入力に対応するゲーム画面を生成することができる。これらのゲーム画面は、各参加者のクライアント装置３００の表示装置を介して、対応する参加者に対して表示される。この割合で、人間の目は、動きの流動性を知覚するであろう。
【０１２３】
非限定的な本実施形態のシステム１０は、１つのレンダリングサーバ１００と、１つの中央サーバ２００とを含むが、本発明は、この特定の配列に限定されない。例えば、１つのレンダリングサーバ１００を複数の中央サーバ２００に割り当てたり、複数のレンダリングサーバ１００を複数の中央サーバ２００に割り当てたりすることができる。また、中央サーバ２００は、レンダリングサーバ１００又はレンダリングサーバ１００の各ＧＰＵにより同時に生成されるゲーム画面数を示す情報に応じて、レンダリング指示を実行するのに用いられるレンダリングサーバ１００又はレンダリングサーバ１００のＧＰＵを指定することができる。
【０１２４】
ｅ．［ゲーム状態管理処理］
以下、図４に示すフローチャートを参照して、中央サーバ２００によるゲーム状態管理処理の実施の非限定的な例を説明する。その参加者のクライアント装置３００が中央サーバ２００に接続するとき、所定の参加者のためのゲーム状態管理処理が生み出される。所定の参加者のためのゲーム状態管理処理は、各フレームのために、すなわち、毎秒数回（例えば、３０あるいは６０回）実行されるメインループを含む。メインループの一部として、中央サーバ２００は、クライアント装置３００を介して参加者入力２０を受信し（ステップＳ４０１）、ゲーム状態情報を修正し（ステップＳ４０３）、所定の参加者のための「ゲーム画面」内のオブジェクトを決定し（ステップＳ４０４）、ＧＰＵ１０５に対する関数呼び出しを生成する（ステップＳ４０５）。これについてはここでより詳細に説明する。
【０１２５】
ゲーム状態管理処理の実行では、中央サーバ２００は、複数のプレイヤにより操作される複数のキャラクタに関する情報（マップ上のキャラクタの位置や方向など）を管理するとともに、各キャラクタ及びゲーム全体に関連付けられたイベントも管理する。例えば、所定のプレイヤが自身のクライアント装置３００に入力を提供するとき、この情報は、ネットワーク４００を介して中央サーバ２００に送信される。中央サーバ２００は、ゲーム状態管理処理の実行中、所定のプレイヤのキャラクタに関する情報を更新する。また、ゲーム状態管理処理の一部として、中央サーバ２００は、レンダリングサーバ１００に各参加者のためのゲーム画面を生成させる。具体的には、中央サーバ２００は、各参加者のために１つ以上のオブジェクトをゲーム画面上でレンダリングすべきと判定し、一組のレンダリング指示（場合により、フレーム毎に数千の）をレンダリングサーバ１００に送信する。
【０１２６】
ここで、ステップＳ４０１については、所定の参加者に関連付けられたクライアント装置３００から入力情報が受信されてもよく、１つ以上の他のプレイヤ又は傍観者に関連付けられたクライアント装置３００から入力情報が受信されてもよい。入力情報は、プレイヤ又は傍観者が、クライアント装置を介して自身のキャラクタの動作を実行したことを示してもよい。入力情報は、その非限定的な例を図５Ａに示すデータ構造を有してもよい。例えば、データ構造は、プレイヤや傍観者による操作が実行されたクライアント装置の識別子（例えば、ＩＰアドレスやユーザ識別情報）、大きさ及び方向を含む移動情報、選択された動作の識別情報、ゲーム画面のレンダリング範囲（例えば、カメラパラメータ）、及びクライアント装置に接続される表示装置の表示設定（例えば、画面表示解像度や色数）の１つ以上を含めばよい。中央サーバ２００により受信される入力情報のデータ構造が前述に限定されないことに注意されたい。
【０１２７】
非限定的な一実施形態では、入力情報は、プレイヤや傍観者によりクライアント装置３００上で影響を与える操作を数値／パラメータに変換することによって得られる一組の数値であればよい。他の実施形態では、入力情報は、クライアント装置３００により検出される入力信号（例えば、プレイヤや傍観者によるボタンなどの押下に応答して）を含んでもよい。その場合、中央ＣＰＵ２０１により、受信したクライアント装置３００のタイプの関数として、数値／パラメータへの変換処理を実行することができる。
【０１２８】
ステップＳ４０３において、プレイヤキャラクタ、ノンプレイヤキャラクタ及び他のグラフィック要素の更新を実行する。他のグラフィック要素の例は、地形などの背景オブジェクトを含む。レンダリングすべきオブジェクトは、ゲームのルールに従って、あるいは、対応するプレイヤに制御されるようなキャラクタの行動により、時間とともに変化することができる。
【０１２９】
したがって、要約すると、中央ＣＰＵ２０１は、入力情報、クロック情報又は他の情報により影響されたゲーム内の各キャラクタやグラフィック要素に対応する状態情報を中央記憶媒体２０４から読み出す。キャラクタ状態情報の場合には、これは、例えば、マップ上のキャラクタの位置（座標情報）、キャラクタの凝視方向やキャラクタの行動などの、プレイヤの操作により変更可能なキャラクタの外見や特性に関する情報を含めばよい。入力情報に基づいて、キャラクタに関するパラメータを更新する。したがって、プレイヤにより実行される行動をゲーム内のキャラクタに反映することができる。
【０１３０】
ステップＳ４０４において、所定の参加者のために、「ゲーム画面のレンダリング範囲」内のオブジェクトを決定する。ゲーム画面のレンダリング範囲は、その参加者のためのゲーム画面に含まれる一組のオブジェクトの境界を定める（例えば、２次元又は３次元の）一組の座標を含むことができる。所定の参加者のためのゲーム画面に含まれるオブジェクトは、参加者によって異なるであろう。
【０１３１】
より詳細には、中央ＣＰＵ２０１は、所定の参加者のクライアント装置３００のために、ゲーム画面のレンダリング範囲を中央記憶媒体２０４から読み出す。ゲーム画面のレンダリング範囲は、例えば、ゲーム画面に対応するカメラパラメータを含む。中央ＣＰＵ２０１は、カメラパラメータを参照し、ゲーム画面内に含まれるレンダリングオブジェクトとして、その状態情報がカメラのレンダリング範囲内に含まれる座標情報を含むキャラクタなどのレンダリングオブジェクトを特定する。ある識別子がレンダリングすべき各オブジェクトに割り当てられるとともに、中央ＣＰＵ２０１は、オブジェクト識別子をクライアント装置識別子に関連付け、中央記憶媒体２０４にその情報を記録することに注意されたい。
【０１３２】
ステップＳ４０５において、ゲーム状態管理処理は、所定の参加者のゲーム画面内のオブジェクトをレンダリングするために、レンダリング指示を生成する。図５Ｂにおけるデータ構造により示すように、特定のクライアント装置３００のためにゲーム状態管理処理により発行されたレンダリング指示は、ゲーム画面内に含まれる各オブジェクトの識別子、ゲーム画面内に含まれる各オブジェクトに関する詳細な情報、ゲーム画面内に含まれる各オブジェクトに関する状態情報、及び、ゲーム画面のレンダリング範囲や表示設定に関する情報のうち、１つ以上を含めばよい。
【０１３３】
例えば、該ゲームが、カメラ位置が変化しないままのゲーム、もしくは、固定表示解像度を有するゲームであるならば、カメラパラメータや表示設定などのゲーム画面のレンダリング範囲を示す情報は、レンダリング指示に含まれる必要がないことに注意されたい。
【０１３４】
ｆ．［リモート手続き呼び出し］
中央サーバ２００の中央ＣＰＵ２０１により実行されるゲーム状態管理処理のステップＳ４０５において生成されたレンダリング指示が、レンダリングサーバ１００上にある複数のＧＰＵ１０５の１つ以上に送られる予定の関数呼び出しとして発行されることに注意されたい。これは、リモート手続き呼び出しにより達成することができ、それにより、ローカルデバイス（中央サーバ２００）は、リモートデバイス（レンダリングサーバ１００）において１つ以上の関数を呼び出す。そのようなリモート手続き呼び出しは、各クライアント装置３００のために、フレーム毎に数百あるいは数千回実行される。
【０１３５】
図６は、非限定的な例の実施形態における、それに関わるリモート手続き呼び出し及び機能エンティティを概念的に示す。図６を参照して、ローカルスタブ６２０を提供する。ローカルスタブ６２０は、１つ以上のレンダリング指示６１０を発行すると、ゲーム状態管理処理により黙示的又は明示的に起動されるソフトウェアルーチン／手続きとして具現化することができる。例えば、ゲーム状態管理処理は、ＯＳＩモデルの第１レベル（例えば、アプリケーションレイヤ）で動作してもよいのに対して、ローカルスタブ６２０は、ＯＳＩモデルのより低いレベル（例えば、プレゼンテーションレイヤ）で動作してもよい。１つ以上のレンダリング指示６１０がステップＳ４０５において発行され、その関連データがスタック上に押し出されるとき、これは、ローカルスタブ６２０により認識される。その代わりに、オペレーティングシステムにより、ローカルスタブ６２０を起動することができる。
【０１３６】
ローカルスタブ６２０は、１つ以上のレンダリング指示６１０に関連付けられたデータを組み立ててパケット６３０にし、パケット６３０を送信するために、低レベルシステム呼び出しをなす。レンダリング指示に関連付けられたデータを組み立ててパケット６３０をなすことを「マーシャリング」という。これは、さらに詳細に後述する。中央サーバ２００のオペレーティングシステムは、中央サーバ２００（「ローカル」デバイスとみなすことができる）からのパケット６３０をレンダリングサーバ１００（「リモート」デバイスとみなすことができる）に向かってネットワーク４５０に送出する。
【０１３７】
レンダリングサーバ１００において、レンダリングサーバ１００のオペレーティングシステムは、入力パケット６４０（その内容は、パケット６３０の内容と同一であってもよい）をリモートスタブ６５０に渡す。リモートスタブ６５０は、ＣＰＵ１０１上で起動するレンダリング制御処理の一部である。リモートスタブ６５０は、パケット６４０からパラメータを分解する。パラメータの分解を「アンマーシャリング」という。これは、さらに詳細に後述する。これにより、再構築した１つ以上のレンダリング指示６３０をもたらす。最終的に、リモートスタブ６５０は、レンダリングサーバ１００上のＧＰＵ１０５にレンダリング指示を送信する。この目的を達成するために、リモートスタブ６５０は、レンダリング指示に対応する種々のＡＰＩ呼び出しを局所的になす。
【０１３８】
レンダリングサーバ１００上で所定の参加者のための完全なゲーム画面をレンダリングしたとき、レンダリング制御処理は、その参加者に対応するクライアント装置３００にレンダリングされたゲーム画面を送信する。ゲーム画面は、ネットワーク４００を介してクライアント装置３００に配信するのに適したフォーマットに符号化することができるビデオ（video）フレームを含んでもよい。また、ビデオフレームは、制御情報を含む他の情報と同様に、音声（audio）を含んでもよい。
【０１３９】
いくつかの場合には、所定の参加者のために、ゲーム状態管理処理により発行された一連のレンダリング指示内で、これらのレンダリング指示のいくつかが同様または同一である場合であればよい。同様のことは、リモート手続き呼び出しを引き起こす他の指示にも当てはまる。本発明のいくつかの非限定的な実施形態に従って、リモート手続き呼び出しを圧縮し、あるいは要約することにより、該リモート手続き呼び出しをより合理化することができる。具体的には、ローカルスタブ６２０は、要約したパケット４０の生成をもたらすマーシャリング処理を実行するように特に構成することができる。レンダリングサーバ側では、リモートスタブ６５０は、要約された受信パケットを展開するためのアンマーシャリング処理を実行するように特に構成することができる。
【０１４０】
ｇ．［マーシャリング］
非限定的な一実施形態では、中央サーバ２００内のローカルスタブ６２０は、マーシャリング処理を実行する。概して、マーシャリング処理の一部として、リモートデバイスが実行すべき指示を取得する。これに伴って、その指示を示すパケットを作成し、リモートデバイスに向けて送出する。パケットの作成は、記憶手段を調べて、「パケットインデックス」が既にその指示に割り当てられたか否かを判定することを含む。この場合には、パケットが該パケットインデックスを含むように、パケットを形成する。該指示を符号化するよりも、パケットインデックスを符号化するのに必要なビットが少ないので、マーシャリング処理により生成されたパケットは、それらが繰り返し同じ指示を表すとき、要約される傾向があるだろう。
【０１４１】
図７Ａを参照する。図７Ａは、本発明の非限定的な実施形態における、リモートデバイスに送信すべき要約パケットを生成するためのマーシャリング処理のステップを代表するフローチャートを示す。ステップＳ７１０において、指示を受信する。非限定的な例では、指示は、アプリケーションレイヤにおいてゲーム状態管理処理により発行されるレンダリング指示であればよい。当業者は、多くの方法でその指示をフォーマットすることができることを評価するであろう。例えば、指示は、Functioncall (Param1, Param2, Param, data)などの関数呼び出しとしてフォーマットされればよい。
【０１４２】
その指示が、「関数識別子」（Functioncall）と、「パラメータ」の組み合わせ（Param1、Param2、Param3）とを少なくとも含むことが分かるだろう。関数識別子は、リモートデバイス（例えば、レンダリングサーバ１００）により遠隔で実行される関数を表す。関数識別子（Functioncall）は、要約可能であると考えられる。これは、リモートデバイスにより実行すべき関数を符号化するために、マーシャリング処理が関数識別子よりもむしろ関数インデックスを用いるのに都合がよいことを意味する。これは、同じ関数を符号化するのにわずかなビットが用いられることをもたらすであろう。
【０１４３】
パラメータの組み合わせ（Param1、Param2、Param3）は、要約可能であるとも考えられる関数項を表す。これは、関数項を表すために、マーシャリング処理がパラメータ自身よりもむしろパラメータインデックスを用いるのに都合がよいだろうことを意味する。要約可能な関数項の例は、ポインタ、アドレス及び変数の名前を含む。
【０１４４】
任意に、指示は、要約可能であると考えられない関数項（例えば、データ）も含むことができる。要約可能であると考えられる関数項と、要約可能であると考えられない関数項との間の区別は、異なる実施形態では異なってもよい。例えば、いくつかの実施形態では、ポインタにより取得される値、アドレス及び変数は、要約可能であると考えられるのに、他の実施形態では、これらの同じ値は要約可能と考えられないであろう。
【０１４５】
図７Ｂを参照すると、関数インデックステーブル７９０と、パラメータインデックステーブル７９２とが示される。関数インデックステーブル７９０は、関数識別子を関数インデックスにそれぞれ関連付けるものであり、受信した関数識別子に基づいてアクセスされる。同様に、パラメータインデックステーブル７９２は、パラメータをパラメータインデックスにそれぞれ関連付けるものであり、受信したパラメータに基づいてアクセスされる。さらに、パケットディクショナリ７９４を示す。パケットディクショナリ７９４は、パラメータの特定の組み合わせを意味する特定の関数呼び出しをパケットインデックスにそれぞれ関連付ける。すなわち、パケットディクショナリ７９４の各エントリ（入力）は、関数識別子及びパラメータの組み合わせを特定のパケットインデックスに関連付ける。パケットディクショナリ７９４にリストアップされるであろうパラメータの組み合わせ内にパラメータＮの最大数があればよい。
【０１４６】
非限定的な一実施形態では、関数インデックステーブル７９０、パラメータインデックステーブル７９２及びパケットディクショナリ７９４は、中央ＲＡＭ２０３又は中央記憶媒体２０４内に保持されるデータベースとして実装されればよい。別の非限定的な実施形態では、関数インデックステーブル７９０、パラメータインデックステーブル７９２及びパケットディクショナリ７９４を外部記憶装置上に保持することができる。外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０又はネットワーク４００を介して、中央サーバ２００にアクセス可能である。さらに他の可能性は、当業者にとって明白であろう。
【０１４７】
ステップＳ７２０において、パケットディクショナリ７９４をチェックする。特に、関数識別子及びパラメータの組み合わせ（すなわち、順序集合）の現在のセットは、パケットディクショナリ７９４のエントリと比較され、パケットディクショナリ７９４が関数識別子及びパラメータの組み合わせの現在のセットのためのパケットインデックスを含むか否かを判定する。その回答が肯定的であるならば、これは、同じ関数及び同じ組み合わせを表すパケットが既に作成され、リモートデバイス（例えば、レンダリングサーバ１００）に送信されたことを示すであろう。その場合、マーシャリング処理は、ステップＳ７４０に移行する。ステップＳ７４０では、パケットディクショナリ７９４から既存のパケットインデックスを検索し、パケットがそのパケットインデックスを含むように、パケットを形成する。さらに、要約可能であると考えられない関数項（例えば、データのある形式）が、そのパケットに付加されてもよい。
【０１４８】
そして、マーシャリング処理は、ステップＳ７５０に移行する。ステップＳ７５０では、ネットワーク４５０を介して、新しく作成したパケットをリモートデバイス（例えば、レンダリングサーバ１００）に送信する。また、パケットは、ネットワーク４５０を介した送信に適するであろうあらゆる必要なヘッダや他の情報も含む。例えば、関数識別子又はパラメータ自身よりもむしろパケットインデックスを伝送するリモートデバイスに警告するような方法でパケットをフォーマットしてもよい。
【０１４９】
しかしながら、ステップＳ７２０において、パケットディクショナリ７９４が関数識別子とパラメータの組み合わせの現在のセットのためのパケットインデックスを含まないと判定したならば、マーシャリング処理は、ステップＳ７６０に移行する。ステップＳ７６０において、関数インデックステーブル７９０及びパラメータインデックステーブル７９２をチェックする。特に、関数インデックステーブル７９０が関数識別子のための関数インデックスを含むか否かを判定する。その回答が肯定的であるならば、これは、異なるパラメータで（あるいは、同じパラメータであるが、異なる順序である）あるが、同じ関数が過去に呼び出されたことを示すであろう。また、パラメータインデックステーブル７９２がパラメータの１つ以上用のパラメータインデックスを含むか否かを判定する。その回答が所定のパラメータに対して肯定的であるならば、これは、所定のパラメータが過去の関数呼び出しの一部であったことを示すであろう。したがって、ステップＳ７６５において、以前に割り当てられた関数インデックスやパラメータインデックスを検索する。
【０１５０】
そして、マーシャリング処理は、ステップＳ７７０に移行する。ステップＳ７７０では、ステップＳ７６５において検索された、いずれかの以前に割り当てられた関数インデックスやパラメータインデックスをパケットが含むように、そのパケットを形成する。さらに、要約可能と考えられる関数項は、そのパケットに添付されてもよい。
【０１５１】
ステップＳ７６５において検索された関数インデックスがないならば、そのパケットに完全な関数識別子を用いる。さらに、ステップＳ７７５において、関数インデックステーブル７９０内に関数識別子のためのエントリを作成し、その関数識別子に関数インデックスを割り当て、それに関連して、その関数インデックスを記憶する。関数識別子への関数インデックスの割り当ては、ローカルデバイスとリモートデバイスの両者に公知の関数インデックス割当アルゴリズムに従って進められればよい。この場合には、関数識別子に割り当てられた関数インデックスをリモートデバイスに報知する必要はない。なぜならば、リモートデバイスは、ローカルデバイスとして、同じ関数インデックス割当アルゴリズムを実行することにより、関数インデックスを得ることができる。しかしながら、関数インデックス割当アルゴリズムがローカルデバイスとリモートデバイスの両者に公知ではないならば、完全な関数識別子だけでなく、それに関連付けられた関数インデックスもそのパケット内に含むことが望ましいかもしれない。
【０１５２】
同様に、パラメータの少なくとも１つのために、ステップＳ７６５において検索されたパラメータインデックスがないならば、そのパケットに完全なパラメータを用いる。さらに、ステップＳ７８０において、パラメータインデックステーブル７９２内にそのような各パラメータのためのエントリを作成し、そのパラメータにパラメータインデックスを割り当て、このパラメータインデックスをそれに関連付けて記憶する。パラメータへのパラメータインデックスの割り当ては、ローカルデバイスとリモートデバイスの両者に公知のパラメータインデックス割当アルゴリズムに従って進められればよい。この場合には、所定のパラメータに割り当てられたパラメータインデックスをリモートデバイスに報知する必要はない。なぜならば、リモートデバイスは、ローカルデバイスと同じパラメータインデックス割当アルゴリズムを実行することにより、パラメータインデックスを導き出すことができる。しかしながら、パラメータインデックス割当アルゴリズムがリモートデバイスに公知でないならば、パケット内に完全なパラメータを含むとき、それに関連付けられたパラメータインデックスも含むことが望ましいかもしれない。
【０１５３】
マーシャリング処理は、さらにステップＳ７５０を実行する。ステップＳ７５０では、パケットは、ネットワーク４５０を介してリモートデバイス（例えば、レンダリングサーバ１００）に送信される。これは、中央通信ユニット２０５の出力キュー内にそのパケットを配置することにより、行うことができる。また、パケットは、ネットワーク４５０を介した送信のために該パケットを適切にさせるであろうあらゆる必要なヘッダ又は他の情報を含む。
【０１５４】
関数インデックステーブル７９０及びパラメータインデックステーブル７９２内のエントリの作成（すなわち、ステップＳ７７５及びＳ７８０の実行）は、ステップＳ７５０の実行の前後あるいは実行中に起こり得ることを理解されたい。
【０１５５】
ｈ．［マーシャリング（例）］
以下の３つの連続する指示：Functioncall_1 (Param1, Param2, Param3)、Functioncall_2 (Param3, Param4)、Functioncall_1 (Param1, Param2, Param3)から３つのパケットを作成するマーシャリング処理の動作を例示するために、記述例を提供する。
【０１５６】
第１指示及び第３指示が同じ関数識別子Functioncall_1及び同じ関数項Param1、Param2及びParam3を利用することを留意すべきであろう。すべての関数項が要約可能であり、したがって、「パラメータ」として適していると想定する。しかしながら、この想定は、容易化のためにのみなされ、各実施形態の場合において必要ではない。
【０１５７】
図８Ａは、第１指示Functioncall_1 (Param1, Param2, Param3)の受信もしくは処理の前のパケットディクショナリ７９４、関数インデックステーブル７９０及びパラメータインデックステーブル７９２の状態を示す。まさに、パケットディクショナリ７９４、関数インデックステーブル７９０及びパラメータインデックステーブル７９２のすべては空である。
【０１５８】
ここで、前述の第１、第２及び第３指示でそれぞれ実行されるように、マーシャリング処理の３つの反復を検討する。マーシャリング処理の第１反復は、ステップＳ７１０において開始し、それにより、第１指示Functioncall_1 (Param1, Param2, Param3)を受信する。関数識別子は、Functioncall_1であり、パラメータの組み合わせ（順序集合（順序付けされたセット））は、Param1、Param2、Param3である。ステップＳ７２０において、パケットディクショナリ７９４を調べ、現在の関数識別子（Functioncall_1）及び現在のパラメータ（Param1、Param2、Param3）の組み合わせのためのパケットディクショナリ７９４内にエントリがないか否かを判定する。次に、ステップＳ７６０において、関数インデックステーブル７９０及びパラメータインデックステーブル７９２をチェックする。また、これらも空であると、したがって、マーシャリング処理は、ステップＳ７７０に続く。これにより、パケットの作成を結果として生じる。図８Ｂに示すように、パケットの作成は、関数識別子Functioncall_1と、パラメータParam1、Param2及びParam3とを含む８１０に示される。その順序は保存される。
【０１５９】
ステップＳ７７０の前後あるいはその途中に実行されてもよいステップＳ７７５において、関数識別子Functioncall_1のために、関数インデックステーブル７９０内にエントリ８１２を作成し、関数インデックス0x1は、関数識別子Functioncall_1に割り当てられるとともに、新たに作成したエントリ８１２内に記憶される。さらに、パラメータインデックステーブル７９２内にParam1、Param2及びParam3のそれぞれのために３つのエントリ８１４、８１６、８１８を作成し、パラメータインデックス0x1、0x2及び0x3は、それぞれ新たに作成したエントリ８１４、８１６、８１８に記憶したパラメータParam1、Param2及びParam3に割り当てられる。さらに、ステップＳ７７０の前後あるいはその処理中に実行されてもよいステップＳ７８０において、パケットインデックス0x1が割り当たられたパラメータの組み合わせParam1、Param2、Param3とともに、関数識別子Functioncall_1のためのパケットディクショナリ７９４内に新しいエントリ８２０を作成する。
【０１６０】
ステップＳ７５０において、パケット８１０は、リモートデバイスに向けて送出される。任意に、図示しないが、パケットインデックス0x1は、パケット８１０に含まれてもよいが、関数インデックス0x1は、関数識別子Functioncall_1に添付してもよく、パラメータインデックス0x1、0x2及び0x3は、パケット８１０内のパラメータParam1、Param2及びParam3に添付してもよい。この追加の情報を提供することは、特に、リモートデバイスが、パケットインデックス、関数インデックス及びパラメータインデックスを生成するためにローカルデバイスにより用いられるアルゴリズム／プロセスを知らないとき、パケットディクショナリ７９４、関数インデックステーブル７９０及びパラメータインデックステーブル７９２自身のバージョンをリモートデバイスが再現するのを支援するかもしれない。
【０１６１】
マーシャリング処理の第２反復は、ステップＳ７１０において開始し、それにより、第２指示Functioncall_2 (Param3, Param4)を受信する。関数識別子は、Functioncall_2であり、パラメータの組み合わせ（順序集合）は、Param3、Param4である。ステップＳ７２０において、パケットディクショナリ７９４を調べ、現在の関数識別子及びパラメータの組み合わせに対するパケットディクショナリ７９４へのエントリがないか否かを判定する。次に、ステップＳ７６０において、関数インデックステーブル７９０及びパラメータインデックステーブル７９２をチェックする。関数インデックステーブル７９０は、関数識別子Functioncall_2のためのエントリを含まない。しかしながら、パラメータインデックステーブル７９２は、パラメータParam4のためのエントリを含まないが、パラメータParam3のためのエントリを含む。したがって、マーシャリング処理は、ステップＳ７６５に移行する。ステップＳ７６５では、パラメータParam3に従って、パラメータインデックス0x3を検索する。
【０１６２】
図８Ｃを参照して、マーシャリング処理は、ステップＳ７７０に続く。ステップＳ７７０では、パケット８３０を作成するとともに、パケット８３０は、関数識別子Functioncall_2、パラメータインデックス0x3（パラメータParam3の代わりに）及びパラメータParam4を含む。パラメータを伝達するフィールドとパラメータインデックスを伝達するフィールドとを識別するために、パケット８３０内にフラグを挿入してもよい。ステップＳ７７０の前後あるいはその途中に実行されてもよいステップＳ７７５において、関数識別子Functioncall_2のための関数インデックステーブル７９０内にエントリ８３２を作成するとともに、関数識別子Functioncall_2に関数インデックス0x2を割り当て、新たに作成したエントリ８３２内に関数インデックス0x2を記憶する。さらに、Param4のためのパラメータインデックステーブル７９２内にエントリ８３４を作成するとともに、パラメータインデックス0x4をそれに割り当て、新たに作成したエントリ８３４内にパラメータインデックス0x4を記憶する。さらに、ステップＳ７７０の前後あるいはその途中に実行されてもよいステップＳ７８０において、パケットインデックス0x2が割り当てられるパラメータの組み合わせParam3、Param4とともに、関数識別子Functioncall_2のためのパケットディクショナリ７９４内に新しいエントリ８３６を作成する。
【０１６３】
ステップＳ７５０において、リモートデバイスに対してパケット８３０を送出する。任意に、図示しないが、パケットインデックス0x2は、パケット８３０に含まれていてもよく、関数インデックス0x2は、関数識別子Functioncall_2に添付してもよく、パラメータインデックス0x4は、パケット８３０内のパラメータParam4に添付してもよい。この追加の情報は、パケットディクショナリ７９４、関数インデックステーブル７９０及びパラメータインデックステーブル７９２自身のバージョンをリモートデバイスが再現するのを支援するかもしれない。
【０１６４】
パケット８３０がパラメータParam3の代わりにパラメータインデックス0x3を含むので、パケット８３０は、完全に拡張された（要約されていない）形式でパラメータParam3を含んだものよりもその長さが短いことに注意されたい。すなわち、パケット８３０は要約される。これは、送信に時間が掛からず、ネットワーク４５０を通して帯域幅をほとんど消費しないことを意味する。このように、送信効率は、現在のマーシャリング処理の結果として増加する。
【０１６５】
さらに、送信したパケット数が増加するにつれて、送信効率が増加する。これは、マーシャリング処理の第３反復を考慮することにより証明された。マーシャリング処理の第３反復は、第３指示Functioncall_1 (Param1, Param2, Param3)を受信すると、ステップＳ７１０において開始する。関数識別子は、Functioncall_1であり、パラメータの組み合わせ（順序集合）は、Param1、Param2、Param3である。ステップＳ７２０において、パケットディクショナリ７９４を調べる。マーシャリング処理の第１反復に関連してステップＳ７８０のより早い実行のおかげで、現在の関数識別子及びパラメータの組み合わせのためのパケットディクショナリ７９４内にエントリを作成したであろう。具体的には、これはエントリ８１２である。エントリ８１２は、パケットインデックス0x1を関数識別子Functioncall_1とパラメータの組み合わせParam1、Param2、Param3とに関連付ける。
【０１６６】
このように、マーシャリング処理は、ステップＳ７４０に移行する。ステップＳ７４０では、パケットインデックス0x1を検索し、パケットインデックス0x1を含むパケット８４０（図８Ｄ参照）の作成を結果として生じる。ステップＳ７５０において、リモートデバイスに向けてパケット８４０を送出する。パケット８４０により伝達されているものが、関数識別子、関数インデックス、パラメータあるいはパラメータインデックスよりもむしろパケットインデックスであることを示唆するために、パケット８４０内にフラグを挿入してもよい。
【０１６７】
パケット８４０が関数識別子Functioncall_1やパラメータParam1、Param2、Param3のいずれか、あるいは、パラメータインデックス0x1、0x2、0x3の代わりに、パケットインデックス0x1を含むので、パケット８４０は、前述の情報を含んだものよりもその長さが短いことに注意されたい。すなわち、パケット８４０は要約される。これは、送信に時間が掛からず、ネットワーク４５０を通して帯域幅をほとんど消費しないことを意味する。このように、送信効率は、現在のマーシャリング処理の結果として増加する。
【０１６８】
異なる関数が同じパラメータの組み合わせを呼び出すならば、送信効率における更なる改良を提供することができる。上述のマーシャリング処理では、そのパラメータインデックスにより各パラメータを表すことによりいくつかの効率を得るのに対し、正しい順序でパラメータインデックスを送信する必要がまだある。
【０１６９】
したがって、上述のマーシャリング処理の変形例では、図７Ｃを参照して、パラメータ組み合わせインデックステーブル７９６が提供されてもよい。パラメータ組み合わせインデックステーブル７９６は、パラメータの組み合わせをパラメータ組み合わせインデックスにそれぞれ関連付ける。すなわち、パラメータ組み合わせインデックステーブル７９６への各エントリは、パラメータの順序集合を特定のコード（「パラメータ組み合わせインデックス」）に関連付ける。非限定的な一実施形態では、パラメータ組み合わせインデックステーブル７９６は、中央ＲＡＭ２０３又は中央記憶媒体２０４内に保持されるデータベースとして実施されてもよい。別の非限定的な実施形態では、パラメータ組み合わせインデックステーブル７９６を外部記憶装置上に保持することができる。その外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０又はネットワーク４００を介して中央サーバ２００にアクセス可能である。
【０１７０】
マーシャリング処理がパラメータ組み合わせインデックステーブル７９６を利用するために、ステップＳ７６０に修正がなされる。具体的には、ステップＳ７６０は、関数インデックステーブル７９０及びパラメータ組み合わせインデックステーブル７９６をチェックするように修正されるであろう。このように、過去に既に呼び出されていたならば、関数インデックステーブル７９０が関数識別子のための関数インデックスを含むと判定するのみならず、異なる関数を用いるにもかかわらず、現在のパラメータの組み合わせが過去に呼び出されたならば、パラメータ組み合わせインデックステーブル７９６がパラメータ組み合わせインデックスを含むと判定するだろう。したがって、ステップＳ７６５において、利用可能な関数インデックスやパラメータ組み合わせインデックスを検索するだろう。もちろん、現在のパラメータの組み合わせのためのパラメータ組み合わせインデックステーブル７９６内にエントリがないならば、パラメータのいずれかが過去に関数呼び出しの一部であったか否かが分かるために上述したように、パラメータインデックステーブル７９２をまだチェックすることができる。
【０１７１】
さらに、ステップＳ７６０において、パラメータ組み合わせインデックステーブル７９６内にエントリがないと判定した場合、パラメータ組み合わせインデックステーブル７９６内に現在のパラメータの組み合わせのための新しいエントリを作成し、パラメータ組み合わせインデックスがこのパラメータの組み合わせに割り当てられるとともに、それに関連付けて記憶されるように、ステップＳ７７５が修正されるであろう。現在のパラメータの組み合わせへのパラメータ組み合わせインデックスの割り当ては、ローカルデバイスとリモートデバイスの両者に公知のパラメータ組み合わせインデックス割当アルゴリズムに従って進められればよい。そして、この場合には、現在のパラメータの組み合わせに割り当てられたパラメータ組み合わせインデックスをリモートデバイスに報知する必要はない。なぜならば、リモートデバイスは、同じパラメータ組み合わせインデックス割当アルゴリズムを並列に実行することにより、パラメータ組み合わせインデックスを得ることができるからである。しかしながら、パラメータ組み合わせインデックス割当アルゴリズムがリモートデバイスにとって公知ではないならば、現在のパラメータの組み合わせに関連付けられたパラメータ組み合わせインデックスを送信されたパケット内に含むことが望ましいかもしれない。
【０１７２】
更なる変形例では、ゲーム状態管理処理により発行され、ローカルスタブ６２０により受信される指示は、一般的関数識別子を含んでもよいが、パラメータ間に関数の詳細を部分的に埋め込むことができる。例えば、以下の指示のシーケンスを考慮する：
Functioncall (Function1, Param1, Param2, Param3)；
Functioncall (Function2, Param4, Param5, Param6)。
【０１７３】
たとえ関数識別子が同じ（すなわち、Functioncall）であっても、呼び出される実際の関数は異なり、関数項の形式を取ることが分かるだろう。そのような場合には、「パラメータの組み合わせ」は、呼び出される関数の数を特定する少なくとも１つのパラメータを含む。別の言い方をすれば、この変形例では、関数識別子は、あらゆる他のパラメータと全く変わりはないと考えられる。
【０１７４】
上記変形例を適応させるために、関数インデックステーブル７９０は、パラメータインデックステーブル７９２内に効果的に組み込まれるであろう。したがって、図７Ａのフローチャートは、図７Ｄの修正版として再現される。図７Ｄでは、ステップ番号の隣の文字「Ｄ」は、図７Ａに関連したそのステップの修正版を示す。具体的には、ステップＳ７６０Ｄは、パラメータインデックステーブル７９２の考慮を含むが、「関数インデックステーブル」の考慮を含まないことが分かる。また、「関数インデックス」への参照は、ステップＳ７７０Ｄ及びＳ７７５Ｄにおいて省略された。
【０１７５】
ｉ．［アンマーシャリング］
リモートデバイスにおいて、ネットワーク４５０を介して受信したパケットにアンマーシャリング処理を実行する。レンダリングサーバ１００内のリモートスタブ６５０により、アンマーシャリング処理を実行することができる。しかしながら、図７Ａを参照して前述されたようなマーシャリング処理を施されたパケットを受信するいずれのエンティティによっても、アンマーシャリング処理を実行することができることを理解されたい。
【０１７６】
ここで、図９Ｂを参照して、リモートデバイス（例えば、レンダリングサーバ１００）が、関数インデックステーブル９９０、パラメータインデックステーブル９９２及びパケットディクショナリ９９４を保持することを想定する。適切に構築されると、これらのエンティティは、ローカルデバイス（例えば、中央サーバ２００）により保持される関数インデックステーブル７９０、パラメータインデックステーブル７９２及びパケットディクショナリ７９４と同様であろう。しかしながら、関数インデックステーブル９９０、パラメータインデックステーブル９９２及びパケットディクショナリ９９４内のエントリは、別にアクセスされる。例えば、関数インデックスを関数識別子にそれぞれ関連付ける関数インデックステーブル９９０は、受信した関数インデックスに基づいてアクセスされ、パラメータインデックスをパラメータにそれぞれ関連付けるパラメータインデックステーブル９９２は、受信したパラメータインデックスに基づいてアクセスされ、複数のパケットインデックスのそれぞれを特定の関数識別子及びパラメータの組み合わせに関連付けるパケットディクショナリ９９４は、受信したパケットインデックスに基づいてアクセスされる。
【０１７７】
非限定的な一実施形態では、関数インデックステーブル９９０、パラメータインデックステーブル９９２及びパケットディクショナリ９９４は、レンダリングサーバ１００のＲＡＭ１０３又は記憶媒体１０４内に保持されるデータベースとして実現されてもよい。別の非限定的な実施形態では、関数インデックステーブル９９０、パラメータインデックステーブル９９２及びパケットディクショナリ９９４を外部記憶装置上に保持することができる。その外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０又はネットワーク４００を介してレンダリングサーバ１００にアクセス可能である。
【０１７８】
ここで、図９Ａを参照する。図９Ａは、本発明の非限定的な実施形態におけるアンマーシャリング処理を表すフローチャートを示す。
【０１７９】
ステップＳ９１０において、パケットを受信する。ネットワーク４５０を介してローカルデバイス（例えば、中央サーバ２００）からパケットを受信することができる。ローカルデバイスは、パケットを作成するステップの責任を負うローカルスタブ６２０を例示化する。ステップＳ９１５において、受信したパケットがパケットインデックスを含むか否かを判定する。本実施形態では、受信したパケットがパケットインデックスを含むとき、該パケットは対応する関数識別子又はパラメータの組み合わせを含まず、受信したパケットが対応する関数識別子又はパラメータの組み合わせを含むとき、該パケットはパケットインデックスを含まないと考えられる。そのような一実施形態では、受信したパケットにおけるパケットインデックスの存在は、ローカルデバイスにより同一のパケット（すなわち、同じ関数及びパラメータを表す）が以前に作成され、リモートデバイスに送信されたことを示唆する。
【０１８０】
このように、受信したパケットがパケットインデックスを含むことをステップＳ９１０が示すならば、アンマーシャリング処理は、ステップＳ９２０に移行する。ステップＳ９２０では、パケットインデックスに基づいて、パケットディクショナリ９９４を調べる。このようにして、対応する関数識別子及びパラメータの組み合わせをパケットディクショナリ９９４から取得し、アンマーシャリング処理は、ステップＳ９３０に移行する。ステップＳ９３０において、関数識別子により識別された関数は、（適当な組み合わせ内の）検索したパラメータを独立変数として用いて、リモートデバイス上で局所的に呼び出される。例えば、レンダリングサーバ１００により、ゲーム画面をレンダリングすることができる。（反対方向へのリモート手続き呼び出しを介して）レンダリングされたゲーム画面を中央サーバ２００に分配することもでき、あるいは、レンダリング指示が実行された参加者に直接分配することもできる。
【０１８１】
しかしながら、受信したパケットがパケットインデックスを含まないならば、これは、受信したパケットが以前に受信されていなかったことを示唆し、アンマーシャリング処理は、ステップＳ９４０に移行する。現時点では、特に要求されていない順に、一連のテストを実施することができる。また、これらのテストは、並列に実施されてもよい。まず、受信したパケットが関数インデックスと関数識別子とのいずれか一方を含むか否かを確認（検証）することができる。受信したパケットが関数インデックスを含む場合にはアンマーシャリング処理は、ステップＳ９４２に移行する。ステップＳ９４２では、関数インデックスに基づいて、関数インデックステーブル９９０を調べる。このようにして、対応する関数識別子を関数インデックステーブル９９０から取得する。受信したパケットが関数識別子を含む場合には、アンマーシャリング処理は、ステップＳ９４４に移行する。ステップＳ９４４では、関数インデックスを関数識別子に割り当て、関数インデックステーブル９９０内にエントリを作成する。この関数インデックステーブル９９０は、関数インデックスと関数識別子とを関連付ける。関数識別子への関数インデックスの割り当ては、マーシャリング処理の実行中ローカルデバイスに用いられたと想定される関数インデックス割当アルゴリズムに従って進められればよい。
【０１８２】
ステップＳ９５０において、受信したパケットが１つ以上のパラメータインデックスを含むか否かを確認することができる。肯定の場合には、アンマーシャリング処理は、ステップＳ９５２に移行する。ステップＳ９５２では、パラメータインデックス又はインデックスを基づいて、パラメータインデックステーブル９９２を調べる。その結果、パラメータインデックステーブル９９２から対応する複数のパラメータ（あるいは、場合により、１つの対応するパラメータ）を検索する。ステップ９５４において、受信したパケットがパラメータインデックスよりもむしろ１つ以上のパラメータを含むか否かを確認することができる。肯定の場合には、アンマーシャリング処理は、ステップＳ９５６に移行する。ステップＳ９５６では、パラメータインデックスをそのような各パラメータに割り当て、そのような各パラメータのためのパラメータインデックステーブル９９２内にエントリを作成する。これにより、新しく割り当てられたパラメータインデックスとそのような各パラメータとを関連付ける。パラメータへのパラメータインデックスの割り当ては、マーシャリング処理の実行中ローカルデバイスにより用いられたと想定されるパラメータインデックス割当アルゴリズムに従って進められればよい。
【０１８３】
ステップＳ９５８において、受信したパケットに含まれていた関数識別子及びパラメータの組み合わせ、あるいは、関数インデックステーブル９９０やパラメータインデックステーブル９９２から検索された関数識別子及びパラメータの組み合わせに、パケットインデックスを割り当てる。関数識別子及びパラメータの組み合わせへのパケットインデックスの割り当ては、マーシャリング処理の実行中ローカルデバイスにより用いられたと想定されるパケットインデックス割当アルゴリズムに従って進められればよい。
【０１８４】
上記実施形態では、受信したパケット（ステップＳ９１０参照）がパケットインデックスを含むとき、該受信したパケットが対応する関数識別子又はパラメータの組み合わせを含まず、逆もまた同様であることと考えられた。そのような一実施形態では、受信したパケット内のパケットインデックスの存在は、全く同じパケットが以前に受信されたことを示唆する。このように、パケットディクショナリ９９４は、その全く同じパケットインデックスを既に追加されていた。一方、関数識別子及びパラメータの組み合わせの以前未確認のセットを受信するとき、パケットディクショナリ９９４は、新しいパケットインデックスに追加されるであろう。この新しいパケットインデックスは、パケットインデックス割当アルゴリズム（ステップＳ９５６参照）に従って割り当てられる。しかしながら、これは、すべての実施形態における場合である必要はない。実際、いくつかの実施形態では、関数識別子及びパラメータの組み合わせの以前未確認のセットを初めて受信するのは、それ自身の割り当て前のパケットインデックス（例えば、マーシャリング処理の実行中にローカルデバイスにより割り当てられ、リモートデバイスに送信されるもの）を伴ってもよい。そのような場合には、パケットディクショナリ９９４は、受信したパケットインデックスを関数識別子とパラメータの組み合わせとの受信したセットに関連付けるであろう。
【０１８５】
また、当然のことながら、リモートデバイスにより保持される関数インデックステーブル９９０、パラメータインデックステーブル９９２及びパケットディクショナリ９９４が、ローカルデバイスにより保持される関数インデックステーブル７９０、パラメータインデックステーブル７９２及びパケットディクショナリ７９４と同一であるとき、ローカルデバイスは、これらのオブジェクトをリモートデバイスと共有し、それらと同期し続けることができてもよい。そのようなアプローチは、ローカルデバイス及びリモートデバイス上に同じオブジェクトを２倍投入する必要がないので、アンマーシャリング処理を単純化するかもしれない。ローカルデバイスとリモートデバイスとの共有は、例えば、ネットワーク４５０を介して、関数インデックステーブル９９０、パラメータインデックステーブル９９２及びパケットディクショナリ９９４をリモートデバイスとローカルデバイスの両者にアクセス可能にすることにより達成することができる。
【０１８６】
ｊ．［アンマーシャリング（例）］
ここで、前述のマーシャリング処理を用いて作成された３つの受信パケット８１０、８３０及び８４０を処理するためのアンマーシャリング処理の動作を例示するために、記述例を提供する。図８Ｂ〜図８Ｄから、ローカルデバイスからリモートデバイスに送信されたパケット８１０、８３０及び８４０が以下の情報を含むことを思い出すことができる：
パケット８１０の内容：
関数識別子：  （Functioncall_1）；
パラメータ：  （Param1、Param2、Param3）；
パケット８３０の内容：
関数識別子：  （Functioncall_2）；
パラメータインデックス：  0x3；
パラメータ：  Param4；
パケット８４０の内容：
パケットインデックス：  0x1。
【０１８７】
図１０Ａは、パケット８１０の受信又は処理の前の、パケットディクショナリ９９４、関数インデックステーブル９９０及びパラメータインデックステーブル９９２の状態を示す。まさに、パケットディクショナリ９９４、関数インデックステーブル９９０及びパラメータインデックステーブル９９２のすべてが空である。
【０１８８】
ここで、パケット８１０、８３０及び８４０にそれぞれ実行されるようなアンマーシャリング処理の３つの反復を検討する。アンマーシャリング処理の第１反復は、ステップＳ９１０において開始し、それにより、パケット８１０を受信する。関数識別子がFunctioncall_1であり、パラメータの組み合わせ（順序集合）がParam1、Param2、Param3である。ステップＳ９２０は、パケット８１０に含まれるパケットインデックスがないことを明らかにし、したがって、アンマーシャリング処理は、ステップＳ９４０に移行する。
【０１８９】
ステップＳ９４０において、パケット８１０がある関数識別子又は関数インデックスを特定するか否かをチェックする。パケット８１０が関数識別子Functioncall_1を特定するので、したがって、図１０Ｂを追加で参照して、アンマーシャリング処理は、ステップＳ９４４に移行する。これにより、関数識別子Functioncall_1のために、関数インデックステーブル９９０内にエントリ１０１２を作成し、（マーシャリング処理と同じアルゴリズムを用いて）関数インデックス0x1を関数識別子Functioncall_1に割り当てるとともに、新たに作成したエントリ１０１２に記憶する。
【０１９０】
ステップＳ９５０において、パケット８１０が少なくとも１つのパラメータインデックスを含むか否かをチェックする。パケット８１０がパラメータのみを含み、パラメータインデックスを含まないので、アンマーシャリング処理は、ステップＳ９５４に移行する。ステップＳ９５４において、パケット８１０が少なくとも１つのパラメータを含むか否かをチェックする。実際にこの場合には、アンマーシャリング処理は、ステップＳ９５６に移行し、それにより、パラメータインデックステーブル９９２内に、それぞれParam1、Param2及びParam3のための３つの新しいエントリ１０１４、１０１６、１０１８を作成し、パラメータインデックス0x1、0x2及び0x3は、（マーシャリング処理と同じアルゴリズムを用いて）パラメータParam1、Param2及びParam3に割り当てられるとともに、それぞれ新たに作成したエントリ１０１４、１０１６、１０１８内に記憶される。
【０１９１】
ステップＳ９５８において、パラメータの組み合わせParam1、Param2、Param3とともに、関数識別子Functioncall_1のためのパケットディクショナリ９９４内に新しいエントリ１０２０を作成する。パケットインデックス0x1は、（マーシャリング処理と同じアルゴリズムを用いて）パラメータの組み合わせParam1、Param2、Param3に割り当てられる。
【０１９２】
ステップＳ９３０において、独立変数としてパラメータParam1、Param2、Param3を用いて、関数識別子Functioncall_1により識別される関数を呼び出す。例えば、レンダリングサーバ１００によって、ゲーム画面をレンダリングすることができる。（リモート手続き呼び出しを介して反対の方向に）中央サーバ２００に、あるいは、参加者のためにレンダリング指示が実行されたその参加者に直接的に、レンダリングされたゲーム画面を分配することができる。もちろん、本発明がレンダリング指示やゲーム環境に限定されないことを理解されたい。
【０１９３】
アンマーシャリング処理の第２反復は、ステップＳ９１０において開始し、これにより、パケット８３０を受信する。関数識別子は、パラメータインデックス0x3及びパラメータParam4とともに受信したFunctioncall_2である。ステップＳ９２０は、パケット８３０に含まれるパケットインデックスがないことを示し、したがって、アンマーシャリング処理は、ステップＳ９４０に移行する。
【０１９４】
ステップＳ９４０において、パケット８３０が関数識別子又は関数インデックスを特定するか否かをチェックする。パケット８３０が関数識別子Functioncall_2を特定するので、図１０Ｃをさらに参照すると、アンマーシャリング処理は、ステップＳ９４４に移行し、それにより、関数識別子Functioncall_2のための関数インデックステーブル９９０内にエントリ１０３２を作成し、関数インデックス0x2は、（マーシャリング処理と同じアルゴリズムを用いて）関数識別子Functioncall_2に割り当てられるとともに、新たに作成したエントリ１０３２内に記憶される。
【０１９５】
ステップＳ９５０において、パケット８３０が少なくとも１つのパラメータインデックスを含むか否かをチェックする。パケット８３０がパラメータインデックス0x3のみを含むので、アンマーシャリング処理は、ステップＳ９５２に移行する。ステップＳ９５２では、パラメータインデックス0x3に関連付けられたパラメータをパラメータインデックステーブル９９２から検索する。特に、パケット８１０のアンマーシャリングに関連したステップＳ９５６の実行は、Param3に割り当てられたパラメータインデックス0x3を結果としてもたらしたことが思い出されるであろう。したがって、ステップＳ９５２の現在の実行中、パラメータParam3を検索する。
【０１９６】
次に、ステップＳ９５４において、パケット８３０が少なくとも１つのパラメータを含むか否かをチェックする。これが実際に本当なので（すなわち、パケット８３０がパラメータParam4を含むので）、アンマーシャリング処理は、ステップＳ９５６に移行し、それにより、Param4のためのパラメータインデックステーブル９９２内に新しいエントリ１０３４を作成する。この場合、パラメータインデックス0x4は、マーシャリング処理と同じアルゴリズムを用いて、パラメータParam4に割り当てられるとともに、パラメータインデックス0x4は、新たに作成されたエントリ１０３４内に記憶される。
【０１９７】
ステップＳ９５８において、（マーシャリング処理と同じアルゴリズムを用いて）パケットインデックス0x2が割り当てられるパラメータの組み合わせParam3、Param4とともに、関数識別子Functioncall_2のための新しいエントリ１０３６を作成する。
【０１９８】
ステップＳ９３０において、独立変数（引数）としてパラメータParam3、Param4を用いて、関数識別子Functioncall_2により識別される関数を呼び出す。例えば、レンダリングサーバ１００により、ゲーム画面をレンダリングすることができる。（反対方向にリモート手続き呼び出しを介して）中央サーバ２００に、あるいは、レンダリング指示を実行した参加者に直接的に、レンダリングされたゲーム画面を分配することができる。もちろん、本発明が、レンダリング指示やゲーム環境に限定されないことを理解されたい。
【０１９９】
アンマーシャリング処理の第３反復は、ステップＳ９１０において開始し、これにより、パケット８４０を受信する。パケット８４０は、パケットインデックス0x1を含む。ステップＳ９２０は、パケット８４０に含まれるパケットインデックスがあることを示すので、アンマーシャリング処理は、ステップＳ９２０に移行する。
【０２００】
ステップＳ９２０において、パケットインデックス0x1に関連付けられた関数識別子及びパラメータをパケットディクショナリ９９４から検索する。この場合、検索した関数識別子はFunctioncall_1であり、検索したパラメータの組み合わせは、Param1、Param2、Param3である。
【０２０１】
そして、アンマーシャリング処理は、ステップＳ９３０に移行する。ステップＳ９３０では、独立変数としてパラメータParam1、Param2、Param3を用いて、関数識別子Functioncall_1により識別される関数を呼び出す。例えば、レンダリングサーバ１００により、ゲーム画面をレンダリングすることができる。（反対方向に、リモート手続き呼び出しを介して）中央サーバ２００に、又はレンダリング指示が行われた参加者に直接的に、レンダリングされたゲーム画面を分配することができる。もちろん、本発明がレンダリング指示やゲーム環境に限定されないことを理解すべきであろう。
【０２０２】
明らかに、パケット８１０及び８４０が、同じパラメータで同じ関数の実行を結果としてもたらすけれども、パケット８４０を送信するのに必要なネットワークリソース（帯域幅）の量は、パケット８１０を送信するのに必要なネットワークリソースの量未満である。
【０２０３】
マーシャリング処理に関連して既に述べたように、場合により、異なる関数によるかもしれないけれども、同じパラメータの組み合わせが呼び出される場合に、送信効率の更なる改良は達成可能であればよい。したがって、図７Ｃを参照して記述した修正マーシャリング処理をサポートするために、アンマーシャリング処理が修正されてもよい。特に、図９Ｃを参照して、パラメータ組み合わせインデックステーブル９９６を提供してもよい。パラメータ組み合わせインデックステーブル９９６は、パラメータ組み合わせインデックスをパラメータのそれぞれの組み合わせに関連付ける。すなわち、パラメータ組み合わせインデックステーブル９９６内の各エントリは、パラメータの順序集合を特定のコード（「パラメータ組み合わせインデックス」という）に関連付ける。非限定的な一実施形態では、パラメータ組み合わせインデックステーブル９９６は、レンダリングサーバ１００のＲＡＭ１０３又は記憶媒体１０４内に保持されるデータベースとして実施されてもよい。別の非限定的な実施形態では、外部記憶装置上にパラメータ組み合わせインデックステーブル９９６を保持することができる。外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０あるいはネットワーク４００を介してレンダリングサーバ１００にアクセス可能である。
【０２０４】
パラメータ組み合わせインデックステーブル９９６を利用するために、アンマーシャリング処理に修正がなされる。具体的には、図９Ｄを参照して、新しいステップＳ９４６が導入される。ステップＳ９４６では、受信したパケットがパラメータ組み合わせインデックスを含むか否かをチェックするであろう。肯定の場合には、対応するパラメータの組み合わせは、ステップＳ９４８において、パラメータ組み合わせインデックステーブル９９６から検索され、その後、アンマーシャリング処理は、ステップＳ９５８において、図９Ａのアンマーシャリング処理に再結合するであろう。しかしながら、パラメータ組み合わせインデックスを含まない受信したパケットを見付けたならば、アンマーシャリング処理は、上述のようなステップＳ９５０〜Ｓ９５６の実行に移行する。さらに、新しいステップＳ９５７が提供され、それにより、新しいエントリがパラメータ組み合わせインデックステーブル９９６内に作成され、パラメータ組み合わせインデックスが、現在のパラメータの組み合わせに割り当てられ、それに関連付けて記憶されるであろう。現在のパラメータの組み合わせへのパラメータ組み合わせインデックスの割り当ては、ローカルデバイスにより用いられた同じパラメータ組み合わせインデックス割当アルゴリズムに従って進められればよい。
【０２０５】
更なる変形例では、関数識別子は、実際に、パラメータの１つであればよいことが思い出されるであろう。そのような場合には、「パラメータの組み合わせ」は、関数の本質が呼び出されることを特定する少なくとも１つのパラメータを含む。上記変形例に適合するために、関数インデックステーブル９９０は、パラメータインデックステーブル９９２に効果的に組み込まれる。そのような一実施形態では、図９ＡのフローチャートからステップＳ９４０、Ｓ９４２及びＳ９４４を効果的に省略することができる。
【０２０６】
ｋ．［シーケンスインデックシング］
当然のことながら、指示のシーケンスが繰り返し得ることを観察し、この観察に上述の原則を適用することにより、更なる効率が得られてもよい。具体的には、ローカルデバイスにおいて、受信した指示のシーケンスを要約するためのマーシャリング処理は、図１１Ａに示すフローチャートにより表されればよい。マーシャリング処理は、中央サーバ２００内のローカルスタブ６２０により実行されればよいが、リモート手続き呼び出しが用いられるか否かに現在記述の処理を適用することができる。
【０２０７】
ステップＳ１１１０において、指示を受信する。非限定的な例では、その指示は、アプリケーションレイヤにおいてゲーム状態管理処理により発行されるレンダリング指示であればよい。ステップＳ１１３０において、シーケンスディクショナリを調べることを開始するように、ステップＳ１１２０において、受信した指示が一連の指示を完了するか否かを確認する。多くの方法でこれを判定することができる。例えば、マーシャリング処理は、定数の受信した指示がシーケンスを形成することを考慮してもよい。別の実施形態では、マーシャリング処理は、いくつかの指示を受信するまで待機してもよく、その中にパターンを検出し、いくつかの反復、それゆえ効率向上があるだろうという認識に応じて、最も古い（もっとも最近ではない）シーケンス内の指示を処理し始めるために、それらを処理してもよい。シーケンスが完了したか否かを判定するための他の手法は、本発明の範囲内であると理解されるであろう。
【０２０８】
（いわゆる指示１〜Ｎを含む）指示の完全なシーケンスを検出したと想定すると、マーシャリング処理は、ステップＳ１１３０に移行する。ステップＳ１１３０では、シーケンスディクショナリを調べる。ここで、シーケンスディクショナリ１１９０を示す図１１Ｂを参照する。シーケンスディクショナリ１１９０は、シーケンスインデックスを指示のそれぞれのシーケンスに関連付けるエントリを備える。指示の所定のシーケンスに表される各指示は、それぞれの関数識別子及びそれぞれのパラメータの組み合わせに関連付けされてもよい。そのようにして、シーケンスディクショナリ１１９０内の各エントリは、シーケンスインデックスを関数識別子のシーケンス及びパラメータのそれぞれの組み合わせに関連付ける。
【０２０９】
非限定的な一実施形態では、シーケンスディクショナリ１１９０は、中央ＲＡＭ２０３又は中央記憶媒体２０４内に保持されるデータベースとして実現されてもよい。別の非限定的な実施形態では、外部記憶装置上にシーケンスディクショナリ１１９０を保持することができる。外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０又はネットワーク４００を介して中央サーバ２００にアクセス可能である。
【０２１０】
ステップＳ１１３０において、シーケンスディクショナリ１１９０をチェックする。特に、シーケンスディクショナリ１１９０が関数識別子の現在のシーケンス及びパラメータのそれぞれの組み合わせに対応するシーケンスインデックスを含むか否かを判定することを目的として、関数識別子の現在のシーケンス及び（指示１〜指示Ｎにおける）パラメータのそれぞれの組み合わせは、シーケンスディクショナリ１１９０のエントリ内に保持される関数識別子のシーケンス及びパラメータのそれぞれの組み合わせと比較される。その回答が肯定的であるならば、これは、指示のこの同じシーケンスを表すパケットが過去において既に作成され、シーケンスインデックスが指示のこの特定のシーケンスに既に割り当てられたことを示すであろう。その場合、マーシャリング処理は、ステップＳ１１５０に移行する。ステップＳ１１５０では、シーケンスディクショナリからシーケンスインデックスを検索し、シーケンスインデックスを含むようにパケットを作成する。さらに、１つ以上の指示が要約可能であると考えられない関数項を参照するということは、受信者がどの指示に関数項が関連付けられているかを判定することを可能にする所定の位置などで、パケットに追加されてもよい。
【０２１１】
そして、マーシャリング処理はステップＳ１１６０に移行し、パケットは、ネットワーク４５０を介してリモートデバイス（例えば、レンダリングサーバ１００）に送信される。また、パケットは、ネットワーク４５０を介して送信するのに適切であるあらゆる必要なヘッダや他の情報を含む。例えば、パケットは、パケットインデックス、関数識別子又はパラメータとは対照的に、シーケンスインデックスを運ぶことを受信エンティティに警告するような方法でフォーマットされてもよい。
【０２１２】
しかしながら、ステップＳ１１３０において、シーケンスディクショナリ１１９０が指示の現在のシーケンスのためのシーケンスインデックスを含まないと判定したならば、マーシャリング処理は、ステップＳ１１７０に移行する。これは、指示のシーケンス内の各指示のために、図７ＡのフローチャートからステップＳ７２０の実行と、それに続くすべてのステップを含む。さらに、マーシャリング処理は、ステップＳ１１８０を実行する。ステップＳ１１８０では、関数識別子及び（指示１〜指示Ｎ内の）パラメータのそれぞれの組み合わせの現在のシーケンスのためのシーケンスディクショナリ１１９０内にエントリを作成し、シーケンスインデックスは、それに割り当てられ、シーケンスディクショナリ１１９０内に記憶される。
【０２１３】
当然のことながら、実際の実施では、マーシャリング処理がステップ１１２０において待機する必要はない。その代わりに、マーシャリング処理が今までに受信した指示についての前処理をもたらしてもよいと想定される。マーシャリング処理は、ステップＳ７５０を除いて、図７Ａのステップの何れかを含むことができる。現在コンパイルされているシーケンスのためのシーケンスインデックスが見付けられることになるならば、この前処理は、無駄であったということになる。しかしながら、シーケンスインデックスが見付けられないという場合には、そのような前処理は、パケットを作成するのに必要な待ち時間を最小化するであろう。
【０２１４】
ここで、シーケンス毎に３つの指示の３つのシーケンスから３つのパケットを作成するマーシャリング処理の動作を例示するために、記述例を提供する。すなわち、以下の９個の指示を検討する：
Functioncall_1 (Param1, Param2, Param3)；
Functioncall_2 (Param3, Param4)；
Functioncall_1 (Param1, Param2, Param3)；
Functioncall_1 (Param1, Param2, Param3)；
Functioncall_2 (Param3, Param4)；
Functioncall_3 (Param4, Param5, Param6)；
Functioncall_1 (Param1, Param2, Param3)；
Functioncall_2 (Param3, Param4)；
Functioncall_1 (Param1, Param2, Param3)。
【０２１５】
第１、第３、第４、第７及び第９の指示が同一であり、同じ関数識別子Functioncall_1と同じ関数項Param1、Param2及びParam3とを参照することに注意されたい。また、第２、第５及び第８の指示が同一であり、同じ関数識別子Functioncall_2と同じ関数項Param3、Param4とを参照することに注意されたい。すべての関数項が要約可能であり、したがって、ここで用いられるような「パラメータ」としての資格を得ると想定する。しかしながら、この想定は、単に容易さのためになされたものであり、各実施形態の場合において必要ではない。
【０２１６】
図１２Ａは、第１指示の受信又は処理の前の、パケットディクショナリ７９４、関数インデックステーブル７９０、パラメータインデックステーブル７９２及びシーケンスディクショナリ１１９０の状態を示す。まさに、パケットディクショナリ７９４、関数インデックステーブル７９０、パラメータインデックステーブル７９２及びシーケンスディクショナリ１１９０のすべては空である。このシナリオは、第３指示（すなわち、一連の３つの指示の最後の指示）を受信するまで実質的に同じままである。すなわち、図７Ａのマーシャリング処理に応じて、１つずつパケットを生成するのに対して、これは、図１１Ａのマーシャリング処理では本当ではない。なぜならば、指示の完全なシーケンスを受信するまでパケットを送出しないからである。例示の目的のみのために用いられるこの非限定的な場合には、完全なシーケンスは、３つの指示を含むと考えられる。
【０２１７】
図１２Ｂは、第３指示を受信し、処理した後の、パケットディクショナリ７９４、関数インデックステーブル７９０、パラメータインデックステーブル７９２及びシーケンスディクショナリ１１９０の状態を示す。ここで、パラメータインデックステーブル７９２が４つのエントリ、すなわち、パラメータインデックス0x1、0x2、0x3及び0x4にそれぞれ関連付けられたParam1、Param2、Param3及びParam4のそれぞれに１つを含むことが分かる。関数インデックステーブル７９０は、関数インデックス0x1、0x2にそれぞれ関連付けられるFunctioncall_1及びFunctioncall_2のそれぞれのための２つのエントリを含む。パケットディクショナリ７９４は、２つのエントリ、すなわち、（パケットインデックス0x1に関連付けられた）Param1、Param2、Param3の組み合わせとともにFunctioncall_1のための１つと、（パケットインデックス0x2に関連付けられた）Param3、Param4の組み合わせとともにFunctioncall_2のための１つとを含む。最終的に、シーケンスディクショナリ１１９０は、シーケンスインデックス0x1に関連付けられた３つの指示の第１シーケンスのための１つのエントリを含む。
【０２１８】
また、図１２Ｂは、第１シーケンス内の３つの指示に対応する３つのパケット１２１０、１２２０、１２３０が発行されることを示す：
パケット１２１０の内容：
関数識別子：  （Functioncall_1）；
パラメータ：  （Param1、Param2、Param3）；
パケット１２２０の内容：
関数識別子：  （Functioncall_2）；
パラメータインデックス：  0x3；
パラメータ：  Param4；
パケット１２３０の内容：
パケットインデックス：  0x1。
【０２１９】
当然のことながら、いくつかの実施形態では、パケットインデックス、関数識別子、関数インデックス、パラメータ及びパラメータインデックスを受信者が区別するのを可能にするために、パケット１２１０、１２２０、１２３０は、必要に応じて、フラグを含んでもよい。
【０２２０】
図１２Ｃは、第６指示を受信し、処理した後の、パケットディクショナリ７９４、関数インデックステーブル７９０、パラメータインデックステーブル７９２及びシーケンスディクショナリ１１９０の状態を示す。ここで、パラメータインデックステーブル７９２は、２つの新しいエントリ、すなわち、パラメータインデックス0x5及び0x6にそれぞれ関連付けられるParam5及びParam6のそれぞれのための１つを含むことが分かる。関数インデックステーブル７９０は、関数インデックス0x3に関連付けられるFunctioncall_3のための１つの新しいエントリを含む。パケットディクショナリ７９４は、パケットインデックス0x3に関連付けられたParam5、Param6の組み合わせとともに、Functioncall_3のための１つの新しいエントリを含む。最終的に、シーケンスディクショナリ１１９０は、シーケンスインデックス0x2に関連付けられた３つの指示の第２シーケンスのための新しい第２エントリを含む。
【０２２１】
また、図１２Ｃは、第２シーケンス内の３つの指示に対応する３つのパケット１２４０、１２５０、１２６０が発行されたことを示す：
パケット１２４０の内容：
パケットインデックス：  0x1；
パケット１２５０の内容：
関数識別子：  （Functioncall_3）；
パラメータインデックス：  0x4；
パラメータ：  Param5、Param6；
パケット１２６０の内容：
パケットインデックス：  0x1。
【０２２２】
ここで、第７、第８及び第９指示を処理するとき何が起こるのかを検討する。現在の（第３）シーケンス内のこれら３つの指示が、シーケンスディクショナリ１１９０内にシーケンスインデックスが既にある第１シーケンス内の３つの指示と同一であることが分かる。そして、図１１ＡのステップＳ１１３０の後に分岐Ｓ１１５０を取り、パケットディクショナリ７９４、関数インデックステーブル７９０、パラメータインデックステーブル７９２、または図１２Ｃに関連したシーケンスディクショナリ１１９０の状態に変更はない。さらに、３つの指示のシーケンスを表すたった１つのパケットを送信するだろう。具体的には、図１３に示すように、パケット１２７０は、シーケンスインデックス0x1を含む非常に短いパケットである。
【０２２３】
パケット１２７０の内容：
シーケンスインデックス：  0x1。
【０２２４】
これは、第７、第８及び第９指示のそれぞれのための３つのパケットを送信することとは対照的である。当業者は、いわゆるパケットインデックスよりもむしろシーケンスインデックスを伝達していることを示すために、パケット１２７０がフラグ又はヘッダを含み得ることに評価するであろう。
【０２２５】
当然のことながら、いくつかの実施形態では、受信した指示に基づいて直接よりもむしろ、図７Ａのマーシャリング処理により出力されるパケットに基づいて、シーケンスの検出をすることができる。すなわち、パケットが作成され、図７Ａのマーシャリング処理に応じて送信される準備ができると、（指示よりもむしろ）一連のパケットを特定し、可能ならば、シーケンス数を含む要約したパケットを発行するために、これらのパケットを解析することができる。
【０２２６】
当業者は、１つが入力パケット内に存在するシーケンス識別子を復号するように、その代わりに、パケットの入力シーケンスにシーケンス識別子を割り当てるように、リモートデバイス（例えば、レンダリングサーバ１００）において相補的アンマーシャリング処理を実行することができることを評価するであろう。
【０２２７】
ｌ．［共有パケットディクショナリ］
当然のことながら、ゲーム状態管理処理の過程で、レンダリングすべき大量のオブジェクトのために、少なくとも部分的に並列に処理されるように、２つ以上のレンダリング指示を発行する必要があってもよい。同時に多数のレンダリング指示を実行する必要性に貢献するかもしれない別の要因は、多数の参加者がそのゲームに関わることである。この必要性を満足するために、多数のローカルスタブは、同時に同じ期間起動していることができる。例証の目的のためのみに用いられ、限定とみなされるべきではない単純なシナリオでは、別々のローカルスタブが、ゲームの各参加者に関連付けられる。各ローカルスタブは、容認可能なモーションクオリティ（動作の質）で、対応する参加者のためのゲームシーンをレンダリングするように、繰り返し起動される。ゲーム状態管理処理のステップＳ４０５の多数の並列実行を行うために、多数のローカルスタブは、対応するリモートスタブに協力する。
【０２２８】
ここで、図１４Ａ及び図１４Ｂを参照して、同じローカルデバイス１４３０上に３つのローカルスタブ１４１０、１４１５、１４２０を例示化する。ローカルデバイス１４３０は、ゲーム状態管理処理を実行する。ローカルスタブ１４１０、１４１５、１４２０は、共通のリモートデバイス１４７０上に配置された対応するリモートスタブ１４５０、１４５５、１４６０へのリモート手続き呼び出しを行う。ローカススタブの数及びリモートスタブの数が３つであるが、これが本発明の限定として考慮されないことを理解されたい。非限定的な実施形態では、ローカルデバイス１４３０は、中央サーバ２００であればよく、リモートデバイス１４７０は、レンダリングサーバ１００であればよい。ローカルデバイス１４３０及びリモートデバイス１４７０は、ネットワーク４５０に接続されてもよい。ローカルスタブ１４１０によりなされる関数呼び出しは、パケットに整理される。そして、パケットは、リモートスタブ１４５０に送信され、リモートスタブ１４５０により情報を提供される。これは、ゲーム内で第１参加者のためのゲーム画面のレンダリングを結果として生じることができる。同様に、ローカルスタブ１４１５によりなされる関数呼び出しは、パケットに整理される。そして、パケットは、リモートスタブ１４５５に送信され、リモートスタブ１４５５により情報を提供される。一方、ローカルスタブ１４２０によりなされた関数呼び出しは、パケットに整理される。そして、パケットは、リモートスタブ１４６０に送信され、リモートスタブ１４６０により情報を提供される。これは、ゲーム内で第２参加者及び第３参加者のそれぞれのためのゲーム画面のレンダリングを結果として生じる。
【０２２９】
図１４Ａに示す非限定的な実施形態では、３つのローカルスタブ１４１０、１４１５、１４２０は、メモリ空間１４４０、１４４５、１４４９それぞれへのアクセスを有する。メモリ空間１４４０は、ローカルスタブ１４１０による使用のために、関数インデックステーブル１４４２と、パラメータインデックステーブル１４４４と、パケットディクショナリ１４４６とを含む。また、メモリ空間１４４０は、有用又は所望のときには、シーケンスディクショナリ１４４８を含んでもよい。関数インデックステーブル１４４２、パラメータインデックステーブル１４４４、パケットディクショナリ１４４６及びシーケンスディクショナリ１４４８は、参加者＃１のためにマーシャリング処理を実行するとき、ローカルスタブ１４１０によりアクセスされる。それらとしては、メモリ空間１４４５及び１４４９は、同様に、それぞれの関数インデックステーブル、それぞれのパラメータインデックステーブル及びそれぞれのパケットディクショナリとともに、場合により、それぞれのシーケンスディクショナリを備えて構成される。これらの別々のメモリ空間１４４５、１４４９は、参加者＃２及び参加者＃３のそれぞれのためにはっきりと異なるマーシャリング処理を実行するとき、ローカルスタブ１４１５、１４２０により別々にアクセスされる。
【０２３０】
リモートデバイス１４７０において、３つのリモートスタブ１４５０、１４５５、１４６０は、メモリ空間１４８０、１４８５、１４９０それぞれへのアクセスを有する。メモリ空間１４８０は、リモートスタブ１４５０による利用のために、関数インデックステーブル１４８２、パラメータインデックステーブル１４８４及びパケットディクショナリ１４８６を含む。また、メモリ空間１４８０は、有用又は所望のときには、シーケンスディクショナリ１４８８を含んでもよい。関数インデックステーブル１４８２、パラメータインデックステーブル１４８４、パケットディクショナリ１４８６及びシーケンスディクショナリ１４８８は、参加者＃１のためにアンマーシャリング処理を実行するとき、リモートスタブ１４５０によりアクセスされる。それらとしては、メモリ空間１４８５及び１４９０は、同様に、それぞれの関数インデックステーブル、それぞれのパラメータインデックステーブル及びそれぞれのパケットディクショナリとともに、場合により、それぞれのシーケンスディクショナリを備えて構成される。これらの別々のメモリ空間１４８５、１４９０は、参加者＃２及び参加者＃３のそれぞれのためにはっきりと異なるアンマーシャリング処理を実行するとき、リモートスタブ１４５５、１４６０により別々にアクセスされる。
【０２３１】
図１４Ｂに示す別の非限定的な実施形態では、３つのローカルスタブ１４１０、１４１５、１４２０は、共有メモリ空間１４６１へのアクセスを有する。共有メモリ空間１４６１は、共通の関数インデックステーブル１４６２、共通のパラメータインデックステーブル１４６４及び共通のパケットディクショナリ１４６６を含む。また、共有メモリ空間１４６１は、有用又は所望のときには、共通のシーケンスディクショナリ１４６８を含んでもよい。したがって、関数インデックステーブル１４６２、パラメータインデックステーブル１４６４、パケットディクショナリ１４６６及びシーケンスディクショナリ１４６８は、参加者＃１、＃２及び＃３それぞれのためのはっきりと異なるマーシャリング処理を実行するローカルスタブ１４１０、１４１５、１４２０により一般にアクセスされる。
【０２３２】
共有メモリ空間１４６１は、種々の方法で構成されてもよい。例えば、中央ＲＡＭ２０３又は中央記憶媒体２０４内に共有メモリ空間１４６１を保持することができる。別の非限定的な実施形態では、共有メモリ空間１４６１を外部記憶装置上に保持することができる。外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０又はネットワーク４００を介して、中央サーバ２００にアクセス可能である。
【０２３３】
リモートデバイス１４７０では、３つのリモートスタブ１４５０、１４５５、１４６０は、共有メモリ空間１４７５へのアクセスを有する。共有メモリ空間１４７５は、共通の関数インデックステーブル１４９２、共通のパラメータインデックステーブル１４９４及び共通のパケットディクショナリ１４９６を含む。また、共有メモリ空間１４７５は、有用又は所望のときには、共通のシーケンスディクショナリ１４９８を含んでもよい。したがって、関数インデックステーブル１４９２、パラメータインデックステーブル１４９４、パケットディクショナリ１４９６及びシーケンスディクショナリ１４９８は、参加者＃１、＃２及び＃３それぞれのためのはっきりと異なるアンマーシャリング処理を実行するリモートスタブ１４５０、１４５５、１４６０により一般にアクセスされる。
【０２３４】
共有メモリ空間１４７５は、種々の方法で構成されればよい。例えば、ＲＡＭ１０３又は記憶媒体１０４内に共有メモリ空間１４７５を保持することができる。別の非限定的な実施形態では、外部記憶装置上に共有メモリ空間１４７５を保持することができる。外部記憶装置は、ローカル記憶領域ネットワーク（ＳＡＮ）、ネットワーク４５０又はネットワーク４００を介してレンダリングサーバ１００にアクセス可能である。
【０２３５】
当然のことながら、ローカルスタブ１４１０、１４１５、１４２０による共有メモリ空間１４６１の利用、及び、リモートスタブ１４５０、１４５５、１４６０による共有メモリ空間１４７５の利用は、帯域幅利用に関して関数呼び出しをより効率的に同等にすることを可能にする。すなわち、効率は、関数呼び出しの反復（繰り返し）とともに上昇し、関数呼び出しの反復は、参加者一人ベースよりもむしろ複数の参加者を横断して計測されるとき、よりふさわしい。
【０２３６】
ここで、非限定的な実施形態を示す図１５を参照する。図１５では、３つのローカルスタブ１５１０、１５１５、１５２０は、３つの別のローカルデバイス１５３０、１５３５、１５４０上に例示化される。ローカルスタブ１５１０、１５１５、１５２０は、対応するリモートスタブ１５５０、１５５５、１５６０に対するリモート手続き呼び出しをなす。一実施形態では、リモートスタブ１５５０、１５５５、１５６０は、１つのリモートデバイス１５７０上に例示化される。他の実施形態では、リモートスタブ１５５０、１５５５、１５６０は、別々のリモートデバイス上に例示化されてもよい。ローカルスタブ及びリモートスタブの数が３つであるけれども、これは、本発明の限定と考えるべきではないことを理解されたい。
【０２３７】
非限定的な一実施形態では、ローカルデバイス１５３０、１５４５、１５４０は、分散型中央サーバ２００の下位部（sub-portions）であり得るが、リモートデバイス１５７０は、レンダリングサーバ１００であり得る。そのような一実施形態では、ゲーム状態管理処理は、「マスタ」として指定されるローカルデバイス１５３０、１５３５、１５４０の１つにより起動されてもよく、あるいは、ゲーム状態管理処理は、ローカルデバイス１５３０、１５３５、１５４０により協働して／分散して実行されてもよい
【０２３８】
別の非限定的な実施形態では、ローカルデバイス１５３０、１５４５、１５４０は、ゲーム機であればよく、リモートデバイス１５７０は、レンダリングサーバ１００又は中央サーバ２００であってもよい。そのような一実施形態では、ゲーム状態管理処理は、「マスタ」として指定されるゲーム機の１つにより起動されてもよく、あるいは、ゲーム状態管理処理は、種々のゲーム機により協働して／分散して実行されてもよい。
【０２３９】
ローカルスタブ１５１０は、パケットを作成するためにマーシャリング処理を実行することにより、指示の受信に応答する。そのパケットは、リモートスタブ１５５０により送信され、情報を提供される。これは、ゲーム内の第１参加者のためのゲーム画面のレンダリングを結果としてもたらすことができる。同様に、ローカルスタブ１５１５、１５２０は、それぞれ、リモートスタブ１５５５、１５６０へのパケットの送信を結果としてもたらすそれら自身のマーシャリング処理を実行する。これは、ゲームの第２及び第３参加者のそれぞれのためのゲーム画面のレンダリングを結果としてもたらす。
【０２４０】
３つのローカルスタブ１５１０、１５１５、１５２０は、共有メモリ空間１５８０へのアクセスを有する。共有メモリ空間１５８０は、共通の関数インデックステーブル１５８２と、共通のパラメータインデックステーブル１５８４と、共通のパケットディクショナリ１５８６とを含む。また、共有メモリ空間１５８０は、有用又は所望のときには、共通のシーケンスディクショナリ１５８８も含んでもよい。したがって、関数インデックステーブル１５８２、パラメータインデックステーブル１５８４、パケットディクショナリ１５８６及びシーケンスディクショナリ１５８８は、それぞれ、参加者＃１、＃２及び＃３のためのはっきりと異なるマーシャリング処理を実行するローカルスタブ１５１０、１５１５、１５２０により一般にアクセスされる。
【０２４１】
共有メモリ空間１５８０は、種々の方法で構成されればよい。例えば、１つの可能性は、共有メモリ空間１５８０が、共有メモリ空間が位置するローカルデバイスの外部にあるものを含む、ローカルデバイス１５３０、１５３５、１５４０の１つのメモリ（例えば、ＲＡＭや他の記憶媒体）に保持され、ローカルスタブ１５１０、１５１５、１５２０により継続的にアクセスされることである。
【０２４２】
図１５に示す別の可能性は、共有メモリ空間１５８０が外部記憶装置上に保持されることである。外部記憶装置は、記憶領域ネットワーク（ＳＡＮ）あるいはネットワーク４５０又はネットワーク４００を介してローカルデバイス１５３０、１５３５、１５４０にアクセス可能である。
【０２４３】
さらに別の可能性は、共有メモリ空間１５８０が、関数インデックステーブル１５８２、パラメータインデックステーブル１５８４、共通のパケットディクショナリ１５８６（及びシーケンスディクショナリ１５８８）により速いアクセスを提供するように、ローカルデバイス１５３０、１５３５、１５４０のそれぞれ内に（例えば、キャッシュ内に）複製されることである。このように、ローカルデバイス１５３０、１５３５、１５４０は、各ローカルデバイス１５３０、１５３５、１５４０内に、共有メモリ空間のコピーを構築するためのプロトコルを実行することができる。
【０２４４】
リモートスタブ１５５０、１５５５、１５６０が１つのリモートデバイス１５７０により実行されるので、リモートデバイス１５７０は、図１４Ｂを参照して前述したように構成されてもよい。
【０２４５】
上記例のいくつかは、ゲーム環境におけるレンダリングコマンドを含むリモート手続き呼び出しに集中していた。しかしながら、これは、本発明の限定と考慮すべきではない。例えば、ゲーム環境におけるリモート手続き呼び出しの別の適切な例は、処理（プロセス）を初期化する指示を含む。ゲーム環境内のリモート手続き呼び出しの更に他の例は、スコアボードを取り込んだり、他のプレイヤを見付けたり、ゲームニュースを検索したりすることを含む。さらに、当然のことながら、本発明は、ゲーム環境に限定されない。
【０２４６】
当業者は、クライアント装置３００への配布用に、レンダリングされたゲーム画面をそこに送信するために、反対に、すなわち、レンダリングサーバ１００から中央サーバ２００へのリモート手続き呼び出しを発行する過程で、リモート手続き呼び出しを圧縮することにより、効率も上がることを評価するであろう。
【０２４７】
当業者は、記述の実施形態の適応及び修正がなされ得ることを評価するであろう。したがって、上述の実施形態は、例示的であり、限定的ではないと考慮されるべきである。また、当然のことながら、本発明のある実施形態の動作に必要かもしれない追加の構成要件は、当業者の範囲内にあると想定されるので、記述も例示もされていない。さらに、本発明のある実施形態は、具体的にはここに開示されていないあらゆる構成要件がなくてもよく、不足してもよく、あるいは、そのような構成要件なしに機能してもよい。
【図１】
2015529875.tif 000002
【図２】
2015529875.tif 000003
【図３】
2015529875.tif 000004
【図４】
2015529875.tif 000005
【図５Ａ】
2015529875.tif 000006
【図５Ｂ】
2015529875.tif 000007
【図６】
2015529875.tif 000008
【図７Ａ】
2015529875.tif 000009
【図７Ｂ】
2015529875.tif 000010
【図７Ｃ】
2015529875.tif 000011
【図７Ｄ】
2015529875.tif 000012
【図８Ａ】
2015529875.tif 000013
【図８Ｂ】
2015529875.tif 000014
【図８Ｃ】
2015529875.tif 000015
【図８Ｄ】
2015529875.tif 000016
【図９Ａ】
2015529875.tif 000017
【図９Ｂ】
2015529875.tif 000018
【図９Ｃ】
2015529875.tif 000019
【図９Ｄ】
2015529875.tif 000020
【図１０Ａ】
2015529875.tif 000021
【図１０Ｂ】
2015529875.tif 000022
【図１０Ｃ】
2015529875.tif 000023
【図１１Ａ】
2015529875.tif 000024
【図１１Ｂ】
2015529875.tif 000025
【図１２Ａ】
2015529875.tif 000026
【図１２Ｂ】
2015529875.tif 000027
【図１２Ｃ】
2015529875.tif 000028
【図１３】
2015529875.tif 000029
【図１４Ａ】
2015529875.tif 000030
【図１４Ｂ】
2015529875.tif 000031
【図１５】
2015529875.tif 000032