(57)【要約】本発明は、アプリケーションサーバとシンクライアントとの間で伝送されるグラフィカルデータの量を低減することにより、配信システムの性能を改善する。グラフィカルデータに使用される符号化技術は、位置確認のクライアントサーバのセッション中のグラフィカルデータの反復性に応答して調整される。この反復性を示すインデックスは維持され、このインデックスは、グラフィカルデータを格納するクライアントのキャッシュメモリ内で位置確認において位置を識別する。インデックスは見出されないが、グラフィカルオブジェクトがクライアントにおいて位置確認される高い尤度をファジーキーが示す場合、ファジーキーに対応するファイル名がこのクライアントの永続化ストレージメモリから検索され、この中のグラフィカルオブジェクトを格納する。
2004501445.tif 000002
【特許請求の範囲】
【請求項１】
遠隔ディスプレイデバイスに伝送される反復グラフィカルデータの量を効率的に低減する方法であって、該方法は、
該グラフィカルデータと関連するインデックスを検索するステップであって、該インデックスは、該グラフィカルデータの伝送前を示す、ステップと、
該インデックスの位置確認に失敗すると、該グラフィカルデータと関連するファジーキーを、ファジーデータベースから検索するステップであって、該ファジーキーは、該グラフィカルデータが該遠隔ディスプレイデバイスに接続された永続化ストレージメモリ内に格納される尤度を示す、ステップと、
該ファジーキーが位置確認されると、該ファジーキーを該永続化ストレージメモリおよび遠隔ディスプレイデバイスと関連するエージェントに伝送するステップと
を包含する、方法。
【請求項２】
前記グラフィカルデータは、符号化されたビットマップに対応する、請求項１に記載の方法。
【請求項３】
前記グラフィカルデータは、絵文字に対応する、請求項１に記載の方法。
【請求項４】
前記グラフィカルデータは、ストリップに対応する、請求項１に記載の方法。
【請求項５】
前記グラフィカルデータは、オフスクリーン面に対応する、請求項１に記載の方法。
【請求項６】
前記インデックスは、前記遠隔ディスプレイデバイスに接続されたキャッシュ内のメモリ位置を示し、前記エージェントは、前記グラフィカルデータの前記前の伝送を該メモリ位置に予め格納している、請求項１に記載の方法。
【請求項７】
前記グラフィカルデータの大きさは、最大キャッシュオブジェクトの大きさよりも大きくならない、請求項６に記載の方法。
【請求項８】
前記ファジーキーは、前記グラフィカルデータの長さに対応する、請求項１に記載の方法。
【請求項９】
前記エージェントとのセッションを開始するステップに応答して、該エージェントから複数のファジーキーを受信するステップをさらに包含する、請求項１に記載の方法。
【請求項１０】
所定のインターバルに応答して、前記エージェントから複数のファジーキーを周期的に受信するステップをさらに包含する、請求項１に記載の方法。
【請求項１１】
前記インデックスを位置確認すると、該インデックスを前記エージェントに伝送するステップをさらに包含する、請求項１に記載の方法。
【請求項１２】
前記ファジーキーの位置確認に失敗すると、該ファジーキーを形成するステップと、
該ファジーキーを該ファジーデータベースに格納するステップと、
前記グラフィカルデータを前記エージェントに伝送するステップと、
該エージェントに指示して、該エージェントに接続された揮発性メモリに該グラフィカルデータを格納させるステップと
をさらに包含する、請求項１に記載の方法。
【請求項１３】
永続化ストレージメモリに常駐するファイルに該グラフィカルデータを格納するステップであって、該ファイルは、前記ファジーキーに対応するファイル名を有する、ステップをさらに包含する、請求項１２に記載の方法。
【請求項１４】
前記エージェントに指示して、前記グラフィカルデータを前記永続化ストレージメモリから、該エージェントおよび前記遠隔ディスプレイデバイスに接続されたキャッシュにコピーするステップをさらに包含する、請求項１に記載の方法。
【請求項１５】
前記エージェントが前記グラフィカルデータのコピーに失敗すると、該グラフィカルデータおよびリカバリマーカーを該エージェントに伝送するステップをさらに包含する、請求項１４に記載の方法。
【請求項１６】
前記グラフィカルデータと関連するコマンドを、複数の他のコマンドと共にキューに入れるステップと、
該グラフィカルデータと関連するキューに並べられたコマンドが、複数の他のキューに並べられたコマンドのうちの少なくとも１つの後に配置されるか否かを決定するステップと、
該グラフィカルデータと関連する該キューに並べられたコマンドが、該複数の他のキューに並べられたコマンドのうちの少なくとも１つの後に配置されるか否かを決定すると、該複数の他のキューに並べられたコマンドのうちの少なくとも１つを該キューから除去するステップと
をさらに包含する、請求項１に記載の方法。
【請求項１７】
前記複数の他のキューに並べられたコマンドのうちの少なくとも１つが前記キューに配置された後、前記グラフィカルデータと関連する前記キューに並べられたコマンドが該キューに配置される、請求項１６に記載の方法。
【請求項１８】
前記伝送されたファジーキーと関連する前記グラフィカルデータの位置確認に失敗すると、前記エージェントは、該グラフィカルデータと関連するコマンドを、後から受信された該複数のコマンドと共に、該エージェントに接続されたキューに格納するステップと、
該グラフィカルデータを受信するステップと、
該グラフィカルデータと関連する該コマンドと、該キューに格納された、後から受信された複数のコマンドのうちの少なくともいくつかとを処理するステップと
をさらに包含する、請求項１に記載の方法。
【請求項１９】
サーバからクライアントに通信ネットワークを介して伝送されるデータの量を低減する方法であって、該方法は、該クライアントにおいて実行され：
プロトコルストリームを受信するステップであって、該プロトコルストリームは、グラフィカルデータの印と、該グラフィカルデータと関連するコマンドと、複数の他のコマンドとを含む、ステップと、
該印を用いて該グラフィカルデータを検索するステップと、
該グラフィカルデータの位置確認に失敗すると、該グラフィカルデータと関連する該コマンドを、該複数の他のコマンドと共にキューに格納するステップと、
該グラフィカルデータを受信するステップと、
該関連するコマンドを用いて、該受信されたグラフィカルデータを処理するステップと、
該キューにおける、複数の他のコマンドのうちの少なくともいくつかを処理するステップと
を包含する、方法。
【請求項２０】
遠隔ディスプレイデバイスに伝送された反復グラフィカルデータの量を効率的に低減するシステムであって、該システムは：
該グラフィカルデータと関連するインデックスであって、該グラフィカルデータの伝送前を示す、インデックスと、
ファジーデータベースと、
該ファジーデータベースに格納されたファジーキーであって、該ファジーキーは、該グラフィカルデータと関連付けられ、かつ該グラフィカルデータが、該遠隔ディスプレイデバイスに接続される永続化ストレージメモリ内に格納される尤度を示し、該インデックスの位置確認に失敗すると、該ファジーキーを該データベースから検索される、ファジーキーと
を備える、システム。
【請求項２１】
前記グラフィカルデータは、符号化されたビットマップに対応する、請求項２０に記載のシステム。
【請求項２２】
前記グラフィカルデータは、絵文字に対応する、請求項２０に記載のシステム。
【請求項２３】
前記グラフィカルデータは、ストリップに対応する、請求項２０に記載のシステム。
【請求項２４】
前記グラフィカルデータは、オフスクリーン面に対応する、請求項２０に記載のシステム。
【請求項２５】
前記インデックスは、前記遠隔ディスプレイデバイスに接続されたキャッシュにおけるメモリ位置を示す、請求項２０に記載のシステム。
【請求項２６】
前記グラフィカルデータの大きさは、最大キャッシュオブジェクトの大きさよりも大きくならない、請求項２０に記載のシステム。
【請求項２７】
前記ファジーキーは、前記グラフィカルデータの長さに対応する、請求項２０に記載のシステム。
【請求項２８】
前記永続化ストレージメモリに常駐するファイルであって、前記ファジーキーに対応するファイル名を有するファイルをさらに備える、請求項２０に記載のシステム。
【請求項２９】
プロトコルストリームであって、前記ファジーキー、前記グラフィカルデータと関連するコマンド、および複数の他のコマンドを含む、プロトコルストリームと、
キューであって、該グラフィカルデータと関連する該コマンドを、該ファジーキーを用いた該グラフィカルデータを位置確認することの失敗に応答して、該複数の他のコマンドと共に格納し、該関連するコマンドおよび該複数の他のコマンドのうちの少なくともいくつかは、該グラフィカルデータを受信すると処理される、キューと
をさらに備える、請求項２０に記載のシステム。
【請求項３０】
サーバからクライアントに通信ネットワークを介して伝送されるデータの量を低減するシステムであって、該システムは、
クライアント上で動作し、該通信ネットワークを介して該サーバに接続されるクライアントエージェントを備え、該クライアントエージェントは、
ａ）プロトコルストリームであって、該プロトコルストリームは、グラフィカルデータの印、該グラフィカルデータと関連するコマンド、および複数の他のコマンドを備える、プロトコルストリームを受信し、
ｂ）該印を用いて該グラフィカルデータを検索し、
ｃ）該グラフィカルデータの位置確認に失敗すると、該グラフィカルデータに関連するコマンドを複数の他のコマンドと共にキューに格納し、
ｄ）該グラフィカルデータを受信し、
ｅ）該受信されたグラフィカルデータを該関連するコマンドを用いて処理し、
ｆ）該キューにおける複数の他のコマンドの少なくともいくつかを処理する、システム。
【請求項３１】
アクティビティを処理するレートをネットワーク条件の変化に応答して適合させる方法であって、該方法は：
グラフィカルデータを第１のレートでサーバエージェントにより処理するステップであって、該処理されたグラフィカルデータは、クライアントエージェントおよびネットワークを介してサーバエージェントに接続されたクライアントエージェントにアドレス指定される、ステップと、
該ネットワークの該ネットワーク条件を決定するステップと、
該サーバエージェントのアクティビティを処理する該レートを、該ネットワーク条件の変化に応答して、該サーバエージェントにより第１のレートから第２のレートに調整するステップと
を包含する、方法。
【請求項３２】
前記処理されたグラフィカルデータを前記クライアントエージェントに伝送するステップと、
該処理されたグラフィカルデータの伝送と関連する時間差を該クライアントエージェントにより測定するステップであって、該時間差は、前記ネットワーク条件の変化に対応する、ステップと、
該時間差に従って、前記第２のレートを選択するステップと
をさらに包含する、請求項３１に記載の方法。
【請求項３３】
第１の符号化スキームにより、前記第１のレートで前記グラフィカルデータを処理するステップと、
第２の符号化スキームを前記ネットワーク条件の変化に応答して選択するステップと、
次のグラフィカルデータを該第２の符号化スキームにより処理するステップとをさらに包含する、請求項３１に記載の方法。
【請求項３４】
グラフィカルデータに行なわれる処理アクティビティをネットワーク条件の変化に応答して適合させる方法であって、該方法は、
第１の符号化技術を用いて、グラフィカルデータをサーバエージェントにより処理するステップであって、該処理されたグラフィカルデータは、クライアントおよびサーバエージェントに接続されたネットワークを介してクライアントエージェントにアドレス指定される、ステップと、
該ネットワークの該ネットワーク条件を決定するステップと、
該ネットワーク条件の変化に応答して、第２の符号化技術を該サーバエージェントにより選択するステップと、
該第２の符号化技術を用いて、次のグラフィカルデータを該サーバエージェントにより処理するステップと、
を包含する、方法。
【請求項３５】
前記処理されたグラフィカルデータを前記クライアントエージェントに伝送するステップと、
該処理されたグラフィカルデータを伝送するステップと関連する時間差を該クライアントエージェントにより測定するステップであって、該時間差は、前記ネットワーク条件の変化に対応する、ステップと、
該時間差に従って、前記第２の符号化技術を選択するステップと、
をさらに包含する、請求項３４に記載の方法。
【請求項３６】
サーバと、ネットワークを介して該サーバに接続されたクライアントとの間の性能不整合に応答して、サーバの処理レートを適合させる方法であって、該方法は：
グラフィカルデータをサーバエージェントにより処理するステップと、
該サーバエージェントにて該グラフィカルデータを処理するステップと関連する第１の期間を決定するステップと、
該グラフィカルデータをクライアントエージェントにより処理するステップと、
該クライアントエージェントにて該グラフィカルデータを処理するステップと関連する、第２の期間を決定するステップと、
該第１の期間と該第２の期間との間の時間差を決定するステップと、
該サーバエージェントにより、該時間差に従って該サーバの処理レートを調整するステップと
を包含する、方法。
【請求項３７】
前記第１の期間は、前記サーバのフレームバッファをスクロールすることにより決定される、請求項３６に記載の方法。
【請求項３８】
処理アクティビティのレートをネットワーク条件の変化に応答して適合させるシステムであって、該システムは：
クライアントエージェントと、
該クライアントエージェントに接続されたネットワークであって、該ネットワーク条件は、該ネットワークと関連付けられる、ネットワークと、
該ネットワークを介して該クライアントエージェントに接続されるサーバエージェントであって、該サーバエージェントは、第１のグラフィカルデータを第１のレートで処理し、該処理された第１のグラフィカルデータは、該クライアントエージェントにアドレス指定され、該サーバエージェントは、該ネットワーク条件の変化に応答して、該処理レートを該第１のレートから第２のレートに調整する、サーバエージェントと
を備える、システム。
【請求項３９】
第１の符号化スキームは、前記第１のグラフィカルデータを前記第１のレートで処理するように用いられ、第２の符号化スキームは、第２のグラフィカルデータを前記第２のレートで処理するように用いられる、請求項３８に記載のシステム。
【請求項４０】
グラフィカルデータに行なわれる処理アクティビティをネットワーク条件の変化に応答して適合させるシステムであって、該システムは：
クライアントエージェントと、
該クライアントエージェントに接続されるネットワークであって、該ネットワーク条件は、該ネットワークと関連付けられる、ネットワークと、
該ネットワークを介して該クライアントに接続されるサーバエージェントであって、該サーバエージェントは、該ネットワーク条件の変化に応答して、第１の符号化技術を用いて第１のグラフィカルデータを処理し、かつ第２の符号化技術を用いて第２のグラフィカルデータを処理し、該サーバエージェントは、該第１のグラフィカルデータおよび第２のグラフィカルデータを、該ネットワークを介して該クライアントエージェントに伝送する、サーバエージェントと、を含むシステム。
【請求項４１】
前記ネットワーク条件の前記変化は、前記クライアントエージェントにより決定された時間差から検出される、請求項４０に記載のシステム。
【請求項４２】
サーバと、ネットワークを介して該サーバに接続されたクライアントとの間の性能不整合に応答して、サーバの処理レートを適合させるシステムであって、該システムは：
クライアントのレートでグラフィカルデータを処理するクライアントエージェントと、
ネットワークを介して該クライアントエージェントに接続されるサーバエージェントであって、該グラフィカルデータをサーバのレートで処理し、該クライアントのレートと該サーバのレートとの間の差に応答して、該サーバのレートを適合させる、サーバエージェントと、
を備えるシステム。
【請求項４３】
前記サーバのレートは、前記サーバのフレームバッファをスクロールすることにより決定される、請求項４２に記載のシステム。
【請求項４４】
通信ネットワークを介してサーバに接続されるクライアントにおいて、オフスクリーン面の形成を遠隔制御する方法であって、該方法は、サーバにおいて実行され：
該クライアントに指示して、該オフスクリーン面に割り当てるための第１のメモリ領域を選択させ、該第１のメモリ領域は、該クライアントに接続されるメモリに対応する、ステップと、
グラフィカルデータの印を該クライアントに伝送するステップと、
該クライアントに指示して、該インデックスと関連する該グラフィカルデータを、該第１のメモリ領域内の位置確認の位置にコピーさせるステップと
を包含する、方法。
【請求項４５】
前記オフスクリーン面と関連する複数の属性を指定するステップをさらに包含する、請求項４４に記載の方法。
【請求項４６】
前記グラフィカルデータの前記印は、ファジーキーに対応し、該ファジーキーは、前記クライアントに接続された永続化ストレージメモリ内で該グラフィカルデータの位置を識別する、請求項４４に記載の方法。
【請求項４７】
前記グラフィカルデータの前記印は、インデックスに対応し、該インデックスは、前記クライアントに接続されたキャッシュメモリ内の該グラフィカルデータの位置を識別する、請求項４４に記載の方法。
【請求項４８】
前記クライアントに指示して、前記オフセットスクリーン面における前記コピーされたグラフィカルデータを用いて、該クライアントと関連するオンスクリーン面を更新させる、ステップをさらに包含する、請求項４４に記載の方法。
【請求項４９】
前記オフセットスクリーン面の複製を、前記サーバに接続されたメモリに格納するステップをさらに包含する、請求項４４に記載の方法。
【請求項５０】
エラー状態の表示を受信すると、前記オフスクリーン面の少なくとも１つの部分をクライアントに伝送するステップと、
該クライアントに指示して、前記複製オフスクリーン面の該少なくとも１つの部分を、該クライアントと関連するオンスクリーン面にコピーさせるステップと
をさらに包含する、請求項４９に記載の方法。
【請求項５１】
ａ）前記クライアントに指示して、第２のメモリ領域を選択させる、ステップと、
ｂ）該クライアントに指示して、前記グラフィカルデータを、該第２のメモリ領域内の位置確認の位置にコピーさせる、ステップと
をさらに包含し、
ステップａ）は、エラー状態の表示を受信するステップに応答して実行される、請求項４４に記載の方法。
【請求項５２】
前記グラフィカルデータは、ビットマップに対応する、請求項４４に記載の方法。
【請求項５３】
前記グラフィカルデータは、絵文字に対応する、請求項４４に記載の方法。
【請求項５４】
前記グラフィカルデータは、ストリップに対応する、請求項４４に記載の方法。
【請求項５５】
通信ネットワークを介してサーバに接続されるクライアントにおいて、オフスクリーン面の形成をサーバにより遠隔制御するシステムであって、該システムは：
該クライアント上で実行するクライアントエージェントと、
該クライアントエージェントに接続された第１のメモリ領域と、
第１のメモリ領域内に格納されるオフセットスクリーン面と、
該サーバ上で実行するサーバエージェントであって、該クライアントエージェントに接続されるサーバエージェントと、
グラフィカルデータであって、関連する印を有し、該クライアントにより格納される、グラフィカルデータと
を備え、
該サーバエージェントは、
該グラフィカルデータの印を該クライアントエージェントに伝送し、
該クライアントエージェントに指示して、該印と関連する該グラフィカルデータを、該第１のメモリ領域内の位置確認の位置にコピーさせる、システム。
【請求項５６】
前記グラフィカルデータの前記印は、ファジーキーに対応し、該ファジーキーは、前記クライアントに接続された永続化ストレージメモリ内の該グラフィカルデータの位置を識別する、請求項５５に記載のシステム。
【請求項５７】
前記グラフィカルデータの前記印は、インデックスに対応し、該インデックスは、前記クライアントに接続されたキャッシュメモリ内の該グラフィカルデータの位置を識別する、請求項５５に記載のシステム。
【請求項５８】
前記オフスクリーン面の属性は、前記サーバエージェントにより指定される、請求項５５に記載のシステム。
【請求項５９】
前記サーバエージェントに接続されたメモリに格納される前記オフスクリーン面の複製をさらに含む、請求項５５に記載のシステム。
【請求項６０】
クライアントエージェントに接続されるオンスクリーン面であって、該クライアントエージェントは、前記複製オフスクリーン面を用いて該オンスクリーン面を更新し、エラー状態が生じると、第１のメモリ領域内に格納される該オフスクリーン面を放棄するステップをさらに包含する、請求項５９に記載のシステム。
【請求項６１】
前記グラフィカルデータは、ビットマップに対応する、請求項５５に記載のシステム。
【請求項６２】
前記グラフィカルデータは、絵文字に対応する、請求項５５に記載のシステム。
【請求項６３】
前記グラフィカルデータは、ストリップに対応する、請求項５５に記載のシステム。
【請求項６４】
サーバからクライアントに通信ネットワークを介して伝送されるグラフィカルデータの量を効率的に低減する方法であって、該方法は、
経路を複数のストリップに分割するステップであって、該複数のストリップの各々は、ストリップ長さと、これと関連する絶対角度とを有する、ステップと、
該複数のストリップの各々の該絶対角度と関連する量子化された角度を決定するステップと、
該サーバにおいてプロトコルストリームを形成するステップであって、該プロトコルストリームは、該経路の開始座標および該ストリップ長さと、該複数のストリップの各々の量子化された角度の印とを含む、ステップと、
該プロトコルストリームを、該サーバから該クライアントに該通信ネットワークを介して伝送するステップと
を包含する、方法。
【請求項６５】
前記プロトコルストリームを前記クライアントに伝送する前に、前記経路の開始座標および前記ストリップ、ならびに前記複数のストリップの各々の前記量子化された角度の印を圧縮するステップをさらに包含する、請求項６４に記載の方法。
【請求項６６】
前記プロトコルストリームは、前記複数のストリップのうちの少なくとも１つと関連する印を含み、該印は、前記クライアントに接続されたキャッシュメモリ内の該複数のストリップのうちの該少なくとも１つの位置を識別するインデックスに対応する、請求項６４に記載の方法。
【請求項６７】
前記プロトコルストリームは、前記複数のストリップのうちの少なくとも１つと関連する印を含み、該印は、前記クライアントに接続された永続化ストレージメモリ内の該複数のストリップのうちの少なくとも１つの位置を識別する、請求項６４に記載の方法。
【請求項６８】
前記量子化された角度は、量子化された角度デルタに対応する、請求項６４に記載の方法。
【請求項６９】
サーバからクライアントに通信ネットワークを介して伝送されるグラフィカルデータの量を効率的に低減する方法であって、該方法は、
経路を複数のストリップに分割するステップであって、該複数のストリップの各々は、座標系内に定義される開始点および終了点を有し、該座標系は、該クライアントと関連するディスプレイ面の領域に対応する、ステップと、
該座標系を複数の量子化された角度に量子化するステップと、
該複数のストリップのうちの第１のストリップの該終了座標を決定するステップと、
該第１のストリップの該終了座標を正規化して、該座標系の原点に対応させるステップと、
該第１のストリップの該終了座標を、該複数のストリップの第２のストリップの開始座標と関連付けるステップと、
該座標系の、該複数の量子化された角度のうちの１つを選択するステップであって、該選択された量子化された角度は、該第２のストリップの近似角度に対応する、ステップと、
該第１のストリップの該終了座標と該第２のストリップの終了座標との間の差、および該量子化された角度の表示を該クライアントに伝送するステップと
を包含する、方法。
【請求項７０】
サーバからクライアントに通信ネットワークを介して伝送されるグラフィカルデータの量を効率的に低減するシステムであって、該システムは、
該サーバ上で動作し、通信ネットワークを介して該クライアントに接続されるサーバエージェントを備え、該サーバエージェントは、
ａ）経路を複数のストリップに分割し、該複数のストリップの各々は、ストリップ長さと、これと関連する絶対角度とを有し、
ｂ）該複数のストリップの各々について、絶対角度と関連する量子化された角度を決定し、
ｃ）該サーバにおいてプロトコルストリームを形成し、該プロトコルストリームは、該経路の開始座標および該ストリップ長さと、該複数のストリップの各々の該量子化された角度の印とを含み、
ｄ）該プロトコルストリームを該サーバから該クライアントに該通信ネットワークを介して伝送する、システム。
【請求項７１】
前記サーバエージェントは、前記プロトコルストリームを前記クライアントに伝送する前に、前記経路の開始座標および前記ストリップ、ならびに前記複数のストリップの各々の前記量子化された角度の印を圧縮する、請求項７０に記載のシステム。
【請求項７２】
前記プロトコルストリームは、前記複数のストリップのうちの少なくとも１つと関連する印を含み、該印は、前記クライアントに接続されたキャッシュメモリ内の該複数のストリップのうちの少なくとも１つの位置を識別するインデックスに対応する、請求項７０に記載の方法。
【請求項７３】
前記プロトコルストリームは、前記複数のストリップのうちの少なくとも１つと関連する印を含み、該印は、前記クライアントに接続された永続化ストレージメモリ内の該複数のストリップのうちの少なくとも１つの位置を識別する、請求項７０に記載の方法。
【請求項７４】
前記量子化された角度の前記印は、量子化された角度デルタの該印に対応する、請求項７０に記載の方法。
【請求項７５】
サーバからクライアントに通信ネットワークを介して伝送されたグラフィカルデータの量を効率的に低減するシステムであって、該システムは、
該サーバ上で動作し、該通信経路を介して該クライアントに接続されるサーバエージェントを備え、該サーバエージェントは、
ａ）経路を複数のストリップに分割し、該複数のストリップの各々は、座標系内で定義された開始座標と終了座標とを有し、該座標系は、該クライアントと関連するディスプレイ面の領域に対応し、
ｂ）該座標系を複数の量子化された角度に量子化し、
ｃ）該複数のストリップのうちの第１のストリップの終了座標を定義し、
ｄ）該第１のストリップの該終了座標を正規化して、該座標系の原点に対応させ、
ｅ）第１のストリップの該終了座標を、該複数のストリップのうちの第２のストリップの開始座標と関連付け、
ｆ）該座標系の量子化された複数の角度のうちの１つを選択し、該選択された、量子化された角度は、該第２のストリップの近似角度に対応し、
ｇ）該第１のストリップの終了座標と第２のストリップの終了座標との差および該量子化された角度の表示を該クライアントに伝送する、システム。
【発明の詳細な説明】
【０００１】
（関連出願の相互参照）
本発明は、２０００年５月２６日に出願された米国仮特許第６０／２０７，５３２号および２０００年８月１４日に出願された米国仮特許第６０／２２５，２１７号の利益を主張し、これらの出願の全体を本明細書中で参考として援用する。
【０００２】
（発明の分野）
概して本発明は、分散システムにおけるアプリケーションサーバとシンクライアントとの間の通信に関し、特に低帯域幅転送プロトコルメカニズムを介して伝送されるグラフィカルディスプレイデータ量の低減に関する。
【０００３】
（発明の背景）
分散コンピュータシステムは、アプリケーション実行の分散の技術を利用する。より詳細には、アプリケーションサーバは、アプリケーションプログラムをローカルに実行し、そのアプリケーションの出力データをクライアント／ネットワークユーザに供給し、次いでユーザのローカルコンピュータに接続されたディスプレイスクリーン上にその結果を表示する。サーバにおいてアプリケーション処理機能を実行し、クライアントにおいてアプリケーション出力を表示することによって、これらの分散システムは、サーバおよびクライアントリソースを最大限に利用する。すなわち、より可能なサーバが、潜在的により高い映像性能を有するクライアントがその出力を表示している間、計算集中アプリケーション処理機能およびメモリ集中アプリケーション処理機能を実行する。アプリケーションプログラムの実行中に、クライアントのユーザは、クライアントのディスプレイ上のアプリケーション出力データを閲覧し、キーボードまたはマウス入力によってアプリケーションプログラムと双方向通信する。クライアントユーザの入力は、アプリケーションプログラムの動作に影響を与える所定のアクションを実行することをアプリケーションサーバに要求することと対応する。このアプリケーションサーバは、さらなる処理のために、これらの要求をアプリケーションに渡す。またこのアプリケーションサーバは、アプリケーションプログラムによって生成され、典型的にはアプリケーションサーバのオペレーティングシステムを対象としたこのアプリケーション出力データを傍受し、そして表示するためにこのデータの全てまたは一部をクライアントに転送する。ユーザの観点から、アプリケーションプログラムは、リモートサーバ上で実際に実行され、ローカルに表示されていても、ローカルに実行されているように見える。
【０００４】
分散システムの性能は、クライアントおよびサーバに接続されるネットワークの容量、すなわちネットワークを介して転送されるグラフィカルデータ（アプリケーション出力データに対応する）の量にかなり依存する。一般的に、アプリケーションサーバおよびクライアントワークステーションは、アプリケーションプログラムがローカルに実行される場合、利用可能である帯域幅よりも低帯域幅で処理されるトランスポートメカニズム（シリアルライン、電話回線、ローカルエリアネットワークおよび広域ネットワーク等）によってのみリンクされるために、分散システムの認識された性能が損害を受け得る。従って、分散システム／ソフトウエアの製造では、継続的にこのようなシステムの性能を改良するように努める。
【０００５】
（発明の要旨）
本発明は、サーバとクライアントとの間で転送されるグラフィカルデータ（例えば、ビットマップグラフィカルデータ、符号化されたビットマップ、絵文字（ｇｌｙｐｈ）およびラインデータ）の量を低減することによって分散されたシステムの性能を改良する。本発明は、例えばグラフィカルデータをより小さなオブジェクトに符号化すること、オブジェクトの印（ｉｎｄｉｃｉａ）を有するグラフィカルオブジェクトを示すこと、プロトコルストリーム内でデータの反復を増加し、圧縮アルゴリズムをより効率的に動作させること、同一／繰り返しグラフィカルオブジェクトの転送前にトラッキングし、利用すること（ｌｅｖｅｒａｇｉｎｇ）、ネットワーク性能またはクライアントとサーバとの間の性能の不整合に応答して処理活動または符号化技術の速度に適用させることといった、いくつかの異なる方法によってこの低減を達成する。
【０００６】
一実施形態では、本発明はアプリケーションサーバノードからクライアントノードにグラフィカルディスプレイデータの効率的な転送を可能にする。この実施形態では、本発明は、サーバ上で実行するアプリケーションによって発行される複数のグラフィカルディスプレイ情報コマンドを妨害する。一旦これらのコマンドが妨害され、または別の方法で入手されると、これらのコマンドがリモートクライアントノードへのさらなる転送のために選択されるべきかどうかを判定するように分析される。次いで、選択されたコマンドは、リモートクライアントノードへの最終的な転送のためにプロトコルパケットストリームに符号化かつパッケージングされる。転送の前に、パケットストリームは、符号化されたパケットに圧縮技術を適用することによってさらに圧縮され得る。
【０００７】
本発明の符号化技術は、圧縮アルゴリズムが繰り返しデータのためのポインタを置換することを可能にするプロトコルストリームに繰り返し組み込むことによって、プロトコルパケットストリームの圧縮を実質的に最大化する。この技術は、単に転送前の符号化を介してデータ量を低減させるのではなく、圧縮アルゴリズムの効率を最大化することに集中する。この符号化スキームによって、圧縮の程度が、多くのタイプのグラフィカルデータに対して実質的に増加されるという結果になる。本発明の符号化技術は、グラフィカルデータを符号化し、繰り返されるグラフィカルデータの一部が同じ方式で符号化される。次いで圧縮アルゴリズムは、この繰り返し符号化されたデータ上で動作し、より高い程度の効率を実現する。
【０００８】
一実施形態では、本発明は、クライアントに接続されたリモートディスプレイデバイスに転送された繰り返しグラフィカルデータの量を効率的に低減する。この実施形態では、サーバエージェントは、グラフィカルデータに関連したインデックス（このインデックスは、サーバエージェントによってサーバ上で以前に格納された）を検索する。またこのインデックスは、グラフィカルデータのクライアントデータへの以前の転送を示す。インデックスまたはハンドルは、以前に転送されたグラフィカルデータを現在格納する、クライアントのキャッシュメモリにおけるメモリ配置を示す。インデックスが見出された場合、インデックスはクライアントエージェントに送信され、従ってグラフィカルデータ自体を転送する必要性を回避する。クライアントエージェントは、インデックスによって識別されたキャッシュ位置に格納されたグラフィカルオブジェクトを獲得し、サーバエージェントによって指示されるようにさらなる処理活動を実行する。本発明の一局面では、サーバエージェントとクライアントエージェントとの間で送信されたコマンドおよび情報は、サーバにおいてキューされる。次いでキューにおけるコマンドは、クライアントとサーバエージェントとの間またはコンピュータ間の相対的な性能の評価に従って処理され得る。
【０００９】
サーバエージェントがインデックスを配置することができない場合、サーバエージェントは、グラフィカルデータに関連するファジーキーに対するファジーデータベースを検索する。例えば、ファジーキーは、グラフィカルデータの長さに対応する。ファジーキーは、グラフィカルデータが一度にクライアントに転送され、グラフィカルデータがクライアントの永続化ストレージ内に格納されるかなりの可能性があることを示す。１つ以上のファジーキーが、クライアントとサーバエージェントとの間のセッションを開始する際に、サーバエージェントに供給される。あるいは、ファジーキーが所定のポーリング間隔に従ってサーバエージェントに転送される。ファジーキーがどのように受信されたかにかかわらず、サーバエージェントは、クライアント／サーバセッションの間、以後の使用のため、それらのキーをファジーデータベースに格納する。また、特定のセッションに関連するファジーデータベースは、セッションの期間を超えて保守され得、そのデータベースは、例えば、クライアントエージェントに、特定のセッションからグラフィカルデータを継続的にキャッシュさせ、さらなるセッションの間、サーバエージェントに、クライアントの継続的にキャッシュされたグラフィカルデータからサーバ上にファジーデータベースを劇的に構築させることによってさらなるセッションに対して利用可能である。これは、頻繁であるが短いセッション存在する。
【００１０】
ファジーキーが配置される場合、サーバエージェントは、クライアントエージェントへのコマンド（例えば、永続化ストレージに格納されたグラフィカルデータを取り出し、このデータをその揮発性メモリにコピーする）と共にファジーキーを転送する。クライアントエージェントがグラフィカルデータの取り出しに失敗する場合、サーバエージェントがリカバリマーカーと共にグラフィカルデータをクライアントエージェントに転送し得る。
【００１１】
サーバエージェントがファジーデータベース内にファジーキーを配置することができない場合、サーバエージェントはファジーキーを形成し、ファジーキーをファジーデータベース内に格納する。次いでサーバエージェントは、ファジーキー、インデックス、およびグラフィカルデータをクライアントエージェントに転送し、クライアントエージェントは、このデータをインデックスに関連する、クライアント揮発性メモリに格納するように命令される。クライアントサーバセッションが継続し、クライアント揮発性メモリが満たされる場合、グラフィカルデータは、クライアントの持続的格納装置に転送される。一局面では、クライアントエージェントは、ファイル名の一部としてファジーキーを反映する持続的ストレージ内に常駐するファイルにグラフィカルデータを格納する。
【００１２】
本発明の一局面では、サーバエージェントは、サーバエージェントならびに／あるいはクライアントの不揮発性メモリまたは持続ストレージによって識別されたグラフィカルデータを用いてクライアントエージェントに接続されたオフスクリーン（ｏｆｆ−ｓｃｒｅｅｎ）面を更新するようにクライアントエージェントに命令する。これらの命令は、クライアントノードのオフスクリーン面およびオンスクリーン面が双方向通信する場合のような、オフスクリーン面の変化に応答してトリガされ得る。クライアントエージェントがサーバエージェント命令によるオフスクリーン面の更新に失敗する場合、サーバエージェントはグラフィカルデータをクライアントエージェントに転送し、クライアントエージェントが、壊れたオンスクリーン面またはオフスクリーン面の一部を送信されたグラフィカルデータで更新するように指示する。
【００１３】
さらに、転送前のグラフィカルデータを符号化するために使用された符号化技術が、クライアントエージェントとサーバエージェントとを接続するネットワークのネットワーク状態の評価に基づいて選択され得る。この評価は、特定の符号化されたグラフィカルデータを受け取るように拡張された時間の量に関連するクライアントエージェントによって測定される時間差に対応し得る。
【００１４】
一実施形態では、本発明はネットワーク状態の変更に応答して、処理速度に適応する。本発明の一局面では、サーバエージェントは第１の速度でクライアントエージェントにアドレスされたグラフィカルデータを処理する。クライアントおよびサーバエージェントを結合するネットワークのネットワーク状態を決定することによって、サーバエージェントは、ネットワーク状態の変化に応答して第１の速度から第２の速度に処理速度を調整し得る。サーバエージェントは、処理されたグラフィカルデータをクライアントエージェントに転送することによって、およびクライアントにグラフィカルデータの転送または受領に関連する時間差を測定するように命令することによって、ネットワーク条件についての情報を判定し得る。この方式では、時間差はネットワーク状態のインジケータを提供し、サーバエージェントは、この時間差に従って第２のデータ速度を合理的に選択し得る。同様に、第１の速度でサーバエージェントによってグラフィカルデータを処理する間に使用される符号化技術は、サーバエージェントによって決定されるネットワーク状態の変化に応答して第２の符号化スキーム／技術に改変され得る。ネットワーク状態は上述の時間差に従って評価され得る。一旦、第２の符号化技術がサーバエージェントによって選択される場合、サーバエージェントは、第２の符号化技術を用いて以後のグラフィカルデータを処理する。
【００１５】
一実施形態では、本発明はネットワークを介してサーバに接続されたサーバとクライアントとの間の性能不整合に応答するサーバの処理速度に適応する。動作の際、サーバエージェントは、グラフィカルデータを処理し、このような処理に関連する第１の期間を決定する。例えば、第１の期間は、サーバのフレームバッファをスクロールすることによって決定され得る。またクライアントエージェントは、グラフィカルデータを処理し、その処理に関連する第２の期間を決定する。次いでサーバエージェントは、第１の時間期間と第２の時間期間との間の時間差を決定し、それに従ってその処理速度を調整する。
【００１６】
一実施形態では、本発明は、通信ネットワークを介してサーバからクライアントに転送されたグラフィカルラインデータの量を効率的に低減する。サーバエージェントは、ラインまたは領域を規定する経路を複数のストリップに分離し、各ストリップは、座標系（例えばデカルト座標系）で規定される開始座標および終了座標を有する。座標系は、クライアントに関連するディスプレイ面の領域に対応する。本発明の一局面では、サーバエージェントは、座標系を複数の量子化された角度（例えば、１６個の量子化された角度）に量子化し、複数のストリップの１つの終了座標を決定する。次いで座標系は、原点が終了座標と一致するように正規化される。次いで経路内の隣接ストリップの開始座標は、サーバエージェントによって第１のストリップの終了座標と関連付けられる。次いでサーバエージェントは、隣接ストリップの近似角度に対応するように座標系の量子化されたセグメントの１つを選択する。この技術は、２つのストリップ（すなわち、ストリップの長さ）の終了座標間の差および選択された量子化された角度の転送を可能にし、従って、座標のセットまたは１つの座標、ならびに各ストリップに対する高精度な角度の両方を送信する必要性を回避する。
【００１７】
本発明の一実施形態では、サーバエージェントは、通信ネットワークを介してサーバに接続される、クライアントにおけるオフスクリーン面の形成をリモートに制御する。サーバエージェントは、特定の大きさまたは種類のオフスクリーン面がクライアントメモリ内で形成され、クライアントエージェントが、適切なフォーマットを有する第１のメモリ領域を選択および割り当てることによって応答して、クライアントメモリ内の複数の有用なメモリ領域からオフスクリーン面を表すことをクライアントエージェントに通知する。次いでサーバエージェントは、ビットマップまたはビットマップの表示（例えば、インデックスまたはファジーキー）のいずれかをクライアントエージェントに転送し、第１のメモリ領域内の特定の領域にビットマップをコピーするようにクライアントエージェントに命令する。一旦、ビットマップがオフスクリーン面にコピーされると、ビットマップは、クライアントのオンスクリーン面を更新するために使用され得る。またこのようなオフスクリーン動作は、ラインまたはテキストのような非ビットマップデータに対して動作され得る。
【００１８】
またサーバエージェントは、サーバのローカルメモリにおいてクライアントのオフスクリーン面の複製を格納することによってエラー条件に応答し得る。クライアントメモリの予め選択されたメモリ領域が特定のオフスクリーン面を格納するのに十分に大きくないといったエラー条件のイベントでは、クライアントエージェントは非同期的にサーバエージェントにエラーを通知する。エラー条件に応答して、サーバエージェントは、オフスクリーン面の複製またはビットマップのコピーの少なくとも一部をクライアントエージェントに転送し、転送されたオフスクリーン面データの複製を用いてクライアントのオンスクリーン面を更新するように命令する。
【００１９】
以下の記載は、図面を参照して以下の本発明の詳細な説明からより容易に理解される。
【００２０】
（発明の詳細な説明）
本発明は、アプリケーションプログラムを実行しているアプリケーションサーバとアプリケーションプログラムの出力データを局所的に表示している加入者クライアントとの間で、そのクライアントとサーバとの間で伝送されたプロトコルストリーム内で反復する比較的小さな表示にデータをコード化することにより、送信されたグラフィカルデータの量を低減する。このようにして、本発明は、伝送される必要のあるそれぞれ個々のデータ要素のサイズを最小化し、そして反復性のコード化されたデータ上でより効果的に作動する圧縮アルゴリズムが、より大きな程度の圧縮効率を実現できるように、プロトコルストリーム内のデータの反復尤度を向上させる。本発明は、この増大した圧縮を実現するために以下を含む多数の技術（より以前に発行されたコマンドに取って代わるより後に発行されたコマンドのためのコマンドキューのスキャニング、クライアント−サーバセッション中に以前に遭遇したデータの圧縮を向上するディスクキャッシング技術、関連のストリップの終点および／または角度の両方を送信することを避けるために量子化された領域を使用する相対座標の伝送、およびクライアント−サーバセッション中の性能を向上させるためのスクリーン表面外での操作）を使用する。本発明はまた、速いサーバと比較的遅いネットワークまたはクライアントとの間に性能の不適合がある場合に遭遇するオーバースクロールの問題の頻度を低減する。
【００２１】
図１を参照すると、１つ以上のクライアントノード１１０’、１１０”（本明細書中以後、各クライアントノードまたは複数のクライアントノードは、一般に１１０で表す）は、通信ネットワーク１４０を介して、１つ以上のサーバノード１５０’、１５０”（本明細書中以後、各サーバノードまたは複数のサーバノードは、一般に１５０で表す）と通信している。ネットワーク１４０は、ローカルエリアネットワーク（ＬＡＮ）、中範囲エリアネットワーク（ＭＡＮ）、あるいはインターネットすなわちワールドワイドウェブのような広域ネットワーク（ＷＡＮ）であり得る。クライアントノード１１０のユーザは、種々の接続（標準電話線、ＬＡＮまたはＷＡＮリンク（例えば、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）、ブロードバンド接続（ＩＳＤＮ、フレームリレー、ＡＴＭ）、および無線接続を含む）を介して、ネットワーク１４０に接続され得る。接続は、種々の通信プロトコル（例えば、ＴＣＰ／ＩＰ、ＩＰＸ、ＳＰＸ、ＮｅｔＢＩＯＳ、および直接非同期接続）を用いて確立され得る。ある特定の有利な実施形態では、用いられるプロトコルは、Ｃｉｔｒｉｘ　Ｓｙｓｔｅｍｓ，Ｉｎｃ．（ＦｌｏｒｉｄａのＦｏｒｔ　Ｌａｕｄｅｒｄａｌｅ）により製造された独立演算アーキテクチャプロトコル、またはＭｉｃｒｏｓｏｆｔ　Ｃｏｒｐｏｒａｔｉｏｎ（ＷａｓｈｉｎｇｔｏｎのＲｅｄｍｏｎｄ）により製造されたリモートディスプレイプロトコルであり得る。
【００２２】
クライアントノード１１０は、任意のパーソナルコンピュータ（例えば、２８６、３８６、４８６、ペンティアム（Ｒ）、ペンティアム（Ｒ）ＩＩ、マッキントッシュコンピュータ（Ｒ））、ウィンドウズ（Ｒ）ベースの端末、ネットワークコンピュータ、無線デバイス、情報機器、ＲＩＳＣパワーＰＣ、Ｘ−デバイス、ワークステーション、ミニコンピュータ、メインフレームコンピュータ、またはウィンドウズ（Ｒ）ベースのデバイスと小さなディスプレイプレゼンテーションプログラムを実行するに十分なメモリとを有する他の演算デバイスであり得る。ディスプレイプレゼンテーションプログラムは、グラフィカルディスプレイを与えるために、ネットワーク１４０を介してアプリケーションサーバ１５０によりデバイスに送信されたコマンドおよびデータを使用する。分散したコンピュータシステムモデルでは、アプリケーションプログラムの実行は、主にアプリケーションサーバ１５０で行われ、ユーザインターフェイス、キーストローク、およびクライアント側の入力で生成したマウスの動きは、ネットワーク１４０を介してクライアントノード１１０へ、およびクライアントノード１１０から伝送される。
【００２３】
クライアントノード１１０は、典型的にはプロセッサ１１２、揮発性メモリ１１４（例えば、ＲＡＭキャッシュ）、オペレーティングシステム１１６、クライアントエージェント１１８、持続性ストレージ１２０、ネットワークインターフェイス１２２（例えば、ネットワークインターフェイスカード）、キーボード１２４、マウス１２６、およびディスプレイ１２８を含む。クライアントノード１１０によりサポートされたウィンドウズ（Ｒ）型プラットフォームは、ウィンドウズ（Ｒ）３．ｘ、ウィンドウズ（Ｒ）９５、ウィンドウズ（Ｒ）９８、ウィンドウズ（Ｒ）ＮＴ３．５１、ウィンドウズ（Ｒ）ＮＴ４．０、ウィンドウズ（Ｒ）２０００、ウィンドウズ（Ｒ）ＣＥ、ＭＡＣ／ＯＳ、Ｊａｖａ（Ｒ）、およびＵＮＩＸ（Ｒ）を含み得るが、これらに限定されない。クライアントエージェント１１８は、サーバノード１５０からのコマンドおよびデータ、ならびにクライアントノード１１０のユーザ（図示せず）からのコマンドおよびデータを受け取るソフトウェアプログラムに対応する。クライアントエージェント１１８は、クライアントノード１１０の他のコンポーネントと相互作用する場合（ディスプレイ１２８上にデータを出力するようにオペレーティングシステム１１６に指示する場合）に、受け取った情報を使用する。クライアントエージェント１１８はまた、サーバが発行したコマンドまたはクライアントノード１１０におけるユーザアクションに応じて、サーバノード１５０にリクエストおよびデータを伝送する。
【００２４】
同様に、サーバノード１５０は、プロセッサ１５２、揮発性メモリ１５４、オペレーティングシステム１５６、アプリケーションプログラム１５８、サーバエージェント１６０、持続性ストレージ１６２、およびネットワークインターフェイス１６４を含む。サーバエージェント１６０は、クライアントエージェント１１８、ならびにリモートディスプレイおよびアプリケーションプログラム１５８の操作性をサポートするサーバノード１５０の他のコンポーネントとインターフェイスするソフトウェアプログラムに対応する。
【００２５】
各アプリケーションサーバ１５０は、クライアントノード１１０によってアクセスされ得る１つ以上のアプリケーションプログラム１５８のホストとなる。このようなアプリケーションの例は、ＭＩＣＲＯＳＯＦＴ　ＷＯＲＤのようなワードプロセッサプログラムおよびＭＩＣＲＯＳＯＦＴ　ＥＸＣＥＬのような表計算プログラム（これらのアプリケーションは両方とも、ＲｅｄｍｏｎｄのＭｉｃｒｏｓｏｆｔ　Ｃｏｒｐｏｒａｔｉｏｎ（Ｗａｓｈｉｎｇｔｏｎ）により製造される）、財務報告プログラム、顧客登録プログラム、技術サポート情報を提供するプログラム、顧客データベースアプリケーション、またはアプリケーション設定マネージャを含む。
【００２６】
アプリケーションプログラム１５８の実行中、サーバ１５０は、転送機構（サーバエージェント１６０の一部）を介して、クライアントノード１１０と通信する。ある実施形態では、転送機構は複数の仮想チャンネルを提供し、この仮想チャンネルの１つはサーバノード１５０からクライアントノード１１０へグラフィカルスクリーンデータを伝送するためのプロトコルを提供する。サーバ１５０は、（アプリケーションプログラム１５８により生成され、サーバのオペレーティングシステム１５６で標的にされた）グラフィカルインターフェイスコマンドを妨害し、そしてそのグラフィカルインターフェイスコマンドを、転送機構を介して伝送するために適したプロトコルパケットに変換するプロトコルドライバ（サーバエージェント１６０の一部）を実行する。
【００２７】
図２を参照するとある実施形態では、サーバエージェント１６０は、アプリケーションプログラム１５８により発行され、オペレーティングシステム１５６に向けられたグラフィカルインターフェイスコマンドを妨害し（ステップ２０２）、コマンドおよびアプリケーションプログラム１５８に関連したグラフィカルデータを符号化し（ステップ２０４）、その符号化されたグラフィカルデータを圧縮し（ステップ２０６）、妨害されたコマンドおよび圧縮された符号化データを組み込む転送プロトコルパケットを生成し（ステップ２０８）、そしてその転送プロトコルパケットをターゲットクライアントノード１１０に伝送する（ステップ２１０）。グラフィカルデータファジースプレイ１２８上に表示され得る任意のタイプのデータ（例えば、ビットマップ、絵文字、座標、線のリスト、ストリップなど）のことを言う。本明細書中以後、特定のタイプのグラフィカルデータまたはグラフィカルオブジェクトに適用される技術の説明は、すべてのタイプのグラフィカルデータに適用されるものと解釈され得る。
【００２８】
より詳細には、サーバエージェント１６０のプロトコルドライバは、グラフィカルインターフェイスコマンドを妨害する（ステップ２０２）。１つの実施形態では、プロトコルドライバは、アプリケーションプログラム１５８により作成された高レベルアプリケーションプログラミングインターフェイスコールを妨害する。１つの実施形態では、プロトコルドライバは、ウィンドウズ（Ｒ）ベースのオペレーティングシステムにより提供されたＧＤＩコマンドを妨害する。別の実施形態では、プロトコルドライバは、ＭＡＣ／ＯＳベースのオペレーティングシステムにより提供されたＱＵＩＣＫＤＲＡＷコマンドを妨害する。さらに他の実施形態では、プロトコルドライバは、サーバノード１５０のグラフィカルディスプレイと関連したデバイスドライバへのインターフェイスコールなどの低レベルコマンドを妨害する。さらに他の実施形態では、グラフィカルインターフェイスコマンドは、妨害されるよりもむしろ複製される。これらの実施形態では、サーバ１５０およびクライアント１１０上のアプリケーションプログラム出力データの表示は、同一ではないにしても、実質的に類似している。プロトコルドライバは、妨害されたグラフィカルディスプレイコマンドに基づいて転送プロトコルパケットを生成する（ステップ２０８）。プロトコルドライバは、可能性のある妨害されたインターフェイスコマンドのそれぞれのための類似のコマンドを含むプロトコルコマンドセットを使用し得る。あるいは、プロトコルドライバは、妨害されたインターフェイスコマンドのサブセットであるコマンドセットを使用し得る。他の実施形態では、プロトコルコマンドセットは、可能性のある妨害されたインターフェイスコマンドのスーパーセットであり得る。
【００２９】
妨害されたＧＤＩコマンド、およびクライアントのディスプレイ１２８上にアプリケーションプログラム１５８の出力を表示するために、クライアントエージェント１１８に伝送される必要がある影響されたグラフィカルデータのそれぞれに関して、サーバエージェント１６０は、その影響されたグラフィカルデータに関連した独自キー４１２（図４）とともに関連するプロトコルコマンドを待ち行列に入れる。独自キー４１２は、グラフィカルデータを記載し、そして独自に識別する。ある実施形態では、独自キーは、グラフィカルデータ上で６４ビット周期的冗長チェック（ＣＲＣ）を実行することにより生成される。別の実施形態では、６４ビットＣＲＣは、２つの３２ビットＣＲＣとして生成され、グラフィカルデータ上で連続的に、かつ反対方向に実行される。当業者に公知のグラフィカルデータに関連した独自キーを生成する他の方法がまた使用され得る。プロトコルコマンドおよび独自キー４１２は、他のコマンド／独自キーセットトともに、サーバ１５０で待ち行列に入れられる。次いで、待ち行列に入れられたコマンドは、より後に発行されたコマンド（すなわち、待ち行列の後方近辺のコマンド）が、より先に発行されたコマンド（すなわち、待ち行列の前方近辺のコマンド）に取って代わるか否かを確認するためにスキャンされる。より先に発行されたコマンドに取って代わる場合、サーバエージェント１６０はそれらを待ち行列から除去し、このようにして、クライアントエージェント１１８へ不必要なデータを伝送することが回避される。
【００３０】
例えば、迅速な遷移で発行されたデータの次ページを表示するための一連のコマンドは、クライアント１１０で個別に表示される必要はない。表示されるに必要なことはすべて、最後のディスプレイページに発行される。なぜなら、このデータの最後のページはデータの以前のページすべてを上書きするからである。不必要なコマンドおよび以前のページに対応する独自キーをサーバの待ち行列から除去することにより、サーバエージェント１６０は、処理および伝送されるべきデータ量を実質的に低減する。
【００３１】
１つの例示的な実施形態では、不必要なコマンドおよび不透明な動作に関する関連のデータのみが、サーバの待ち行列から除去される。例えば、座標１０、１０、５０、５０を有する矩形領域の生成に関する以前に待ち行列に入れられたコマンドは、座標０、０、１００、１００を有するより大きな／覆い隠す矩形領域の生成に関するより最近に待ち行列に入れられたコマンドに続き、次いで、以前に待ち行列に入れられたコマンドおよび関連のデータは、不必要と見なされ、待ち行列から除去される。
【００３２】
以下の表１は、本発明の１つの実施形態に提供されるプロトコルコマンドの例示のセットを列挙する。
【００３３】
【表１】
2004501445.tif 000003
2004501445.tif 000004
2004501445.tif 000005
【００３４】
一実施形態において、プロトコルコマンドおよび関連付けられたグラフィカルデータを、プロトコルドライバによって生成されたプロトコルパケットストリームの情報の反復を最大化するように構成する。本発明の一局面において、グラフィカルデータはまず符号化され（ステップ２０４）、次いで、符号化されたグラフィカルデータおよび／またはプロトコルコマンドが、プロトコルストリーム（例えば、Ｌｅｍｐｅｌ−Ｚｉｖの圧縮プロトコルを用い得る）の反復の性質を利用した圧縮アルゴリズムを受ける（ステップ２０６）。一実施形態において、クライアントサーバセッションのグラフィカルデータの第１のインスタンスに関して、グラフィカルデータの印は、同じクライアントサーバセッションの間に起こったグラフィカルデータのさらなるインスタンスに関して、ネットワーク１４０を介して伝送されるデータ量を減少するように、プロトコルストリームの対応する符号化されたデータと共に伝達される。続いて、圧縮されたデータは、トランスポートプロトコルパケットにバンドルされて、圧縮解凍および解釈されるように、クライアントノード１１０に伝達される（ステップ２０８）。
【００３５】
１つの例示の実施形態において、アプリケーションプログラム１５８は、ビットマップを描くようにサーバのオペレーティングシステム１５６に指示するＧＤＩコマンドを実行する。サーバエージェント１６０は、このＧＤＩコマンドを傍受し（ステップ２０２）、ＢＩＴＢＬＴコマンドをクライアントエージェント１１８に発行する。ＢＩＴＢＬＴコマンドは、クライアントエージェント１１８に、クライアントのディスプレイ１２８上にアプリケーションプログラムの出力データを表示するように命令する。ＢＩＴＢＬＴコマンドを発行する前に、サーバエージェント１６０は出力データを符号化し（ステップ２０４）、クライアントエージェント１１８に伝達された、圧縮されたプロトコルパケットストリーム中のＢＩＴＢＬＴコマンドと共に、この符号化されたデータを含む。一実施形態において、ビットマップ４１０を記述するデータ（図４）は、ビットマップ４１０中に存在する所定の冗長を利用するように、符号化および圧縮される（ステップ２０４およびステップ２０６）。例えば、ビットマップ４１０は、連続するラスタラインが冗長であるか、または隣接するピクセルが冗長であるようになっている場合がある。
【００３６】
ビットマップまたは他の個別のグラフィカルデータエレメントをその内部データの冗長に基づいて符号化することに加え、本発明は、特定のクライアントサーバセッションの間に以前に遭遇したグラフィカルデータの符号化および圧縮をさらに向上させるキャッシュ技術（ｃａｃｈｉｎｇ　ｔｅｃｈｎｉｑｕｅｓ）も組み込む。例えば、特定のビットマップは、クライアントサーバセッションの間に最初に遭遇した場合、上述のように符号化される。同じクライアントサーバセッションの間の次のビットマップの伝達に関して、比較的大きい符号化されたビットマップの代わりにビットマップの印が伝達され得る。一実施形態において、印は、以前に伝達されたビットマップを含むクライアントの揮発性メモリ内の場所に対応する。
【００３７】
より詳細に、そして図３および図４を参照して、サーバエージェント１６０は、上述のように、一意的なキー４１２を生成し（ステップ３３０）、この一意的なキー４１２をグラフィカルデータ（例えば、ビットマップ４１０）と関連付ける。この関連は実質的に、ビットマップ４１０およびその関連データをグラフィカルオブジェクトとして定義する。グラフィカルオブジェクトは次いで、サーバの揮発性メモリ１５４（例えば、サーバのキャッシュサブシステム）に格納されたデータ構造４１１（例えば、表）に、その一意的なキー４１２および符号化されたデータ４１４と共に登録される（ステップ３４０）。他の実施形態において、ビットマップ関連データは、サーバの永続化ストレージメモリ１６２内に書き込まれ得る。
【００３８】
プロトコルコマンド（例えば、ＢＩＴＢＬＴ）および関連付けられたグラフィカルデータが、（上述したように）後に発行されるコマンドによって取って代わられないと仮定すると、サーバエージェント１６０は、キューからＢＩＴＢＬＴコマンドおよび一意的なキー４１２をデキューして（ステップ３６０）、サーバの揮発性メモリ１５４に格納された表４１１を検索して、一意的なキー４１２が表４１１に以前に格納されているか否かを判定する。一意的なキー４１２が表４１１内にある場合、サーバエージェント１６０は、符号化されたデータ４１４がサーバ１５０によって以前に処理されたと判定する。次いで、サーバエージェント１６０は、インデックス４１６すなわち符号化されたビットマップ４１４に関連付けられたハンドル４１６を表４１１から検索する。インデックス４１６が位置確認されると、サーバエージェント１６０は、符号化されたビットマップ４１４がサーバ１５０によって処理されたということだけでなく、ビットマップ４１４が以前にクライアントエージェント１１８に伝達されたということも判定する。インデックス４１６が表４１１内にない場合、サーバエージェント１６０は、符号化されたビットマップ４１４が以前に伝達されていないと判定する。
【００３９】
一実施形態において、インデックス４１６は、クライアントの揮発性メモリ１１４内の特定の位置を識別する。揮発性メモリ１１４は、以前に伝達された符号化されたビットマップ４１４を格納する。一実施形態において、クライアントエージェント１１８は、サーバエージェント１６０とのクライアントサーバセッションを開始すると、利用可能な揮発性メモリ１１４の一部をサーバエージェント１６０に提供する。セッションが確立されると、サーバエージェント１６０は次いで、クライアントの利用可能な揮発性メモリ１１４の割り当てを制御する。このように、サーバエージェント１６０は、クライアントの揮発性メモリ１１４を符号化されたビットマップ４１４に割り当て、インデックス４１６を、割り当てられたメモリに対するポインタまたは基準として、そして以前に伝達された符号化されたビットマップ４１４の識別子として保持することが可能である。
【００４０】
インデックス４１６がサーバの表４１１内にある場合、サーバエージェント１６０は、インデックス４１６を取得し（ステップ３７０）、関連のプロトコルコマンドと共にインデックス４１６を圧縮し（ステップ３８０）、そして圧縮されたデータをクライアントエージェント１１８に向けられたパケットでネットワーク１４０を介して伝達する。一実施形態において、インデックス４１６は、一意的なキー４１２（例えば、６４ビット）より長さが短く（例えば、１６ビット）、したがって、伝達された場合、より短い帯域幅を用いる。圧縮されたパケットを受信および圧縮解凍すると、クライアントエージェント１１８は、クライアントの揮発性メモリ１１４内の特定のメモリの位置（これは、インデックス４１６によって指定される）にアクセスして、適切なグラフィカルデータ４１０を得る。クライアントエージェント１１８は続いて、圧縮されたパケット内にインデックス４１６を伴うコマンドによって得たグラフィカルデータ４１０を操作する。このように、本発明は、比較的大きいビットマップ、または特定のクライアントサーバセッションの間に以前に遭遇した他のグラフィカルデータを再伝達する必要をなくす。
【００４１】
インデックス４１６がサーバの表４１１内にない場合（したがって、クライアントエージェント１１８に以前に伝達されてない場合）、サーバエージェント１６０は、クライアントの揮発性メモリ１１４の一部をビットマップ４１０に割り当て、メモリの位置を識別するインデックス４１６を形成する。次いで、サーバエージェント１６０は、符号化されたビットマップ４１４（ビットマップ４１０に対応する）、新たに形成されたインデックス４１６、および符号化されたビットマップ４１４に関連付けられた一意的なキー４１２をサーバの表４１１内に格納する。サーバエージェント１６０は次いで、符号化されたビットマップ４１４、インデックス４１６、および関連コマンドを圧縮して、この圧縮されたデータをクライアントエージェント１１８に向けられたパケットで伝達する。受信および圧縮解凍を行うと、クライアントエージェント１１８は、符号化されたデータ４１４を復号し、インデックス４１６によって識別されたメモリの位置に結果のビットマップ４１０を格納し、付随するコマンドによって結果のビットマップ４１０を操作する。あるいは、クライアントエージェント１１８は、インデックス４１６によって識別されたメモリの位置に符号化されたデータ４１４を格納し、結果のビットマップ４１０をさらに操作する必要がある場合にのみ、符号化されたデータ４１４を復号する。このように、クライアントメモリがより効率的に用いられる。
【００４２】
これまで、クライアントメモリの割り当ておよびインデックス形成を制御するサーバエージェント１６０を用いて本発明を説明してきたが、クライアントエージェント１１８がこれらの機能を実行することも可能である。例えば、ビットマップがまず、クライアント−サーバセッションの間に遭遇し、そして符号化され、圧縮され、そして（付随のコマンドを用いるが、インデックス４１６を用いずに）クライアントエージェント１１８に伝達されると、クライアントエージェント１１８は、その揮発性メモリ１１４内にビットマップ４１０を格納する特定の位置を決定し得る。この実施形態において、クライアントエージェント１１８は、符号化されたビットマップおよびその対応するメモリの位置を一意的に識別するインデックス（図示せず）を形成し、このインデックスをサーバエージェント１６０に伝達する。サーバエージェント１６０は、サーバの表４１１内の適切な場所にインデックスを格納する。
【００４３】
サーバエージェント１６０がクライアントの揮発性メモリ１１４の割り当てを制御する実施形態の話を続けて、クライアントエージェント１１８は、サーバエージェント１６０によって指定されたすべてのインデックスの循環キュー４２１を、ここでもサーバエージェント１６０から受信されたキュー保持命令によって保持する。例えば、サーバエージェント１６０は、クライアントの揮発性メモリ１１４がそうでない場合に完全に利用されていると、クライアントエージェント１１８に、所定のブロックのインデックス４１７（例えば、１２８Ｋのメモリに対応する）をその各グラフィカルデータから分離させて、新たに遭遇したグラフィカルオブジェクトを収容する。したがって、次の新たなグラフィカルオブジェクトは以前に用いたインデックスを取得する。
【００４４】
サーバエージェント１６０は、所定の基準によって、インデックスの再割り付けによって影響を受ける各グラフィカルオブジェクトをパージするかまたは保存するかも決定する。サーバエージェント１６０は、この決定をクライアントエージェント１１８に伝える。例えば、サーバエージェント１６０がインデックス０、１、２および３を再割り付けして、そしてハンドル０および２に関連付けられたグラフィカルオブジェクトが削除されるか、またはクライアントの永続化ストレージメモリ１２０内に移動され、そしてハンドル１および３に関連付けられたオブジェクトが保存されると判定すると、サーバエージェント１６０は、クライアントエージェント１１８に０および２を削除（または移動）させ、そして１および３を保存するように命令する。次いで、クライアントエージェント１１８は、各保存されたオブジェクトのインデックスを循環キューの最後尾に移動する。少なくとも１つのインデックスは、移動されたオブジェクトに割り付けるように、キューの最後尾において利用可能なままである。すなわち、一実施形態において、キューの先頭および最後尾は循環キューにおいて同じインデックスを指さない。したがって、移動されたオブジェクトは、異なる物理メモリの位置に格納され、かつ、異なるインデックスに関連付けられる。
【００４５】
クライアントサーバのセッションが継続し、クライアント１１０の限定された揮発性メモリ１１４が以前に伝達されたビットマップ４１０または他のグラフィカルオブジェクトでいっぱいになると、クライアントの循環キュー４２１に実行される保持の動作は通常、より頻繁になる。したがって、揮発性メモリ１１４からクライアントの永続化ストレージメモリ１２０内に移動される、以前に伝達されたグラフィカルオブジェクト４２２の数が増加する。本発明は、以前に伝達されたグラフィカルオブジェクト４２２の印（後述する「ファジーキー」を参照）を検索するための上述のキャッシュ技術をさらに改良する。このグラフィカルオブジェクト４２２の印がサーバの表４１１内に見つからない場合、グラフィカルオブジェクト４２２はクライアントの永続化ストレージメモリ１２０内に格納されている場合がある。このような印が見つかった場合、以前に伝達されたグラフィカルオブジェクト４２２が依然としてローカルに常駐し、クライアントエージェント１１８にアクセス可能であり、そして、したがってグラフィカルオブジェクト４２２がサーバエージェント１５０からクライアントエージェント１１０まで再伝達される必要はないかもしれない尤度が高い。同じ永続化ストレージメモリ１２０を共有し得る他のプログラムまたはクライアントエージェントが、（例えば、新しいオブジェクト用に永続化ストレージメモリ内に空間を作るため）永続化ストレージメモリ１２０からグラフィカルオブジェクト４２２を削除したかもしれないため、このような印が位置確認されると、グラフィカルオブジェクト４２２がローカルに常駐している尤度（但し、確実性ではない）が高いことに留意することは重要である。
【００４６】
より具体的には、ここで図４および図５を参照して、サーバエージェント１６０がサーバのインデックス表４１１内に特定のビットマップ４２２のインデックスを位置確認することが不可能である場合、サーバエージェント１１８は第２の表４１８（以後、「ファジーデータベース」）からビットマップ４２２に関連付けられたエントリ４１９（以後、「ファジーキー」）を検索する（ステップ５２０）。一実施形態において、各ファジーキー４１９は、サーバ表４１１内の一意的なキー４１２と、関連付けられたビットマップ４２２の長さ／サイズとの組み合わせである。ファジーキーは、例えば、サーバ表４１１内の６４ビットの一意的なキー４１２および一意的なキー４１２に関連付けられたビットマップ４２２の長さを演算するために用いられる両方の３２ビットのＣＲＣのＸＯＲ（専用のＯＲ）を介して形成され得る。ファジーデータベース４１８は実質的に、クライアント１１０の永続化ストレージメモリ１２０がその内部にビットマップ４２２のコピーを格納しているか否かに関して最初の予測を提供する。ファジーデータベース４１８がビットマップ４２２に関連付けられたファジーキー４１９を含まない場合、クライアントの永続化ストレージメモリ１２０は恐らくビットマップ４２２の格納されたコピーを有さず、したがって、上述したように、サーバエージェント１６０は、ビットマップ４２２の符号化されたバージョンをクライアントエージェント１１８に伝達する必要がある。一方、ファジーデータベース４１８がビットマップ４２２用のファジーキー４１９を含む場合、ビットマップ４２２がクライアントの永続化ストレージメモリ１２０内に格納されている尤度が高い。
【００４７】
より具体的には、サーバエージェント１６０がファジーデータベース４１８内にビットマップ４２２に関連付けられたファジーキー４１９を見つけなかった場合、サーバエージェント１６０は、ビットマップ４２２（または対応する符号化されたビットマップ）を揮発性メモリ１１４内に格納するようにクライアントエージェント１１８に要求するコマンドを用いて、符号化されたビットマップ（ビットマップ４２２に対応）をクライアントエージェント１１８に送信する（ステップ５３０）。さらに、そして上述したように、サーバエージェント１６０は、ビットマップ４２２に関連付けられたファジーキー４１９をファジーデータベース４１８に追加する（ステップ５４０）。コマンドおよびビットマップ４２２の符号化されたバージョンの伝達の前にファジーデータベース４１８を更新するように、ステップ５３０および５４０の順序を逆にしてもよいことに留意されたい。クライアントエージェント１１８は次いで、サーバエージェント１６０によって指定される、クライアントの揮発性メモリ１１４内の特定の位置にビットマップ４２２をコピーする（ステップ５６０）。
【００４８】
一実施形態において、サーバエージェント１６０は、ビットマップ４２２に関連付けられた符号化されたビットマップがうまく受信そして処理されたという承認をクライアントエージェント１１８から待たない。むしろ、サーバエージェント１６０は、符号化されたビットマップが正しく処理されたと仮定して、クライアントエージェント１１８から承認メッセージが返ってくるのを待たずにプロトコルコマンドをストリーミングし続ける。しかし、サーバエージェント１６０は、最後に読んだ承認以後に発行されたプロトコルコマンドの数を追跡する。数が予め規定された閾値に達すると、サーバエージェント１６０はプロトコルコマンドのさらなる伝達を阻止する。以下により詳細に説明するように、閾値により、クライアントエージェント１１８が、リカバリモード動作の間に入ってくるプロトコルコマンドをキューに入れるために必要なメモリ量の上限を確立することが可能になる。
【００４９】
ファジーキー４１９がファジーデータベース４２０内に見つかった場合、サーバエージェント１６０は、クライアントの永続化ストレージメモリ１２０からクライアントの揮発性メモリ１１４に、ファジーキー４１９に関連付けられたビットマップ４２２をコピーするようにクライアントエージェント１１８に指令するコマンドをクライアント１１０に送信する（ステップ５５０）。このコマンドは、コピーされたビットマップ４２２を受信して格納するクライアント揮発性メモリ１１４内の特定の位置を識別するために、興味のビットマップ４２２を一意的に識別するファジーキー４１９だけでなく、（上述したような）サーバエージェント１６０によって生成された関連付けられたインデックスにも付随する。永続化ストレージメモリ１２０内にその位置を保持するだけでなく、揮発性メモリ１１４内にビットマップ４２２をコピーすることによって、本発明は、第１の要求が発生した際にビットマップ４２２をコピーすることによって、速い連続でまたはキャッシュ活動にあまり介入することなく、受信されたビットマップ４２２を描く幾つかの要求に迅速に応答し得る。
【００５０】
ファジーデータベース４１８内に対応するファジーキー４１９があるにしても、ビットマップ４２２が永続化ストレージメモリ１２０内に現在格納されていない場合、クライアントエージェント１１８は、ビットマップ４２２が無いことを示すメッセージを（サーバエージェント１６０によって以前に発行された「ＣＡＣＨＥ＿ＲＥＡＤ＿ＤＩＳＫ＿ＯＢＪＥＣＴ」のコマンドに応答して）サーバエージェント１６０に返す。このメッセージを受信すると、サーバエージェント１６０は、ビットマップ４２２に関連付けられた符号化されたビットマップデータをクライアントエージェント１１８に再伝達する（ステップ５３０）。サーバエージェント１６０は、クライアントエージェント１１８に送信したが、承認をまだ受信していないすべてのこのようなＣＡＣＨＥ＿ＲＥＡＤ＿ＤＩＳＫ＿ＯＢＪＥＣＴのコマンドのシーケンスリストを保持しているため、後に受信する承認を特定のビットマップ４２２に正しく関連付け得る（これにより、伝達される必要がある符号化されたビットマップを正しく識別する）ことに留意されたい。
【００５１】
一方、クライアントエージェント１１８はリカバリモードに入る。リカバリモードでは、クライアントエージェント１１８は、入ってくるプロトコルストリームの読み出しを続行するが、この処理は行わない。代わりに、クライアントエージェント１１８は、永続化ストレージメモリ１２０内でビットマップ４２２を見つけられなかったコマンドに続いて、サーバ１５０から流れ続けるコマンドストリームを受信するキューを構築する。符号化されたビットマップが受信され、ビットマップ４２２を生成するようにうまく復号されるまで、クライアントエージェント１１８は、ＦＩＦＯの様式でこのキュー内にこれらのコマンドを格納し続ける。入ってくるコマンドストリーム内でなくなったビットマップ４２２を認識するために、クライアントエージェント１１８は、プロトコルストリームからリカバリマーカーを伴ったグラフィカルデータを探す。一実施形態において、リカバリマーカーは、ビットマップ４２２の一意的なキーを備えたＸＯＲｅｄ（すなわち、６４ビットＣＲＣおよび３２ビット長）である特定の擬似ランダム数である。サーバエージェント１６０は、クライアントエージェント１１８から非承認メッセージを受信するとリカバリマーカーを作成する。ビットマップ４２２が到着すると、クライアントエージェント１１８はその揮発性メモリ１１４（すなわち、オブジェクトが当初より永続化ストレージメモリ１２０内に存在している場合の、ビットマップ４２２が格納されている場所）内にビットマップ４２２を格納し（ステップ５６０）、キュー内のコマンドを処理し始める。キュー内のすべてのコマンドを処理した後、クライアントエージェント１１８は、ネットワーク１４０を介してサーバ１５０から入って来るプロトコルコマンドの入って来るストリームの処理を再開する。
【００５２】
上述のリカバリプロセスの利点は、キャッシュミスが生じた際にパイプライン内のコマンドをフラッシュするこれらのキャッシュシステムが被る時間遅延のペナルティが回避される点である。さらに、リカバリプロセスにより、プロトコルコマンドのストリームが妨害されることもなく、サーバエージェント１６０が永続化ストレージメモリ１２０内にビットマップ４２２がないことを当初より知っている場合に、サーバ１５０がクライアント１１０に送信したバイトを数バイト超えて、チャンネル上のトラフィックが増加することもなくなる。
【００５３】
一実施形態において、本発明は、最も昔に用いられおよび／または最も用いられる頻度が少ない、ビットマップ４２２に関連付けられた情報と共に、ファジーキー４１９を符号化することによってそのファイル名が形成されるファイル内にビットマップ４２２を格納することによって、クライアントの永続化ストレージメモリ１２０内のビットマップ４２２の位置の確認を促進する。このように、ファイル名自体が所望の情報を提供し、したがって、ファイルを開けて読む必要がなくなる。ファジーキー４１９をビットマップのファイル名の一部として符号化するとさらに、クライアントエージェント１１８がファイル名からファジーキー情報を迅速に抽出し、クライアント１１０の最初のブートの間、またはクライアント／サーバセッションの開始時にサーバエージェント１６０にファジーキー情報を送信することが可能になる。抽出されたファジーキーは、例えば、最も昔に用いられおよび／または最も用いられる頻度が少ない情報（これもファイル名の一部を形成する）に基づいた順序でサーバ１５０に伝達され得る。
【００５４】
一実施形態において、ファジーキー４１９は、３つの方法のうちの１つで、ファジーデータベース４１８に追加され、そしてファジーデータベース４１８から削除される。第１に、クライアントエージェント１１８のスタートアップ時、またはサーバエージェント１６０とのクライアント−サーバセッションを確立すると、クライアントエージェント１１８は、クライアントの永続化ストレージメモリ１２０内の各適切なビットマップ４２２に関して、ファジーキー４１９（ファジーキーはクライアントエージェントのコマンドを伴う）をファジーデータベース４１８に追加するコマンドをサーバエージェント１６０に送信する。クライアントエージェント１１８は、（例えば、以前のクライアント−サーバセッションから決定された、最も昔に用いられた情報または最も用いられる頻度が少ない情報に基づいて）スタートアップ時にファジーキーをサーバ１５０に送信する順序を指定する送信リストを保持し得る。送信リストは、その永続化ストレージメモリ１２０のディレクトリを読み出して、揮発性メモリ１１４内にディレクトリの表示を維持した際に、クライアントエージェント１１８によって形成され得る。本発明の一局面において、クライアントエージェント１１８は、ファイルのファイル名からファジーキー情報を抽出する。ファイルファジーレクトリの表示を準備する際ビットマップ４２２を含む。第２に、所定のポーリング間隔において、クライアントエージェント１１８は、その永続化ストレージメモリ１２０内に現在存在するビットマップを決定するために、（例えば、ファジーキーのような構造を含むファイル名を検索することによって）永続化ストレージメモリ１２０をポーリングし、次いで、サーバのファジーデータベース４１８を更新する必要がある場合に、サーバエージェント１６０に追加コマンドおよび／または削除コマンドを送信する。第３に、サーバエージェント１６０がクライアントの永続化ストレージメモリ１２０内にビットマップを書き込むコマンドをクライアントエージェント１１８に送信する場合、サーバエージェント１６０は対応するファジーキー４１９を生成して、ファジーデータベース４１８内にこれを格納する。
【００５５】
サーバ１５０からクライアント１１０へのビットマップデータの伝達は、クライアントとサーバとの間のネットワーク接続が比較的遅い場合特に、比較的長い時間期間がかかり得る。一実施形態において、本発明は、ネットワーク１４０の相対速度を決定することによって、サーバの動作を変化するネットワーク条件に適合させる。例えば、ネットワーク１４０の帯域幅を動的に評価することによって、サーバエージェント１６０は、ビットマップデータを処理するために用いられる復号化技術および圧縮技術を改変して、遅いネットワークを介して伝達する場合の帯域幅要件を減少させ得る。本発明は、ビットマップデータのカラムを左から右に処理し、これに応じてクライアントキャッシュ１１４を事前準備する（ｐｒｉｍｅ）。符号化されたビットマップ４１４が伝達されている際に、伝達時間をモニタリングしてネットワーク１４０の性能を決定し得る。伝達時間が閾値の値を越えている場合、クライアントエージェント１１８は、そのキャッシュ１１４内にすでに格納されているあらゆるビットマップデータを引き出して、ビットマップデータの残りの部分を、キャッシュ１１４内に受信された際にリアルタイムで、または所定の間隔で表示し得る。このように、クライアントのユーザは、クライアント１１０がビットマップデータ上で依然動作していることを認識し、そしてクライアント１１０がハングアップの状態、または失敗／エラー状態にないことを見分けることが可能である。有効なネットワーク帯域幅をクライアント１１０に近似させ、これに応じてサーバ１５０の挙動を適合させることによって、サーバエージェント１６０は、例えば、特定のビットマップに対して、総ビットマップ対総カラムを用いるディスプレイモードを用いるようにクライアントエージェント１１８に命令し得る。
【００５６】
具体的には、サーバエージェント１６０は、クライアントエージェント１１８に、Ｓｔａｒｔ＿ＳｔｏｐＷａｔｃｈコマンド、次いで、符号化されたビットマップデータ４１４およびＳｔｏｐ＿ＳｔｏｐＷａｔｃｈコマンドを送信する。クライアントエージェント１１８は、現在時間のチックを読み出して、これを第１のアレイエレメント内に書き込むことによってＳｔａｒｔ＿ＳｔｏｐＷａｔｃｈコマンドに応答する。符号化されたビットマップ４１４を受信した後、クライアントエージェント１１８は、現在時間のチックを読み出して、これを第２のアレイエレメント内に書き込むことによってＳｔｏｐ＿ＳｔｏｐＷａｔｃｈコマンドに応答する。Ｓｔａｒｔ＿ＳｔｏｐＷａｔｃｈコマンドとＳｔｏｐ＿ＳｔｏｐＷａｔｃｈコマンドとの時間チックの差を比較すると、符号化されたビットマップデータを受信するために費やされた推定時間が得られる。次いで、得られた時間差は、サーバエージェント１６０に伝達され返す。この手順を繰り返して、滑らかな移動平均を演算し得る。この移動平均から、符号化されたビットマップデータの有効なスループットの妥当な推定値を決定し得る。本発明は、特定のビットマップの符号化されたデータサイズの点でスループットの推定値を用いて、総ビットマップモードを用いるか（例えば、５秒より短い時間がかかりそうな場合）、または累積的な総カラムを用いるか（例えば、５秒より長い時間がかかりそうな場合）を決定する。この手順により１００％正確なスループットの推定値が得られないが、高速または低速のネットワーク接続（これから、異なるディスプレイモードが決定され得る）を検出するのに十分な粒度を提供することに留意されたい。同様の技術を用いて、クライアントエンドにおいて大きい画面ごとのコピー（ｓｃｒｅｅｎ−ｔｏ−ｓｃｒｅｅｎ　ｃｏｐｉｅｓ）の時間を計って、これらの動作の間のクライアントの性能の同様の移動平均推定値を取得し得る。この移動平均推定値を用いると、サーバ１５０上の作成者スレッドを遅くして、クライアント１１０がデータを処理し得るよりも高速でサーバ１５０がデータを生成する場合にソースにおけるオーバーランを防ぎ得る。
【００５７】
一実施形態において、本発明は、総キャッシュカラムのデータを含むようにサイズが十分であるオブジェクトを形成する。例えば、クライアント／サーバセッションのスタートアップが接続ウィンドウのサイズとその色の深さとの関数であり、より大きい画面および深さにはより大きいサイズが割り当てられる場合に、最大オブジェクトサイズおよびキャッシュのサイズは、サーバエージェント１６０によって選択され得る。さらに、ビットマップをカラムに分割する現在の技術により、ビットマップの一端または両端において、標準の幅より短い幅のカラムが得られ得る。これらの非標準カラムが狭すぎると、カラムはクライアントの永続化ストレージメモリ１２０内に維持するのに十分に大きくないかもしれず、したがって、次のクライアント／サーバセッションの間にクライアント１１０に存在しないかもしれない。本発明は、この狭いカラムと隣接カラムとをマージして、広いカラムのみを用い、したがって、例えば、スプラッシュ画面のすべての部分を永続化ストレージメモリ１２０内に含むことによってこの問題を回避する。一実施形態において、次いで、総カラムは２相で表示される。第１の相は任意の無くなったデータを用いてキャッシュ１１４の事前準備を行い、第２の相はキャッシュ１１４からカラムを引き出す。この引き出しは、１つより多いキャッシュされたオブジェクトを用いることに関与し得る。したがって、カラムファジースプレイ画面１２８上に原始的な様式で表示される。上述したように、ネットワーク接続が遅い場合、カラムは１つずつ原始的に表示されて、システムが依然機能していることをクライアント１１０におけるユーザに再保証し得る。あるいは、速いネットワーク接続が検出された場合、総ビットマップが、同様の技術を用いて原始的に表示され得る。
【００５８】
上述の移動平均推定技術を用いて、アプリケーションが、高速サーバ上で実行されているが、比較的遅いクライアント上で表示されているという長年のオーバースクロール（ｏｖｅｒｓｃｒｏｌｌ）の問題も緩和し得る。オーバースクロールの問題は、例えば、クライアント１１０のユーザが、例えば、マウス１２６を用いてスクロールバーを複数回クリックする（または、スクロールバーをドラッグする）ことによって複数のスクロールコマンドを開始した場合に生じる。スクロールコマンドが高速サーバに送信されると、サーバ１５０は、スクロール動作を実行して、遅いクライアント１１０（または、低速ネットワーク１４０）がそのディスプレイ画面１２８上に結果を表示するより速く、関連付けられたデータを返す。したがって、クライアント１１０におけるユーザが結果的に所望の画面位置を見て、（マウスクリックおよび／またはスクロールバーのドラッグを止めることによって）スクロールを止めることを所望する場合にファジースプレイは所望の画面位置を超えてスクロールを続ける。高速サーバ１５０がスクロールコマンドをすでに処理し、適切なデータをクライアント１１０に伝達し返してはいるが、低速クライアントにおいてデータはキューに入れられているが、まだ完全には処理されていないため、このオーバースクロール状態が生じる。
【００５９】
本発明は、オーバースクロールの起こる頻度を減らすことによって、このオーバースクロールの問題を緩和する。具体的には、定期的な時間にサーバ１５０において（フレームバッファをスクロールすることによって）、そしてクライアント１１０において（上述のＳｔｏｐＷａｔｃｈコマンドを介して）、スクロールイベントを選択して、イベントそれぞれの速度の移動平均推定値を演算する。このように、サーバエージェント１６０は、サーバ１５０において特定のスクロールイベントを処理するのにかかる時間（速度×関与したピクセル数）、およびクライアント１１０が処理するのにかかると予測される時間を推定する。クライアント１１０における予測された処理時間がサーバ１５０の処理時間より長い場合、クライアント１１０とサーバ１５０とのステップが実質的に揃うように、サーバ処理は適切な時差だけ停止される。このアプローチにより、クライアント１１０とサーバ１５０との間の時差によって、このアプローチが実施されない場合に生じるオーバースクロール数に比べて、オーバースクロールが相当少なくなる。
【００６０】
ビットマップデータを操作することに加え、本発明は、サーバ１５０上で生成されたテキストストリングを遠隔のクライアント１１０のディスプレイ１２８に遠隔制御し得る。図６を参照して、サーバ１５０はアプリケーションプログラム１５８を実行する。アプリケーションプログラム１５８はテキストストリングを生成し、これはクライアント１１０に遠隔制御される必要がある。サーバエージェント１６０は、アプリケーションプログラム１５８からサーバのオペレーティングシステム１５６に送信される、テキストストリングに関連したコマンドを傍受し、サーバエージェント１６０のディスプレイドライバ６１２に、テキスト関連情報を処理させ、一連のプロトコルコマンド６１４をクライアントエージェント１１８に伝達して、クライアントのディスプレイ１２８上にテキストストリング４１６を表示させる。例えば、アプリケーション１５８は、テキストの色および背景色（ここでは、「Ｈｅｌｌｏ！」）を設定する手続き呼び出しを実行する。アプリケーション１５８によるＴｅｘｔＯｕｔの手順６１８の実行ファジースプレイドライバ６１２のＤｒｖＴｅｘｔＯｕｔの手順６２０の実行をトリガする。後述するように、ＤｒｖＴｅｘｔＯｕｔの手順６２０は、クリップの領域、境界の長方形、およびテキストモード（背景色およびテキストの色を含む）を、対応する手順のシーケンスを実行することによって定義する。
【００６１】
このような手順を実行すると、ディスプレイドライバ６１２が、適切なデータおよびプロトコルコマンド（例えば、表１に提供されたもののサブセット）をクライアントエージェント１１８に送信する。プロトコルコマンドは、クライアントエージェント１１８によって受信されて処理される。クライアントエージェント１１８は、クリップの領域、境界の長方形、テキストモード、および表示される各テキストの文字に関連付けられた絵文字を指定する手順６１４を実行する。絵文字オブジェクトに関連付けられたプロトコルが絵文字のビットマップ自体だけでなく、その関連の位置決め情報も符号化することに留意されたい。上述したように、サーバ１５０はさらに、揮発性メモリ１１４内および／または永続化ストレージメモリ１２０内に、関連付けられた絵文字を格納するようにクライアントエージェント１１８に指令する他のプロトコルコマンドをクライアントエージェント１１８に送信し得る。クライアントエージェント１１８は、テキストストリングを囲む境界の長方形のサイズに対応したビットマップを生成し、境界の長方形内のその適切な位置に各絵文字の相対位置を設定する。最後の絵文字が受信され、その位置が設定されると、クライアントエージェント１１８は、クライアントのオペレーティングシステム１１６に、クライアント１１０のディスプレイ画面１２８上にビットマップを描く／レンダリングするように命令する。
【００６２】
本発明は、楕円、ベジエ、セグメント、ストリップおよびスタイルを含む、幾つかの異なるパス（ライン描写動作の記述の部分として、または閉じたパスの場合には、領域を記述するために用いられる１組のラインまたは曲線）の記述も支援する。セグメントは、組み合わされた場合、パスを形成するラインセグメントを指す。同様に、セグメントはさらにストリップにパーズされ得る。ストリップは、同じ角度特徴を呈するラインセグメント（一連の連続したピクセルに対応する）の部分である。例えば、ストリップを表すために用いられる符号化技術は、相対的な位置情報および量子化された角度を用いて、特定のラインセグメントにおける連続したストリップを特徴付ける。これにより、符号化される必要があるグラフィックラインデータの量が最小限に抑えられるだけでなく、より効率的に圧縮され得る、反復可能なデータシーケンスが増える。反復性の増加は、長方形または円などの形状を形成するストリップを表す場合に特に増強される。ストリップに用いられるプロトコルによりさらに、クライアントエージェント１１８が、独立して、そしてサーバエージェント１６０によって用いられるアルゴリズムの知識無くパスを正確に再現して、パスをピクセルのシーケンスに変換することが可能になる。
【００６３】
図７Ａの本発明を限定しない例を参照して、パス７００は２つのラインセグメント７１０、７２０（これらは完全に直線であるように見える）を含む。しかし、当業者であれば、完全に水平、垂直または４５度の対角でないラインセグメントは、パス７００がディスプレイ画面１２８（図１）上に表示される場合、対応する一連のストリップによって近似される必要があることを認識する。ディスプレイ画面１２８上の個々のピクセルが、相互に対して、完全に水平、垂直または４５度の対角のいずれかである、多くとも８つの他のピクセルによって囲まれているため、この近似が必要であり、したがって、総角度が異なる任意のラインセグメント７１０、７２０が、一連のストリップによって近似される必要がある。したがって、図７Ｂの例示のパス７００を参照して、セグメント７１０は、４つのストリップ７１２、７１４、７１６、７１８からなる。各ストリップ７１２、７１４、７１６、７１８の個々のピクセル（四角のブロックによって描かれる）は、相互に対して４５度の対角で編成される。セグメント７２０は、５つのストリップ７２２、７２４、７２６、７２８、７３０からなる。各ストリップ７２２、７２４、７２６、７２８、７３０の個々のピクセルは、相互に対して水平に編成される。
【００６４】
一実施形態において、図７Ｂおよび図８Ａを参照して、サーバエージェント１６０は、パス７００をラインセグメント７１０、７２０（各セグメントは特定の長さおよび角度を有する）にパーズする（ステップ８１０）。次いで、ラインセグメントのアレイが形成されて、各ラインセグメント７１０、７２０の量子化されたセグメント情報（以後、量子化された角度すなわち「ＱＡ」と呼ぶ）を格納する（ステップ８２０）。さらに図８Ｂを参照して、特定のセグメント７１０、７２０に関連付けられた絶対角度を演算するのではなく、サーバエージェント１６０は、１６個の量子化された角度８８０のうちのどの角度に絶対角度が存在するかを決定する。この量子化技術は、円（半径）の中心で開始するラインセグメントに関して、円周のうちのどの１６分の１に終点が存在するを決定する。この情報は、このコンテキスト（ｍｏｄ１６、０に初期化される）において指定される最後のセグメントからの符号なしデルタとして表され得る。この技術により、特に、セグメントが長方形または円などの形状を形成する場合に、（絶対角度が用いられた場合より）より反復可能なシーケンスが得られる。
【００６５】
次いで、サーバエージェント１６０は、各ラインセグメント７１０、７２０をストリップ（それぞれ、７１２、７１４、７１６、７１８；７２２、７２４、７２６、７２８、７３０）にパーズする（ステップ８３０）。続いて、特定のセグメント７１０、７２０の各ストリップの長さが、さらに処理されるように、ストリップ長のアレイ内に格納される（ステップ８４０）。一実施形態において、Ｗｉｎｄｏｗｓ（Ｒ）ＮＴのアルゴリズム、ｂＬｉｎｅを用いて、パス７００をストリップのアレイに分割する。ＮＴのアルゴリズムは、各ストリップおよびセグメントの量子化された角度を決定するため、量子化された角度領域間の境界上に存在するセグメントまたはストリップに関連付けられた曖昧さはない。ＮＴのアルゴリズムが、上に向かうラインを垂直にフリップして、ラインが常に下に向かう（ｙの値が増加し続ける）ようにして、フラグＦＬ＿ＦＬＩＰ＿Ｖを設定する。同様に、左に向かうラインを水平にフリップして、ラインが常に右に向かう（ｘの値が増加し続ける）ようにして、フラグＦＬ＿ＦＬＩＰ＿Ｈを設定する。結果、このアルゴリズムによって出力されたストリップのアレイが１つのカドラント（ｑｕａｄｒａｎｔ）に入る。この特定の実施形態において、サーバエージェント１６０は、ストリップのアレイがその以前／元の量子化された角度にフリップされ返されるように、ＮＴのアルゴリズムのフリップ動作を取り消し、次に続くストリップの開始座標を送信しなくてもよいように、前のストリップの終点、および次に続くストリップの開始点が一致していることを保証する。
【００６６】
次いで、サーバエージェント１６０は、量子化された角度データと共にパス７００の開始座標をラインセグメントアレイ内に符号化し、プロトコルストリームを形成するピクセル長データをストリップ長アレイ内に符号化する（ステップ８５０）。次いで、符号化されたデータは、圧縮アルゴリズムを受けて、プロトコルストリームのデータの冗長を利用する（ステップ８６０）。圧縮されたグラフィックラインデータは次いで、復号およびさらに処理されるようにクライアントエージェント１１８に伝達される（ステップ８７０）。
【００６７】
図９に示す例および図１０の量子化された角度情報を参照して、ラインセグメント７１０は、量子化された角度１内に位置決めされた、４つのストリップ７１２、７１４、７１６、７１８を含む。パス７００の開始座標（これは、圧縮されたグラフィックラインデータの部分としてサーバエージェント１６０からクライアントエージェント１１８に伝達される）はストリップ７１２の第１のピクセル（８８０の原点に位置決めされる）に対応する。グラフィックラインデータは、セグメント７１０内に各ストリップ７１２、７１４、７１６、７１８のピクセル長をさらに含む。セグメント７１０が水平、垂直または４５度の対角に完全に対応するわけではないため、図１０に示す特定のデルタ値によって、セグメント７１０内の各連続したストリップ７１４、７１６および７１８を調整して、セグメント７１０の総角度を正しく近似する。現在の例において、前のストリップ７１２の最終点から次に続くストリップ７１４の開始点まで行くために、クライアントエージェント１１８は、実質的に同じｘの値および増加しゆくｙの値でストリップ７１４を表示する。このプロセスは、セグメント７１０の各ストリップに対して、およびＱＡ１５内に位置決めされた、セグメント７２０内のストリップに対して繰り返される。
【００６８】
したがって、そして一実施形態において、ストリップを処理した場合に、本発明によって生成されるプロトコルストリームは、続くセグメントの量子化された角度をクライアントエージェント１１８に通知するために、パスの開始点、クライアントの揮発性メモリ１１４（図１）（これは、クライアント−サーバセッションにおいてある時間だけ前に伝達された特定のストリップをすでに格納しているかもしれない）内の位置に対応するインデックス（ある場合）、パス内のセグメント数、各セグメントの量子化された角度（この角度から、図１０に反映されたデルタ値が決定される）、所定の制御情報と共に各ストリップ長、そして第１のセグメントまたは前のセグメントの量子化された角度に追加される量子化された角度デルタ情報を含む。このように、本発明は、パス内の各ストリップに対して、座標および絶対角度情報を送信する必要をなくす。さらに、上述のストリップ処理技術は、圧縮解凍されたプロトコルストリーム内のデータの反復性を活用することによって、グラフィックラインのデータの効率的な圧縮を促進する。
【００６９】
本発明は、オンスクリーン面に表示されるビットマップ、およびオフスクリーン面のビットマップ（例えば、映像ディスプレイアダプタのメモリ内および／またはグラフィック変換ライブラリによって動作されるクライアントの揮発性メモリ１１４の予め割り当てられたセクション内に格納されたビットマップ）にも適用され得る。オフスクリーン面は、面が完成するまでビットマップをオフスクリーン面に書き込む、マイクロソフトワードなどのアプリケーションによって形成されることが多い。面が完成するとき、オフスクリーン面として最終の形態で、オフスクリーン面がクライアント１１０のディスプレイ画面１２８上に表示される。したがって、オフスクリーン面は、オンスクリーン面のソースを提供することが多い。
【００７０】
一実施形態において、オフスクリーン面に関して、クライアントエージェント１１８は、クライアントの利用可能なメモリより大きいオフスクリーン面をサーバエージェント１６０が形成しないように、オフスクリーン面に利用可能なローカルの揮発性メモリ１１４の量をサーバエージェント１６０に通知する。次いで、サーバエージェント１６０は、オフスクリーン面を形成して、その揮発性メモリ１１４内に面を格納する命令と共にこれをクライアントエージェント１１８に伝達する。クライアントエージェント１１８は、その揮発性メモリ１１４の特定のセクションを選択し、面に割り当てて、メモリ１１４内に面を格納する。各オフスクリーン面は、１組の関連付けられた属性（例えば、面、ピクセルフォーマット、寸法、描写属性、プロトコル状態などを一意的に識別する識別子）を有する。
【００７１】
一実施形態において、クライアントの揮発性メモリ１１４を効率的に用いるために、サーバエージェント１６０は、オフスクリーン面がオンスクリーン面と双方向通信する場合（例えば、オフスクリーン面からのビットマップデータを用いてオンスクリーン面を更新した場合）のみ、オフスクリーン面に特定の動作を実行するように指令するコマンドをクライアントエージェント１１８に発行し得る。オンスクリーン面とオフスクリーン面との双方向通信のみが画面への最終コピーである場合、動作はオンスクリーン面を目標とし得、したがって、ネットワーク１４０を介して伝達される必要があるビットマップデータの量が減少し得る。あるいは、オンスクリーン面のソースは、サーバ１５０において遠隔で格納されたオフスクリーン面、またはクライアント１１０においてローカルに格納されたオフスクリーン面のいずれかに対応するように制限され得る。サーバエージェント１６０によって要求されるオフスクリーン面への通常の動作は、更新されたテキスト、ラインまたは他のデータを用いて、オフスクリーン面内のビットマップを更新することを含む。
【００７２】
一実施形態において、そして図１１を参照して、サーバエージェント１６０は、サーバのオペレーティングシステム１５６に行われた呼び出し（これは、オフスクリーン面の作成に関する）を傍受する。サーバエージェント１６０は面の複製コピーを形成し、この属性と共にこれをサーバのローカルメモリ内に格納する。次いで、サーバエージェント１６０は、クライアントの揮発性メモリ１１４内でオフスクリーン面を形成するコマンドをクライアントエージェント１１８に発行する（ステップ１１０２）。コマンドは、オフスクリーン面の第１のインスタンスである場合に、オフスクリーン面の符号化された表示を伴うか、またはオフスクリーン面がクライアント−サーバセッションの間に以前に伝達されている場合に、インデックスまたはファジーキーを伴う（ステップ１１０４）。サーバエージェント１６０は、クライアントエージェント１１８に、インデックス／ファジーキーの印または符号化された面によって識別されたグラフィカルデータをクライアントのオフスクリーン面に組み込むように命令する（ステップ１１０６）。クライアントエージェント１１８は、識別された面／ビットマップをクライアントのオフスクリーン面にコピーすることによって、サーバエージェントの命令に応答する（ステップ１１０８）。例えば、サーバエージェント１６０によって発行された、クライアントのオフスクリーン面内にビットマップを形成するＢＩＴＢＬＴコマンドが失敗した場合（メモリ割り当てエラーが生じた場合など）、クライアントエージェント１１８は、失敗した状態を示すＣ２Ｓ＿ＯＳＳ＿Ｅｒｒｏｒコマンドをサーバエージェント１６０に送信する（ステップ１１１０）。エラー状態に応答して、サーバエージェント１６０は、クライアントのオフスクリーン面を更新するソースとしてオフスクリーン面のローカルコピーを用いる。クライアントエージェント１１８は、サーバのローカルコピーから受信した情報を用いて、クライアント１１０上のオフスクリーン面を更新し、オフスクリーン面のあらゆる壊れた（ｃｏｒｒｕｐｔｅｄ）／汚い（ｄｉｒｔｙ）領域も修正する。あるいは、エラー状態に遭遇した場合、サーバエージェント１６０はオフスクリーン面のローカル／複製コピーをクライアントエージェント１１８に伝達し（１１１２）、クライアントエージェント１１８に、クライアントのオンスクリーン面を更新するソースとして複製面を用いて、クライアントにおける破壊されたオフスクリーン面を捨てるように命令する（ステップ１１１４）。
【００７３】
特定の詳細を参照しながら本発明を記載してきたが、このような詳細は、上掲の特許請求の範囲およびその均等物を除いては、本発明の範囲を限定するものとしてみなされることを意図しない。
【図面の簡単な説明】
【図１】
図１は、通信ネットワークを介してサーバノードに接続されたクライアントノードを示し、クライアントノードおよびサーバノードのそれぞれは、本発明の実施形態に従って作動するクライアントエージェントおよびサーバエージェントをそれぞれ有する。
【図２】
図２は、本発明の実施形態に従う図１のサーバエージェントにより実行されたステップの高レベルフロー図を提供する。
【図３】
図３は、本発明の実施形態に従う図２の図に関するより詳細なフロー図を提供する。
【図４】
図４は、本発明の実施形態に従う図１のクライアントおよびサーバエージェントの動作により影響されたクライアントおよびサーバの揮発性メモリおよび持続性メモリの内容を概略的に示す。
【図５】
図５は、本発明の実施形態に従うファジーデータベースおよびファジーキーに関するキャッシング技術を使用することでクライアントに伝送されたデータの量を最小化するために用いられるステップのフロー図を提供する。
【図６】
図６は、本発明の実施形態に従う遠隔クライアントのディスプレイへのサーバ上で、アプリケーションプログラムにより生成された遠隔テキスト情報に対して使用される手順のセットを概略的に示す。
【図７Ａ】
図７Ａは、特定のパスを形成する複数のセグメントを示す線の図を提供する。
【図７Ｂ】
図７Ｂは、パスがコンピュータディスプレイ上で実際に近似される方法を示す図７Ａの線の図のピクセルレベルの表示を提供する。
【図８Ａ】
図８Ａは、本発明の実施形態に従って、セグメントおよびストリップデータを処理および符号化する場合に用いられるステップのフロー図を提供する。
【図８Ｂ】
図８Ｂは、本発明の実施形態に従って、ストリップに関する角度情報を量子化するために使用され、かつ圧縮効率を改善する１６の領域のセットに構成された座標系を提供する。
【図９】
図９は、本発明に従って、ストリップ処理技術の実施形態を示す図７Ｂのピクセルレベルのディスプレイに図８Ｂの座標系を重複させたものである。
【図１０】
図１０は、本発明の実施形態に従って、図８Ｂの量子化されたセグメントのそれぞれのストリップに関して、先のストリップの終点から次のストリップに到達する方法を示す表を提供する。
【図１１】
図１１は、クライアントのスクリーン外での表面の形成に関するエラー状況に応じてサーバエージェントにより実行されるステップのフロー図を提供する。
【図１】
2004501445.tif 000006
【図２】
2004501445.tif 000007
【図３】
2004501445.tif 000008
【図４】
2004501445.tif 000009
【図５】
2004501445.tif 000010
【図６】
2004501445.tif 000011
【図８Ａ】
2004501445.tif 000012
【図１０】
2004501445.tif 000013
【図１１】
2004501445.tif 000014
【国際公開パンフレット】
2004501445.tif 000015
2004501445.tif 000016
2004501445.tif 000017
2004501445.tif 000018
2004501445.tif 000019
2004501445.tif 000020
2004501445.tif 000021
2004501445.tif 000022
2004501445.tif 000023
2004501445.tif 000024
2004501445.tif 000025
2004501445.tif 000026
2004501445.tif 000027
2004501445.tif 000028
2004501445.tif 000029
2004501445.tif 000030
2004501445.tif 000031
2004501445.tif 000032
2004501445.tif 000033
2004501445.tif 000034
2004501445.tif 000035
2004501445.tif 000036
2004501445.tif 000037
2004501445.tif 000038
2004501445.tif 000039
2004501445.tif 000040
2004501445.tif 000041
2004501445.tif 000042
2004501445.tif 000043
2004501445.tif 000044
2004501445.tif 000045
2004501445.tif 000046
2004501445.tif 000047
2004501445.tif 000048
2004501445.tif 000049
2004501445.tif 000050
2004501445.tif 000051
2004501445.tif 000052
2004501445.tif 000053
2004501445.tif 000054
2004501445.tif 000055
2004501445.tif 000056
2004501445.tif 000057
2004501445.tif 000058
2004501445.tif 000059
2004501445.tif 000060
2004501445.tif 000061
2004501445.tif 000062
2004501445.tif 000063
2004501445.tif 000064
2004501445.tif 000065
2004501445.tif 000066
2004501445.tif 000067
2004501445.tif 000068
2004501445.tif 000069
2004501445.tif 000070
2004501445.tif 000071
2004501445.tif 000072
2004501445.tif 000073
2004501445.tif 000074
2004501445.tif 000075
2004501445.tif 000076
2004501445.tif 000077
2004501445.tif 000078
2004501445.tif 000079
2004501445.tif 000080
2004501445.tif 000081
2004501445.tif 000082
2004501445.tif 000083
【国際公開パンフレット（コレクトバージョン）】
2004501445.tif 000084
2004501445.tif 000085
【国際調査報告】
2004501445.tif 000086
2004501445.tif 000087
2004501445.tif 000088
2004501445.tif 000089
2004501445.tif 000090
2004501445.tif 000091