(57)【要約】本発明は、リモートロケーションにおけるクライアントのリモートユーザに対するコンピューティング環境の提供を加速することを目的とする。コンピューティング環境は、アプリケーションによって使用または処理されるアプリケーションおよびデータファイルを含むことができる。アプリケーションおよびデータファイルは、クライアントから離れたサーバを介して記憶または提供することができる。ユーザは、リモートコンピュータを介して、ユーザによるアプリケーションの実行を提供するサーバから、コンピューティング環境を要求することができる。たとえば、サーバは、アプリケーションをリモートクライアントにストリーミングすることができる。クライアントおよびサーバは、クライアントおよびサーバ間の通信を加速するアプライアンスを介して通信することができる。
2009536377.tif 000002
【特許請求の範囲】
【請求項１】
リモートクライアントに対するコンピューティング環境の提供を加速する方法であって、
（ａ）アプリケーションを実行するためのリモートクライアントからの要求を前記サーバによって受信するステップであって、前記リモートクライアントおよびサーバは、アプライアンスを介して通信する、ステップと、
（ｂ）前記リモートクライアントに対して、実行のためにアプリケーションを前記サーバによってストリーミングするステップと、
（ｃ）前記リモートクライアントによって要求され、前記ストリーミングされたアプリケーションによりアクセスされるデータファイルを前記サーバによって伝送するステップと、
（ｄ）前記リモートクライアントに対する前記データファイルの伝送を、前記アプライアンスによって加速するステップと
を含む、方法。
【請求項２】
前記データファイルは、前記アプリケーションによって使用可能なフォーマットである、請求項１に記載の方法。
【請求項３】
前記アプリケーションは、前記データファイルのファイルタイプに関連付けられている、請求項１に記載の方法。
【請求項４】
前記リモートクライアントに対する前記アプリケーションのストリーミングを、前記アプライアンスによって加速することを含む、請求項１に記載の方法。
【請求項５】
前記アプライアンスによって、
圧縮と、
伝送制御プロトコルの多重化と、
伝送制御プロトコルのバッファリングと、
キャッシングと
の加速技術のうちの１つを実行することにより、前記データファイルの前記伝送、または前記アプリケーションの前記ストリーミングの一方を加速することを含む、請求項１に記載の方法。
【請求項６】
前記リモートクライアント上の加速プログラムによって、前記リモートクライアントと前記サーバとの間の通信を加速することを含む、請求項１に記載の方法。
【請求項７】
前記アプライアンスによって、前記リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー（ＳＳＬ）接続の一方を確立することを含む、請求項１に記載の方法。
【請求項８】
前記サーバとの接続またはセッションの一方を確立するための前記クライアントからの要求の後、前記アプライアンスによって、前記リモートクライアントに対して加速プログラムを伝送することを含む、請求項１に記載の方法。
【請求項９】
前記アプライアンスからの受信の後、前記リモートクライアントによって、前記加速プログラムを自動的にインストールして実行することを含む、請求項８に記載の方法。
【請求項１０】
前記アプリケーションまたは前記サーバの一方に対して透過的に、前記リモートクライアントによって前記加速プログラムを実行することを含む、請求項９に記載の方法。
【請求項１１】
前記アプリケーションが加速可能であることを前記アプライアンスによって決定し、前記決定に応じて、加速プログラムを前記リモートクライアントに対して、前記アプライアンスによって伝送することを含む、請求項１に記載の方法。
【請求項１２】
前記リモートクライアント上の加速プログラムによって、
圧縮と、
伝送制御プロトコルの多重化と、
伝送制御プロトコルのバッファリングと、
キャッシングと
の加速技術のうちの１つを実行することを含む、請求項１に記載の方法。
【請求項１３】
前記アプライアンスによって、前記データファイルをキャッシュすることを含む、請求項１に記載の方法。
【請求項１４】
前記アプライアンスによって、前記データファイルに対する前記リモートクライアントからの要求を傍受し、前記要求に応じて、前記キャッシュされたデータファイルを前記リモートクライアントに伝送することを含む、請求項１３に記載の方法。
【請求項１５】
前記アプライアンスによって、前記サーバから受信した前記データファイルを圧縮し、前記圧縮されたデータファイルを前記リモートクライアントに伝送することを含む、請求項１に記載の方法。
【請求項１６】
前記ストリーミングされたアプリケーションまたは前記データファイルの一方を、前記サーバから、複数のクライアントによって使用されるプールされたトランスポート層接続を介して、前記アプライアンスによって受信することを含む、請求項１に記載の方法。
【請求項１７】
前記ストリーミングされたアプリケーションまたは前記データファイルの一方の前記伝送のネットワークパケットを、前記プールされたトランスポート層接続を介して、前記アプライアンスによって多重化することを含む、請求項１６に記載の方法。
【請求項１８】
前記リモートクライアントは、第１ネットワーク上に位置し、前記サーバまたは前記アプライアンスの一方は、第２ネットワーク上に位置する、請求項１に記載の方法。
【請求項１９】
前記リモートクライアントは、支社に位置し、前記サーバまたは前記アプライアンスの一方は、データセンターに位置する、請求項１に記載の方法。
【請求項２０】
リモートクライアントに対するコンピューティング環境の提供を加速するシステムであって、
１つまたは複数のクライアントと１つまたは複数のサーバとの間の通信を加速するためのアプライアンスと、
アプリケーションを実行するためのリモートクライアントからの要求を受信するサーバであって、前記要求に応じて実行するアプリケーションを、前記アプライアンスを介して前記リモートクライアントにストリーミングするサーバと
を含み、
前記サーバは、前記ストリーミングされたアプリケーションによるアクセスのために、前記リモートクライアントによって要求されたデータファイルを伝送し、
前記アプライアンスは、前記リモートクライアントに対する前記データファイルの伝送を加速する、
システム。
【請求項２１】
前記データファイルは、前記アプリケーションによって使用可能なフォーマットである、請求項２０に記載のシステム。
【請求項２２】
前記アプリケーションは、前記データファイルのファイルタイプに関連付けられている、請求項２１に記載のシステム。
【請求項２３】
前記アプライアンスは、前記リモートクライアントに対する前記アプリケーションのストリーミングを加速する、請求項２０に記載のシステム。
【請求項２４】
前記リモートクライアントと前記サーバとの間の通信を加速する加速プログラムを前記リモートクライアント上に含む、請求項２０に記載のシステム。
【請求項２５】
前記アプライアンスは、前記リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー（ＳＳＬ）接続の一方を確立する、請求項２０に記載のシステム。
【請求項２６】
前記アプライアンスは、前記サーバとの接続またはセッションの一方を確立するための要求を前記クライアントからの受信の後に、加速プログラムを前記リモートクライアントに伝送する、請求項２０に記載のシステム。
【請求項２７】
前記リモートクライアントは、前記アプライアンスからの受信の後に、前記加速プログラムを自動的にインストールして実行する、請求項２６に記載のシステム。
【請求項２８】
前記リモートクライアント上の前記加速プログラムは、
圧縮と、
解凍と、
伝送制御プロトコルの多重化と、
伝送制御プロトコルのバッファリングと、
キャッシングと
の加速技術のうちの１つを実行する、請求項２６に記載のシステム。
【請求項２９】
前記リモートクライアントは、前記アプリケーションまたは前記サーバの一方に対して透過的に前記加速プログラムを実行する、請求項２６に記載のシステム。
【請求項３０】
前記アプライアンスは、前記アプリケーションが加速可能であると決定し、前記決定に応じて、加速プログラムを前記リモートクライアントに対して伝送することが可能である、請求項２０に記載のシステム。
【請求項３１】
前記アプライアンスは、
圧縮と、
伝送制御プロトコルの多重化と、
伝送制御プロトコルのバッファリングと、
キャッシングと
の加速技術のうちの１つを実行することにより、前記データファイルの前記伝送または前記アプリケーションの前記ストリーミングの一方を加速する、請求項２０に記載のシステム。
【請求項３２】
前記アプライアンスは、前記データファイルをキャッシュするためのキャッシュを備える、請求項２０に記載のシステム。
【請求項３３】
前記アプライアンスは、前記データファイルに対する要求を傍受し、前記リモートクライアントに対し、前記要求に応じて前記キャッシュされたデータファイルを伝送する、請求項３２に記載のシステム。
【請求項３４】
前記アプライアンスは、前記サーバから受信した前記データファイルを圧縮し、前記圧縮されたデータファイルを前記リモートクライアントに伝送する、請求項２３に記載のシステム。
【請求項３５】
前記アプライアンスは、前記ストリーミングされたアプリケーションまたは前記データファイルの一方を前記サーバから、複数のクライアントによって使用されるプールされたトランスポート層接続を介して受信する、請求項２３に記載のシステム。
【請求項３６】
前記アプライアンスは、プールされたトランスポート層接続を介して、前記ストリーミングされたアプリケーションまたは前記データファイルの一方の伝送のネットワークパケットを多重化する、請求項３２に記載のシステム。
【請求項３７】
前記リモートクライアントは、第１ネットワーク上に位置し、前記サーバまたは前記アプライアンスの一方は、第２ネットワーク上に位置する、請求項２３に記載のシステム。
【請求項３８】
前記リモートクライアントは、支社に位置し、前記サーバまたは前記アプライアンスの一方は、データセンターに位置する、請求項２３に記載のシステム。
【請求項３９】
クライアントエージェントおよびアプライアンスを介して、リモートクライアントに対するコンピューティング環境の提供を加速する方法であって、
（ａ）アプライアンスを介してクライアントエージェントに対し、リモートクライアントによって要求された実行用のアプリケーションをストリーミングするステップと、
（ｂ）前記アプライアンスを介して、前記リモートクライアントによって要求されたデータファイルを伝送するステップであって、前記データファイルは、前記ストリーミングされたアプリケーションによってアクセスされる、ステップと、
（ｃ）前記クライアントエージェントまたは前記アプライアンスの一方によって、前記リモートクライアントに対する前記データファイルの提供を加速するステップと
を含む、方法。
【請求項４０】
前記クライアントエージェントまたは前記アプライアンスの一方によって、前記リモートクライアントに対する前記ストリーミングされたアプリケーションの提供を加速することを含む、請求項３９に記載の方法。
【請求項４１】
前記クライアントエージェントまたはアプライアンスの一方によって、
圧縮と、
伝送制御プロトコルの多重化と、
伝送制御プロトコルのバッファリングと、
キャッシングと
の加速技術のうちの１つを実行することにより、前記データファイルまたは前記ストリーミングされたアプリケーションの一方の提供を加速することを含む、請求項３９に記載の方法。
【請求項４２】
前記クライアントエージェントおよび前記アプライアンスを介して、前記リモートクライアントに対する仮想プライベートネットワーク接続、またはセキュアソケットレイヤー（ＳＳＬ）接続の一方を確立することを含む、請求項３９に記載の方法。
【請求項４３】
前記クライアントエージェントまたは前記アプライアンスの一方によって、前記データファイルをキャッシュすることを含む、請求項３９に記載の方法。
【請求項４４】
前記クライアントエージェントまたは前記アプライアンスの一方によって、前記データファイルに対する前記リモートクライアントからの要求を傍受し、前記要求に応じて、前記キャッシュされたデータファイルを提供することを含む、請求項３９に記載の方法。
【請求項４５】
サーバから受信した前記データファイルを前記アプライアンスによって圧縮し、前記圧縮されたデータファイルを前記クライアントエージェントに伝送することを含む、請求項３９に記載の方法。
【請求項４６】
前記アプライアンスから受信した前記圧縮されたデータファイルを、前記クライアントエージェントによって解凍し、前記リモートクライアント上で実行する前記ストリーミングされたアプリケーションに対して、前記データファイルを提供することを含む、請求項４５に記載の方法。
【請求項４７】
前記ストリーミングされたアプリケーションまたは前記データファイルの一方を前記アプライアンスから、前記アプライアンスとサーバとの間のプールされたトランスポート層接続を介して、前記クライアントエージェントによって受信することを含む、請求項３９に記載の方法。
【請求項４８】
前記クライアントエージェントに対する前記ストリーミングされたアプリケーションまたは前記データファイルの一方の伝送のネットワークパケットを、前記プールされたトランスポート層接続を介して、前記アプライアンスによって多重化することを含む、請求項４７に記載の方法。
【請求項４９】
前記クライアントエージェントと前記アプライアンスとの間に確立された第１トランスポート層接続と、前記アプライアンスとサーバとの間に確立された第２トランスポート層接続との間で、前記ストリーミングされたアプリケーションまたは前記データファイルの一方を伝送することを含む、請求項３９に記載の方法。
【請求項５０】
クライアントエージェントを介して、リモートクライアントに対するコンピューティング環境の提供を加速する方法であって、
（ａ）サーバから実行のために要求され、ストリーミングされたアプリケーションを、クライアントエージェントによって受信するステップであって、前記リモートクライアントは、前記クライアントエージェントを介して前記サーバと通信する、ステップと、
（ｂ）前記ストリーミングされたアプリケーションによってアクセスされるデータファイルを、前記クライアントエージェントによって前記サーバから要求するステップと、
（ｃ）前記リモートクライアントの前記ストリーミングされたアプリケーションに対する前記データファイルの提供を、前記クライアントエージェントによって加速するステップと
を含む方法。
【請求項５１】
前記リモートクライアントに対する前記ストリーミングされたアプリケーションの提供を、前記クライアントエージェントによって加速することを含む、請求項５０に記載の方法。
【請求項５２】
前記データファイルまたは前記ストリーミングされたアプリケーションの一方の提供を、前記クライアントエージェントによって、
圧縮と、
伝送制御プロトコルの多重化と、
伝送制御プロトコルのバッファリングと、
キャッシングと
の加速技術のうちの１つを実行することにより加速することを含む、請求項５０に記載の方法。
【請求項５３】
前記サーバに対する前記リモートクライアントの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー（ＳＳＬ）接続の一方を、前記クライアントエージェントを介して確立することを含む、請求項５０に記載の方法。
【請求項５４】
前記データファイルまたは前記ストリーミングされたアプリケーションの一部分を、前記クライアントエージェントによってキャッシュすることを含む、請求項５０に記載の方法。
【請求項５５】
前前記クライアントエージェントによって、前記データファイルに対する前記リモートクライアントの要求を傍受し、前記要求に応じて、キャッシュされたデータファイルの一部分を提供する、請求項５４に記載の方法。
【請求項５６】
前記クライアントエージェントによって、前記ストリーミングされたアプリケーションに対するユーザの要求を傍受し、前記要求に応じて、ストリーミングされたアプリケーションの一部分を提供するステップを含む、請求項５４に記載の方法。
【請求項５７】
アプライアンスまたは前記サーバの一方から受信された、圧縮されたデータファイルを前記クライアントエージェントによって解凍し、前記リモートクライアント上で実行する前記ストリーミングされたアプリケーションに対して前記データファイルを提供することを含む、請求項５０に記載の方法。
【請求項５８】
前記ストリーミングされたアプリケーションまたは前記データファイルの一方を、前記クライアントエージェントによって、プールされたトランスポート層接続を介して受信することを含む、請求項５０に記載の方法。
【請求項５９】
前記ストリーミングされたアプリケーションまたは前記データファイルの一方のために受信したネットワークパケットを、前記クライアントエージェントによって、前記プールされたトランスポート層接続を介して、多重分離することを含む、請求項５８に記載の方法。
【請求項６０】
前記クライアントエージェントとアプライアンスとの間に確立された第１トランスポート層接続と、前記アプライアンスとサーバとの間に確立された第２トランスポート層接続との間で、前記ストリーミングされたアプリケーションまたは前記データファイルの一方を受信することを含む、請求項５０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ａｃｃｅｌｅｒａｔｉｎｇ  Ｄｅｌｉｖｅｒｙ  ｏｆ  ａ  Ｃｏｍｐｕｔｉｎｇ  Ｅｎｖｉｒｏｎｍｅｎｔ  ｔｏ  ａ  Ｒｅｍｏｔｅ  Ｕｓｅｒ」と題され、２００６年４月１２日に出願された、米国仮特許出願第６０／７４４，７２０号の優先権の利益を主張し、該米国仮特許出願は、参照により本明細書に援用される。
【０００２】
本発明は、サーバから離れたロケーションにあるクライアントのリモートユーザに対するアプリケーションおよびデータファイルを含むコンピューティング環境の提供を加速するためのシステムおよび方法を目的とする。
【背景技術】
【０００３】
企業環境の運用および管理は、時間、金銭、および資源を消費する。多くの場合、それは、アプリケーションおよびデータ管理プロセスが分散的かつ労働集約的であるためである。たとえば、管理者の時間のかなりの部分は、企業データのためにより多くの記憶装置を用意するか、もしくはバックアップを実行するか、または企業データの増加に対処するためにサーバを更新することに費やされる場合がある。また、管理者は、データの増加に備えるために、新しいサーバを構成して提供する必要があり得る。さらに、管理者は、特定のユーザアプリケーションを提供するために、サーバを更新またはプロビジョニングすることに時間を費やす場合がある。さらに、企業データのかなりの部分は、企業データセンターの外部に存在し得る。たとえば、企業のドキュメント、ファイルおよびデータは、データセンターから離れた様々なコンピュータ上に位置するか、または様々なコンピュータに分散している場合がある。
【０００４】
企業のデータおよびアプリケーションの運用および管理に要する時間、金銭、および資源を減少させるために、多くの会社は、サーバ、企業データ、およびアプリケーションを統合し、集中させている。統合および集中化は、多少のコストを削減し、多少の利益を生むが、集中化されたデータおよびアプリケーションは、データおよびアプリケーションに対するアクセスを提供する際に、さらに問題を生じる。こうした問題の１つは、リモートユーザが、ワイドエリアネットワーク（ＷＡＮ）接続を通してファイルにアクセスしようとすることに関する。たとえば、一般に、ＬＡＮ接続よりはるかに遅い、企業データセンターとのネットワーク接続を有する支社に存在するリモートユーザは、ＷＡＮを通して、企業データセンターに記憶されているＭｉｃｒｏｓｏｆｔ  Ｏｆｆｉｃｅドキュメントを開こうとし得る。リモートユーザがそのネットワークを通してファイルにアクセスする場合、ＷＡＮの待ち時間、信頼性、および帯域幅のために遅延する。ファイルが大きい場合、遅延はさらに大きくなり得る。さらに、リモートユーザと企業データセンターとの間の距離が大きくなるにつれて、ファイルにアクセスする際のネットワーク遅延の頻度および長さも増加し得る。ＷＡＮ上に仮想プライベートネットワーク、セキュリティ、および他のネットワーク層を追加すると、リモートユーザが利用可能な帯域幅をさらに減少させ、ファイルにアクセスする際の遅延を増加させる場合がある。リモートオフィスの速度および帯域幅がより低下することによって、リモートファイルにアクセスする時の遅延は許容できないほどになり得る。リモートファイルに対するアクセスの遅延を防止するため、リモートユーザは、ファイルをローカルでコピーして使用する場合があり、集中化動作の目的は無効になる。さらに、ＷＡＮ接続は、ＬＡＮ接続より信頼性が低く、パケットの損失およびネットワークの切断を生じる場合がある。ＷＡＮの遮断は、ドキュメントを保存するか、または開くなどのファイル動作の際に生じる場合があり、リモートユーザはさらに遅延に悩むことになる。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、リモートユーザによる集中化アプリケーションおよびデータファイルに対するアクセスを改善し、アプリケーションおよびデータファイルをリモートユーザに提供する際の加速を含むシステムおよび方法が望まれる。
【課題を解決するための手段】
【０００６】
本発明は、リモートユーザに対するアプリケーションおよびデータファイルのコンピューティング環境の提供を加速するシステムおよび方法に関する。アプリケーションおよびデータファイルは、クライアントから離れたサーバを介して記憶または提供することができる。たとえば、リモートの従業員などのユーザは、ローカルに利用可能なアプリケーションおよび／またはデータファイルを所有していない支社のコンピュータを使用することができる。ユーザは、リモートクライアント上で利用できないワード処理アプリケーションを使って、企業文書を編集したい場合がある。ユーザは、ユーザが希望するアプリケーションの実行を提供するサーバに、リモートクライアントを介してコンピューティング環境を要求することができる。たとえば、サーバは、アプリケーションをリモートクライアントにストリーミングすることができる。リモートクライアントおよびサーバは、リモートクライアントとサーバとの間の通信を加速するアプライアンスを介して通信することができる。たとえば、アプライアンスは、リモートユーザに対するアプリケーションのストリーミングを加速し得る。たとえばアプライアンスは、リモートユーザに対するアプリケーションのストリーミングを加速し得る。場合によっては、アプリケーションまたはリモートユーザは、サーバにデータファイルも要求する場合があり、アプライアンスは、リモートユーザに対するデータファイルの提供を加速する。したがって、本発明は、ユーザから離れたロケーションにあるアプリケーションおよびデータファイルに対する加速されたアクセスを、ネットワークに接続されたデバイスを介してリモートロケーションのユーザに提供する。
【０００７】
一態様では、本発明は、アプリケーションおよびデータファイルのコンピューティング環境をリモートロケーションのクライアントのユーザに提供する際に加速する方法に関する。この方法は、リモートクライアントからの要求をサーバが受信して、アプリケーションを実行することを含む。リモートクライアントおよびサーバは、アプライアンスを介して通信する。この方法は、サーバが、リモートクライアントに対してアプリケーションをストリーミングし、実行することも含む。クライアントは、アプリケーションが利用可能なデータファイルを求める要求をサーバに伝送し、アプライアンスは、リモートクライアントに対するデータファイルの伝送を加速する。
【０００８】
本発明の一実施態様では、この方法は、リモートクライアントに対するアプリケーションのストリーミングをアプライアンスにより加速することを含む。別の実施態様では、アプライアンスは、次の加速技術の１つを実行することによって、データファイルの伝送、またはアプリケーションのストリーミングを加速する：１）圧縮；２）解凍；３）伝送制御プロトコルプーリング；４）伝送制御プロトコルの多重化；５）伝送制御プロトコルのバッファリング；および６）キャッシング。別の実施態様では、この方法は、リモートクライアント上の加速プログラムによって、リモートクライアントとサーバとの間の通信を加速することを含む。この方法の実施態様によっては、アプライアンスは、リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー（ＳＳＬ）接続を確立する。別の実施態様では、この方法は、トランスポート層接続を介してリモートクライアントとサーバとの間で通信されるネットワークパケットのペイロードを、アプライアンスによる加速することを含む。
【０００９】
本発明の一実施態様では、この方法は、リモートクライアントから、サーバとの接続またはセッションを確立するという要求があった後、アプライアンスによって、加速プログラムをリモートクライアントに伝送することを含む。実施態様によっては、リモートクライアントは、アプライアンスから受信後、加速プログラムを自動的にインストールして実行する。別の実施態様では、この方法は、リモートクライアント上の加速プログラムによって、以下の加速技術の１つを実行することを含む：
１）圧縮；２）解凍；３）伝送制御プロトコルプーリング；４）伝送制御プロトコルの多重化；５）伝送制御プロトコルのバッファリング；および６）キャッシング。実施態様によっては、リモートクライアントは、アプリケーションまたはサーバに対して透過的に、加速プログラムを実行する。
【００１０】
本発明の実施態様によっては、この方法は、アプリケーションが加速可能であるかどうかをアプライアンスが決定し、その決定に応じて、加速プログラムをリモートクライアントに伝送することを含む。別の実施態様では、アプライアンスは、データファイルをキャッシュする。一実施態様では、アプライアンスは、データファイル要求を傍受し、要求に応じてリモートクライアントに対し、キャッシュされたデータファイルを伝送する。
【００１１】
別の態様では、本発明は、リモートロケーションのクライアントに対するアプリケーションおよびデータファイルのコンピューティング環境を、リモートユーザに提供する際に加速するためのシステムに関する。このシステムは、１つまたは複数のリモートクライアントと、１つまたは複数のサーバとの間の通信を加速するためのアプライアンスを含む。このシステムは、アプリケーションを実行するというリモートクライアントからの要求を受信するサーバをさらに備える。リモートクライアント、およびサーバは、アプライアンスを介して通信する。サーバは、実行されるアプリケーションをリモートクライアントにストリーミングする。クライアントは、アプリケーションが使用可能なデータファイルをサーバに要求し、アプライアンスは、リモートクライアントに対するデータファイルの伝送を加速する。
【００１２】
本発明の実施態様によっては、アプライアンスは、リモートクライアントに対するアプリケーションのストリーミングを加速する。一実施態様では、アプライアンスは、以下の加速技術の１つを実行することによって、データファイルの伝送、またはアプリケーションのストリーミングを加速する：１）圧縮；２）解凍；３）伝送制御プロトコルプーリング；４）伝送制御プロトコルの多重化；５）伝送制御プロトコルのバッファリング；および６）キャッシング。別の実施態様では、このシステムは、リモートクライアントとサーバとの間の通信を加速する加速プログラムをリモートクライアント上に含む。一実施態様では、アプライアンスは、リモートクライアントとの仮想プライベートネットワーク接続、またはセキュアソケットレイヤー（ＳＳＬ）接続を確立する。
【００１３】
本発明のシステムの実施態様によっては、アプライアンスは、リモートクライアントとサーバとの間のトランスポート層接続を介して通信されるネットワークパケットのペイロードを加速する。一実施態様では、アプライアンスは、サーバとの接続またはセッションを確立するというクライアントからの要求に応じて、加速プログラムをリモートクライアントに伝送する。別の実施態様では、リモートクライアントは、アプライアンスから受信後、自動的に加速プログラムをインストールして実行する。リモートクライアント上の加速プログラムは、次の加速技術の１つを実行し得る：１）圧縮；２）解凍；３）伝送制御プロトコルプーリング；４）伝送制御プロトコルの多重化；５）伝送制御プロトコルのバッファリング；および６）キャッシング。一実施態様では、リモートクライアントは、アプリケーションまたはサーバに対して透過的に、加速プログラムを実行する。
【００１４】
本発明のシステムの別の実施態様では、アプライアンスは、アプリケーションが加速可能であると決定し、その決定に応じて、加速をリモートクライアントに伝送する。一実施態様では、アプライアンスは、データファイルをキャッシュするためのキャッシュを含む。実施態様によっては、アプライアンスは、データファイル要求を傍受し、要求に応じて、キャッシュされたデータファイルをリモートクライアントに伝送する。
【００１５】
本発明の上記およびその他の態様は、以下の詳細な説明、および添付の図面から容易に明らかになるであろう。図面は、具体的に示すためのものであり、本発明を制限する意図はない。
【発明を実施するための最良の形態】
【００１６】
以下の様々な実施態様の説明を読む上で、明細書の各項目、およびその個々の内容の説明は参考にし得る：
−  Ａ項は、本明細書に記載する実施態様を実践する際に役だち得るネットワーク環境およびコンピューティング環境を説明する；
−  Ｂ項は、コンピューティング環境をリモートユーザに提供するシステムおよび方法の実施態様を説明する；
−  Ｃ項は、クライアントおよびサーバ間の通信を加速するシステムおよび方法の実施態様を説明する；および
−  Ｄ項は、ＢおよびＣ項に記載されているシステムおよび方法を使用して、リモートユーザに対するコンピューティング環境の提供を加速する具体的な一例の実施態様を説明する。
【００１７】
（Ａ．ネットワークおよびコンピューティング環境）
システムおよび方法の実施態様の仕様を説明する前に、実施態様を展開し得るネットワークおよびコンピューティング環境を説明すると役立つと思われる。次に、図１Ａを参照すると、ネットワーク環境５が示されている。簡潔に説明すると、ネットワーク環境５は、１つまたは複数のネットワーク４０、４０’’を介して、１つまたは複数のサーバ３０〜３０’’（サーバ３０、またはリモートマシン３０とも呼ばれる）と通信するクライアント１０〜１０’’（クライアント１０、またはローカルマシン１０とも呼ばれる）を有する。実施態様によっては、クライアント１０は、アプライアンス１２５０を介してサーバ３０と通信する。
【００１８】
図１Ａは、クライアント１０〜１０〜１０’’およびサーバ３０〜３０’’間のネットワーク４０およびネットワーク４０’を示すが、クライアント１０〜１０’およびサーバ３０〜３０’’は同じネットワーク４０上に存在し得る。ネットワーク４０および４０’は、同じタイプのネットワーク、または異なるタイプのネットワークでよい。ネットワーク４０および／またはネットワーク４０’は、企業イントラネットなどのローカルエリアネットワーク、都市規模ネットワーク（ＭＡＮ）、またはインターネットもしくはワールドワイドウェブなどのワイドエリアネットワーク（ＷＡＮ）でよい。一実施態様では、ネットワーク４０’はプライベートネットワークでよく、ネットワーク４０はパブリックネットワークでよい。実施態様によっては、ネットワーク４０はプライベートネットワーク、ネットワーク４０’はパブリックネットワークでよい。別の実施態様では、ネットワーク４０および４０’は、ともにプライベートネットワークでよい。実施態様によっては、クライアント１０〜１０’’は、ネットワーク４０によるＷＡＮ接続を介して、企業データセンターに位置するサーバ３０〜３０’’と通信する企業の支社に位置してよい。
【００１９】
ネットワーク４０および／または４０’は、任意のタイプおよび／または形態のネットワークでよく、以下のどれでも備えることができる：２地点間ネットワーク、放送網、ワイドエリアネットワーク、ローカルエリアネットワーク、電気通信網、データ通信網、コンピュータネットワーク、ＡＴＭ（非同期転送モード）ネットワーク、ＳＯＮＥＴ（動機光ネットワーク）ネットワーク、ＳＤＨ（同期デジタルハイアラーキ）ネットワーク、無線ネットワーク、および有線ネットワーク。ネットワーク４０および／または４０’の接続形態は、バス、スター、またはリングネットワーク接続形態でよい。ネットワーク４０および／または４０’、並びにネットワークの接続形態は、本明細書に記載する運用をサポートすることが可能な当業者が周知している任意のこうしたネットワークまたはネットワーク接続形態でよい。
【００２０】
図１Ａに示すように、アプライアンス１２５０（本明細書では、インターフェースユニット１２５０とも呼ぶ）は、ネットワーク４０および４０’間に示されている。実施態様によっては、アプライアンス１２５０は、ネットワーク４０上に位置してよい。たとえば、企業の支社は、支社でアプライアンス１２５０を展開し得る。他の実施態様では、アプライアンス１２５０は、ネットワーク４０’上に位置し得る。たとえば、アプライアンス１２５０は、企業データセンターに位置することができる。さらに別の実施態様では、複数のアプライアンス１２５０は、ネットワーク４０上に展開し得る。実施態様によっては、複数のアプライアンス１２５０は、ネットワーク４０’上に展開し得る。一実施態様では、アプライアンス１２５０は、第２アプライアンス１２５０’と通信する。他の実施態様では、アプライアンス１２５０は、任意のクライアント１０〜１０’、またはクライアント１０〜１０’と同じかまたは異なるネットワーク４０、４０’上のサーバ３０〜３０’’の一部でよい。１つまたは複数のアプライアンス１２５０は、クライアント１０〜１０’’およびサーバ３０〜３０’’間のネットワークまたはネットワーク通信経路内の任意の点に位置し得る。
【００２１】
一実施態様では、システムは、複数の論理的に群化されたリモートマシン３０を備え、これらの１つまたは複数は、ローカルマシン１０に代わってアプリケーションを実行するために使用することができる。これらの実施態様では、リモートマシンの論理群は、サーバファーム３８またはファーム３８と呼ばれることがある。これらの実施態様のいくつかでは、リモートマシン３０は、地理的に分散し得る。ファーム３８は、単一の実態として運用することができる。
【００２２】
各々のファーム３８内のリモートマシン３０は、異質でよい。つまり、１つまたは複数のリモートマシン３０は、あるタイプのオペレーティングシステムプラットフォーム（たとえば、ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．が製造しているＷＩＮＤＯＷＳ（登録商標）  ＮＴ）に従って動作することができるが、他の１つまたは複数のリモートマシン３０は、他のタイプのオペレーティングシステムプラットフォーム（たとえば、Ｕｎｉｘ（登録商標）またはＬｉｎｕｘ）に従って動作することができる。各々のファーム３８を含むリモートマシン３０は、ファーム３８内の他の各々のリモートマシン３０と必ずしも物理的に隣接する必要はない。したがって、ファーム３８として論理的に群化されたリモートマシン３０の群は、ワイドエリアネットワーク（ＷＡＮ）接続、またはミディアムエリアネットワーク（ＭＡＮ）接続を使用して相互接続し得る。たとえば、ファーム３８は、異なる大陸、またはある大陸の異なる地域、国、州、都市、キャンパス、または部屋に物理的に位置するリモートマシン３０を含み得る。ファーム３８内のリモートマシン３０間のデータ伝送速度は、リモートマシン３０が、ローカルエリアネットワーク（ＬＡＮ）接続、またはある形態の直接接続を使用して接続される場合に増加することが可能である。
【００２３】
リモートマシン３０は、サーバ、ファイルサーバ、アプリケーションサーバ、またはリモートマシンと呼ばれる場合がある。実施態様によっては、リモートマシン３０は、アプリケーションサーバ、またはマスターアプリケーションサーバとして機能する能力を有する場合がある。一実施態様では、リモートマシン３０は、アクティブディレクトリを含み得る。ローカルマシン１０は、クライアントノードまたはエンドポイントと呼ばれることもある。実施態様によっては、ローカルマシン１０は、アプリケーションにアクセスすることを求めるクライアントノード、他のローカルマシン１０のためにホストされたアプリケーションにアクセスを提供するアプリケーションサーバとして機能する能力を有する。
【００２４】
一実施態様では、ローカルマシン１０は、ファーム３８内のリモートマシン３０の１つと直接通信する。別の実施態様では、ローカルマシン１０は、ファーム３８内のリモートマシン３０と通信するために、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを実行する。さらに別の実施態様では、リモートマシン３０は、マスターノードの機能を提供する。実施態様によっては、ローカルマシン１０は、ネットワーク４０を通して、ファーム３８内のリモートマシン３０と通信する。ネットワーク４０上では、ローカルマシン１０は、たとえば、ファーム３８内のリモートマシン３０、３０’、３０’’、および３０’’’によってホストされる様々なアプリケーションの実行を要求し、アプリケーション実行の結果の出力を受信し、表示することができる。ネットワーク４０は、同期または非同期接続を含むことができ、ＬＡＮ、ＭＡＮ（ミディアムエリアネットワーク）、またはＷＡＮでよい。さらに、ネットワーク４０は、赤外チャネルまたは衛星帯などの無線リンクを含み得る。実施態様によっては、マスターノードのみが、リモートマシン３０’に関連するアドレス情報を識別し、提供するのに必要な機能を提供する。
【００２５】
実施態様によっては、ローカルマシン１０は、リモートマシン３０’’’と通信する。これらの実施態様の１つでは、リモートマシン３０’’’は、ウェブサーバの機能を提供する。これらとは別の実施態様では、リモートマシン３０’’’は、ローカルマシン１０からの要求を受信し、その要求をリモートマシン３０に回送し、リモートマシン３０からの要求に対する応答とともに、ローカルマシン１０による要求に応答する。これらとはさらに別の実施態様では、リモートマシン３０は、ローカルマシン１０が使用可能な一覧を取得し、アプリケーションの一覧によって識別されるアプリケーションをホストするリモートマシン３０’に関連する情報をアドレス指定する。これらとはさらに別の実施態様では、リモートマシン３０’’’は、ウェブインターフェースを使用して、ローカルマシン１０の要求に対する応答を提示する。一実施態様では、ローカルマシン１０は、リモートマシン３０’と直接通信して、識別されたアプリケーションにアクセスする。別の実施態様では、ローカルマシン１０は、リモートマシン３０’’’からのアプリケーション出力データ、およびリモートマシン３０’上の識別されたアプリケーションの実行により生成されたアプリケーション出力データを受信する。
【００２６】
次に、図１Ｂを参照すると、クライアント１０上のコンピューティング環境を提供および／または動作させるためのネットワーク環境が示されている。簡潔に説明すると、サーバ３０は、コンピューティング環境、またはアプリケーションおよびデータファイルを１つまたは複数のクライアントに提供するためのアプリケーション提供システム５００を備える。クライアント１０は、データファイルを使用または処理するアプリケーションを実行するためのコンピューティング環境１５を含み得る。ネットワーク４０、４０’、およびアプライアンス１２５０を介してサーバ３０と通信するクライアント１０は、アプリケーションおよびデータファイルをサーバ３０に要求し得るか、またはアプライアンス１２５０は、要求をクライアント１０からサーバ３０に回送し得る。たとえば、クライアント１０は、ローカルに記憶されているか、またはアクセス可能なアプリケーションおよびデータファイルをローカルに持たなくてよい。サーバ３０は、要求に応じて、アプリケーションおよびデータファイルをクライアント１０に提供することができる。たとえば、一実施態様では、サーバ３０は、アプリケーションをアプリケーションストリームとして伝送し、クライアント１０上のコンピューティング環境１５で動作させることができる。
【００２７】
図１Ｃおよび１Ｄは、クライアントコンピューティングデバイス１０、およびサーバコンピューティングデバイス３０として有用な汎用コンピュータ１３５のアーキテクチャの実施態様を示すブロック図である。図１Ｃおよび１Ｄに示すように、各々のコンピュータ１３５は、中央処理ユニット１０２、およびメインメモリユニット１２２を備える。各々のコンピュータ１３５は、その他の要素、たとえば１つまたは複数の入力／出力デバイス１３０ａ〜１３０ｂ（一般に、参照符号１３０で示す）、および中央処理ユニット１０２と通信するキャッシュメモリ１４０を備えてもよい。
【００２８】
中央処理ユニット１０２は、メインメモリユニット１２２からフェッチされたインストラクションに応答し、インストラクションを処理する任意の論理回路構成である。多くの実施態様では、中央処理ユニットは、マイクロプロセッサユニット、たとえば、カリフォルニア州、マウンテンビューのＩｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎが製造するユニット、イリノイ州、ショウンバーグのＭｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎが製造するユニット、カリフォルニア州、サンタクララのＴｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎが製造するＣｒｕｓｏｅおよびＥｆｆｉｃｅｏｎラインのプロセッサ、ニューヨーク州、ホワイトプレインズのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓが製造するプロセッサのライン、またはカリフォルニア州、サニーベールのＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓが製造するプロセッサのラインによって提供される。
【００２９】
メインメモリユニット１２２は、データを記憶するとともに、マイクロプロセッサ１０２が直接アクセスすることを可能にする１つまたは複数のメモリチップ、たとえば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、Ｂｕｒｓｔ  ＳＲＡＭまたはＳｙｎｃｈＢｕｒｓｔ  ＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、高速ページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、キャッシュ内蔵型高速ＤＲＡＭ（ＥＤＲＡＭ）、拡張データ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、拡張データ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バースト拡張データ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、キャッシュ内蔵型高速ＤＲＡＭ（ＥＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、拡張ＳＤＲＡＭ（ＥＳＤＲＡＭ）、同期リンクＤＲＡＭ（ＳＬＤＲＡＭ）、ダイレクトＲａｍｂｕｓ  ＤＲＡＭ（ＤＲＤＲＡＭ）、または強誘導体  ＲＡＭ（ＦＲＡＭ）でよい。図１Ｃに示す実施態様では、プロセッサ１０２は、システムバス１２０を介してメインメモリ１２２と通信する（以下でさらに詳細に説明する）。図１Ｂは、プロセッサが、メモリポートを介してメインメモリ１２２と直接通信するコンピュータシステム１３５の一実施態様を示す。たとえば、図１Ｂでは、メインメモリ１２２はＤＲＤＲＡＭでよい。
【００３０】
図１Ｃおよび１Ｄは、「バックサイド」バスと呼ばれることもある２次バスを介してキャッシュメモリ１４０と直接通信する実施態様を示す。他の実施態様では、メインプロセッサ１０２は、システムバス１２０を使用してキャッシュメモリ１４０と通信する。キャッシュメモリ１４０は、一般に、メインメモリ１２２より高速の応答時間を有し、一般に、ＳＲＡＭ、ＢＳＲＡＭ、またはＥＤＲＡＭによって提供される。
【００３１】
図１Ｃに示す実施態様では、プロセッサ１０２は、ローカルシステムバス１２０を介して様々なＩ／Ｏデバイス１３０と通信する。様々なバスは、中央処理ユニット１０２を、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌアーキテクチャ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む様々なＩ／Ｏデバイス１３０に接続するために使用される。Ｉ／Ｏデバイスがビデオディスプレーである実施態様の場合、プロセッサ１０２は、アドバンストグラフィックスポート（ＡＧＰ）を使用して、ディスプレーと通信することができる。図１Ｄは、メインプロセッサ１０２が、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、Ｒａｐｉｄ  Ｉ／Ｏ、またはＩｎｆｉｎｉｂａｎｄを介して、Ｉ／Ｏデバイスと直接通信するコンピュータシステム１３５の一実施態様を示す。図１Ｄは、ローカルバスおよび直接通信が混合される一実施態様をさらに示す：プロセッサ１０２は、ローカル相互接続を使用してＩ／Ｏデバイス１３０ａと通信する一方、Ｉ／Ｏデバイス１３０ｂと直接通信する。
【００３２】
コンピュータシステム１３５には、多様なＩ／Ｏデバイス１３０が存在し得る。入力デバイスとしては、キーボード、マウス、トラックパッド、トラックボール、マイクロフォン、および描画タブレットが挙げられる。出力デバイスとしては、ビデオディスプレー、スピーカ、インクジェットプリンタ、レーザプリンタ、および昇華型プリンタが挙げられる。Ｉ／Ｏデバイスは、コンピュータシステム１３５に大容量記憶装置、たとえばハードディスクドライブ、３．５インチ、５．２５インチディスク、またはＺＩＰディスクなどのフロッピー（登録商標）ディスクを収容するフロッピー（登録商標）ディスクドライブ、ＣＤ−ＲＯＭドライブ、ＣＤ−Ｒ／ＲＷドライブ、ＤＶＤ−ＲＯＭドライブ、様々な形式のテープドライブ、カリフォルニア州、ロスアラミトスのＴｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，Ｉｎｃ．が製造しているＵＳＢ  Ｆｌａｓｈ  ＤｒｉｖｅラインのデバイスなどのＵＳＢ記憶デバイスも提供する。
【００３３】
さらに他の実施態様では、Ｉ／Ｏデバイス１３０は、システムバス１２０と外部通信バス、たとえばＵＳＢバス、Ａｐｐｌｅ  Ｄｅｓｋｔｏｐバス、ＲＳ−１３２直列接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ  ８００バス、Ｅｔｈｅｒｎｅｔ（登録商標）バス、ＡｐｐｌｅＴａｌｋバス、ギガビットイーサネット（登録商標）バス、非同期転送モードバス、ＨＩＰＰＩバス、Ｓｕｐｅｒ  ＨＩＰＰＩバス、ＳｅｒｉａｌＰｌｕｓバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはシリアルアタッチト小型コンピュータシステムのインターフェースバスとの間のブリッジでよい。
【００３４】
図１Ｃおよび図１Ｄに示す類の汎用コンピュータは、一般に、システムリソースに対するタスクおよびアクセスのスケジューリングを制御するオペレーティングシステムの制御下で動作する。一般的なオペレーティングシステムとしては、以下が挙げられる：ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．が製造しているＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）；カリフォルニア州、クパチーノのＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒが製造しているＭａｃＯＳ、ニューヨーク州、アーモンクのＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ製造しているＯＳ／２；およびユタ州、ソルトレークシティのＣａｌｄｅｒａ  Ｃｏｒｐ．が販売している自由に入手可能なオペレーティングシステム。
【００３５】
クライアントマシン１０またはサーバ３０がモバイルデバイスを含む実施態様では、デバイスは、すべてイリノイ州、ショウンバーグのＭｏｔｏｒｏｌａ  Ｃｏｒｐ．が製造しているｉ５５ｓｒ、ｉ５８ｓｒ、ｉ８５ｓ、またはｉ８８ｓなどのＪＡＶＡ（登録商標）対応携帯電話；日本、京都のＫｙｏｃｅｒａが製造している６０３５または７１３５；あるいは韓国、ソウルのＳａｍｓｕｎｇ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｃｏ．，Ｌｔｄ．が製造しているｉ３００またはｉ３３０でよい。モバイルデバイスを含む他の実施態様では、モバイルデバイスは、ＰａｌｍＯＳ  オペレーティングシステム、たとえば、すべてカリフォルニア州、ミルピタスのｐａｌｍＯｎｅ，Ｉｎｃ．が製造しているＴｕｎｇｓｔｅｎ  Ｗ、ＶＩＩ、ＶＩＩｘ、ｉ７０５などの制御下で動作するパーソナルデジタルアシスタント（ＰＤＡ）でよい。さらに他の実施態様では、クライアント１１３は、ＰｏｃｋｅｔＰＣ  オペレーティングシステムの制御下で動作するパーソナルデジタルアシスタント（ＰＤＡ）、たとえば、すべてカリフォルニア州、パロアルトのＨｅｗｌｅｔｔ−Ｐａｃｋａｒｄ  Ｃｏｒｐｏｒａｔｉｏｎが製造しているｉＰＡＱ  ４１５５、ｉＰＡＱ  ５５５５、ｉＰＡＱ  １９４５、ｉＰＡＱ  ２２１５、およびｉＰＡＱ  ４２５５；カリフォルニア州、ウォールナットのＶｉｅｗＳｏｎｉｃが製造しているＶｉｅｗＳｏｎｉｃ  Ｖ３６；またはニューヨーク州、ニューヨークのＴｏｓｈｉｂａ  Ａｍｅｒｉｃａ，Ｉｎｃ．が製造しているＴｏｓｈｉｂａ  ＰｏｃｋｅｔＰＣ  ｅ４０５でよい。さらに他の実施態様では、モバイルデバイスは、すべてカリフォルニア州、ミルピタスのＰａｌｍＯｎｅ，Ｉｎｃ．が製造しているＴｒｅｏ  １８０、Ｔｒｅｏ  ２７０、Ｔｒｅｏ  ６００、Ｔｒｅｏ  ６５０、またはＴｒｅｏ  ７００ｗなどのコンビネーションＰＤＡ／電話デバイスである。さらに他の実施態様では、モバイルデバイスは、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐ．が製造しているＭＰｘ２００などのＰｏｃｋｅｔＰＣオペレーティングシステムの制御下で動作する携帯電話である。代表的なモバイルデバイスは、プロセッサ１０２、およびメインメモリ１０４など、図１Ｃおよび１Ｄで上記のとおり説明した多くの要素を含み得る。
【００３６】
Ｂ．コンピューティング環境を提供するためのシステムおよび方法
ある実施態様は、サーバ３０からリモートロケーションに位置するクライアント１０におけるリモートユーザに対し、コンピューティング環境を提供するシステムおよび方法を目的とする。本項の方法およびシステムは、一般にサーバ３０について記述しているが、以下の方法およびシステムは、サーバ３０、ネットワークアプライアンス１２５０、またはこれらの任意の組合せを使用し得る。
【００３７】
次に、図１Ｅを参照すると、リモートマシン３０が、図１Ａに示すようにファーム３８を備えるシステムの一実施態様が示されている。各々のリモートマシン３０は、ネットワーク側インターフェース２０２、およびファーム側インターフェース２０４を備える。リモートマシン３０のネットワーク側インターフェース２０２は、１つまたは複数のローカルマシン１０またはネットワーク２１０と通信し得る。ネットワーク２１０は、ＷＡＮ、ＬＡＮ、またはインターネットもしくはワールドワイドウェブなどの国際ネットワークでよい。ローカルマシン１０は、ネットワーク２１０を使用して、リモートマシン３０との接続を確立し得る。
【００３８】
リモートマシン３０のファーム側インターフェース２０４は、通信リンク２００を通して互いに相互接続されるため、リモートマシン３０は互いに通信することができる。各々のリモートマシン３０上では、ファーム側インターフェース２０４は、ネットワーク側インターフェース２０２と通信する。ファーム側インターフェース２０４はさらに、持続ストア２３０と通信し（矢印２２０で示す）、実施態様によっては動的ストア２４０と通信する。リモートマシン３０、持続ストア２３０、および動的ストア２４０の組合せは、提供される場合、ファーム３８と総称される。実施態様によっては、リモートマシン３０は、持続ストア２３０と通信し、他のリモートマシン３０’は、リモートマシン３０と通信して、持続ストア内に記憶された情報にアクセスする。
【００３９】
持続ストア２３０は、ディスク、ディスクファーム、独立ディスクの冗長アレイ（ＲＡＩＤ）、書き込み可能なコンパクトディスク、または読み書き可能であり、電源が記憶デバイスから取り外された時に、書き込まれたデータを維持する任意のその他のデバイス上に物理的にインプリメントすることができる。単一の物理デバイスは、複数の持続ストアに記憶装置を提供することができ、つまり単一の物理デバイスは、複数のファーム３８に持続ストア２３０を提供し得る。持続ストア２３０は、ファーム３８内の各々のリモートマシン３０に関連する静的データ、およびファーム３８内のすべてのリモートマシン３０によって使用されるグローバルデータを維持する。一実施態様では、持続ストア２３０は、リモートマシンのデータを軽量ディレクトリアクセスプロトコル（ＬＤＡＰ）データモデル内に維持する。他の実施態様では、持続ストア２３０は、リモートマシンのデータをＯＤＢＣに準拠するデータベース内に記憶する。本明細書の目的上、「静的データ」という用語は、頻繁に変化しない、つまり１時間、１日、週ごとにのみ変化するデータ、またはまったく変化しないデータを意味する。各々のリモートマシンは、持続記憶装置サブシステムを使用して、持続ストア２３０からデータを読み取り、持続ストア２３０にデータを書き込む。
【００４０】
持続ストア２３０によって記憶されるデータは、信頼性の目的上、物理的または論理的に複製することができる。たとえば、物理的冗長性は、各々のディスクがデータのコピーを提供する冗長なミラードディスクのセットを使用して提供することができる。他の実施態様では、データベース自体が、標準のデータベース技術を使用して複製され、データベースの複数のコピーを提供し得る。さらに他の実施態様では、物理的および論理的な複製は、同時に使用することができる。
【００４１】
動的ストア２４０（つまり、記憶されたすべてのテーブルの集合）は、様々な方法で具現することができる。一実施態様では、動的ストア２４０は集中化され、つまりすべてのランタイムデータは、ファーム３８内の１つのリモートマシン３０のメモリに記憶される。リモートマシンは、マスターネットワークノードとして動作し、ファーム３８内の他のすべてのリモートマシン３０は、そのランタイムデータにアクセスする時に、マスターネットワークノードと通信する。別の実施態様では、ファーム３８内の各々のリモートマシン３０は、動的ストア２４０の完全なコピーを維持する。この場合、リモートマシン３０は、動的ストア２４０のコピーを最新にしておくために、他のすべてのリモートマシン３０と通信する。
【００４２】
別の実施態様では、各々のリモートマシン３０は、それ自体のランタイムデータを維持し、リモートマシン３０からランタイムデータを取得することを求める場合、他のすべてのリモートマシン３０と通信する。したがって、たとえば、ローカルマシン１０によって要求されたアプリケーションプログラムを探そうとするリモートマシン３０は、ファーム３８内の他のすべてのリモートマシン３０と直接通信し、要求されたアプリケーションをホストする１つまたは複数のリモートマシンを探す。
【００４３】
最大数のリモートマシン３０を有するファーム３８の場合、これらの実施態様によって生成されるネットワークトラフィックは重くなる可能性がある。一実施態様は、ファーム３８内のリモートマシン３０のサブセット、一般に２つ以上を「コレクタポイント」として指定することによって、重いネットワークトラフィックを軽減する。一般に、コレクタポイントは、ランタイムデータを収集するリモートマシンである。各々のコレクタポイントは、ファーム３８内の他の特定のリモートマシン３０から収集したランタイムデータを記憶する。ファーム３８内の各々のリモートマシン３０は、コレクタポイントとして動作することが可能であり、その結果、コレクタポイントとして指定することができる。一実施態様では、コレクタポイントは、全体の動的ストア２４０のコピーを記憶する。別の実施態様では、各々のコレクタポイントは、動的ストア２４０の一部分を記憶し、つまり、特定のデータタイプのランタイムデータを維持する。リモートマシン３０によって記憶されるデータのタイプは、１つまたは複数の基準に従って予め決めることができる。たとえば、リモートマシン３０は、様々なタイプのデータを、そのブート順序に基づいて記憶し得る。あるいは、リモートマシン３０によって記憶されるデータのタイプは、管理者が管理ツール１４０を使用して構成することができる。これらの実施態様では、動的ストア２４０は、ファーム３８内の２つ以上のリモートマシン３０の間で分配される。別の実施態様では、アプライアンス１２５０は、リモートマシン３０、動的ストア１６２４０、および持続ストア２３０間で渡されるデータを加速することによって、重いネットワークトラフィックを軽減し得る。こうした加速は、本明細書のＣ項でさらに説明する技術の何れかにより提供し得る。たとえば、アプライアンス１２５０は、重いネットワークトラフィックを軽減するために使用し得る。
【００４４】
コレクタポイントとして指定されていないリモートマシン３０は、コレクタポイントとして指定されている、ファーム３８内のリモートマシン３０を認識する。コレクタポイントとして指定されていないリモートマシン１８０は、ランタイムデータを提供および要求する時に、特定のコレクタポイントと通信し得る。したがって、コレクタポイントはネットワークトラフィックを軽減し、なぜなら、ファーム３８内の各々のリモートマシン３０は、ランタイムデータにアクセスすることを求める際に、他のすべてのリモートマシン３０ではなく、単一のコレクタポイントのリモートマシン３０と通信するからである。
【００４５】
各々のリモートマシン３０は、複数のタイプのデータに対してコレクタポイントとして動作することが可能である。たとえば、リモートマシン３０’’は、情報をライセンスし、情報をロードするためにコレクタポイントとして動作することが可能である。これらの実施態様では、各々のコレクタポイントは、様々なタイプのランタイムデータを収集し得る。たとえば、この事例を具体的に示すため、リモートマシン３０’’’はライセンス情報を収集し、リモートマシン３０’’はロード情報を収集する。
【００４６】
実施態様によっては、各々のコレクタポイントは、ファーム３８内のリモートマシン３０間で共用されるデータを記憶する。これらの実施態様では、特定のタイプのデータの各々のコレクタポイントは、そのコレクタポイントが収集したデータを、ファーム３８内の当該データタイプの他のすべてのコレクタポイントと交換する。したがって、こうしたデータの交換が完了した後、各々のコレクタポイント３０’’および３０は同じデータを所有する。また、これらの実施態様では、コレクタポイント３０および３０’’は、他のすべてのコレクタポイントがランタイムデータの何らかの更新を把握している状態に保つ。
【００４７】
ブラウジングは、ローカルマシン１０がファーム３８、リモートマシン３０、およびファーム３８内のアプリケーションを閲覧し、ファーム３８全体のセッションなどの使用可能な情報にアクセスすることを可能にする。各々のリモートマシン３０は、ローカルマシン１０にブラウジング機能を提供するため、ＩＣＡブラウジングサブシステム２６０を備える。ローカルマシン１０が、リモートマシン３０の何れかのＩＣＡブラウザサブシステム２６０との接続を確立した後、当該ブラウザのサブシステムは、多様なローカルマシンの要求をサポートする。このようなローカルマシンの要求は、以下を含む：（１）ファーム内のリモートマシンの名称を一覧にする、（２）ファーム内で発行されたアプリケーションの名称を一覧にする、（３）ローカルマシン１０に有用なリモートマシンのアドレスに対して、リモートマシンの名称および／またはアプリケーションの名称を決定する。ＩＣＡブラウザサブシステム２６０は、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを実行するローカルマシン１０によって行われる要求もサポートし、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションは、要求に応じて、ユーザが承認されたファーム３８内のアプリケーションのビューをローカルマシン１０に提供する。ＩＣＡブラウザサブシステム２６０は、上記のすべてのローカルマシンの要求をリモートマシン３０内の適切なサブシステムに回送する。
【００４８】
一実施態様では、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０を有するファーム３８内の各々のリモートマシン３０は、ローカルマシン１０のユーザに、ファーム３８内のアプリケーションのビューを提供することができる。ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、ローカルマシン１０のユーザが、アクセスの承認を有するアプリケーションのビューを制限する場合がある。一般に、このｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサービスは、アイコンのリストまたはグループとして、アプリケーションをユーザに提示する。
【００４９】
ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０によって提供される機能は、２つのタイプのローカルマシン、（１）ローカルマシンのデスクトップから直接、機能にアクセスできるｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシン、および（２）リモートマシン上のｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応デスクトップを実行することによって、機能にアクセス可能な非ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシン（たとえば、従来のローカルマシン）で使用可能である。
【００５０】
ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシンと、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０との間の通信は、ＩＣＡ仮想チャネルの上部に確立される専用仮想チャネルを通して行うことができる。他の実施態様では、通信は、ＸＭＬサービスを使用して行われる。これらの実施態様の１つでは、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシンは、ＸＭＬサブシステム、たとえば、以下に図６に関連して説明するＸＭＬサービス５１６と通信し、リモートマシン３０上にｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄの機能を提供する。
【００５１】
一実施態様では、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシンは、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０によりリモートマシンと接続する。この実施態様では、ローカルマシン１０は、要求をＩＣＡブラウザサブシステム２６０に送信し、ローカルマシン１０が使用可能なアプリケーションを特定するために、リモートマシン３０とのＩＣＡ接続を確立する。ローカルマシン１０は、次に、ユーザの信任状を取得するクライアント側ダイアログを実行する。信任状は、ＩＣＡブラウザサブシステム２６０によって受信され、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０に送信される。一実施態様では、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、信任状をユーザ管理サブシステムに送信して認証を求める。ユーザ管理サブシステムは、ユーザが属するアカウントのリストを表す一連の顕著な名称を返すことができる。ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、認証後、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄの仮想チャネルを確立する。このチャネルは、アプリケーションのフィルタリングが完了するまで、開放状態を保つ。実施態様によっては、Ｃ項で説明する加速プログラム６１２０は、ローカルマシン１０の要求に応じて、ローカルマシン１０にも伝送される。
【００５２】
ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、次に、これらのアカウントに関連する共通アプリケーションサブシステム５２４に、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ情報を要求する。共通アプリケーションサブシステム５２４は、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ情報を持続ストア２３０から取得する。ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ情報を受信後、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ情報をフォーマットし、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ仮想チャネルを通して、この情報をローカルマシンに返す。その結果、部分ＩＣＡ接続は閉鎖する。
【００５３】
ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシンが、リモートマシンとの部分ＩＣＡ接続を確立するもう１つの例では、ファーム３８を選択するローカルマシン１０のユーザを考慮する。ファーム３８の選択によって、要求は、ローカルマシン１０からＩＣＡブラウザサブシステム２６０に送信され、選択されたファーム３８内のリモートマシン３０の１つとのＩＣＡ接続が確立される。ＩＣＡブラウザサブシステム２６０は、要求をｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０に送信し、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、ファーム３８内のリモートマシン３０を選択する。リモートマシン３０に関連するアドレス情報が特定され、ＩＣＡブラウザサブシステム２６０によって、ローカルマシン１０に返される。ローカルマシン１０は、次に、受信したアドレス情報に対応するリモートマシン３０に接続することができる。
【００５４】
別の実施態様では、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ対応のローカルマシン１０、ＩＣＡ接続、その後、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ仮想チャネルが確立され、ＩＣＡ接続が持続する限り開放状態を保つ。このｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ仮想チャネルを通して、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ情報の更新をローカルマシン１０に強制する。ローカルマシン１０に対する更新の強制は、本明細書で説明する加速技術によって加速することができる。更新を達成するため、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０は、共通アプリケーションサブシステム５２４からのイベントに署名し、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０が、発行済みのアプリケーションの変更を検出することを許可する。
【００５５】
図１Ｆを参照すると、ブロック図は、ローカルマシンが、ウェブサービスディレクトリのＧＵＩの発行を介して使用可能な複数のアプリケーションプログラムを提供するためのシステムアーキテクチャのもう１つの実施態様を示す。システムは、ローカルマシン１０および複数のリモートマシン３０を備える。１つのリモートマシン３０は、コンテンツサーバとして機能する。リモートマシン３０’は、ウェブサーバの機能を提供する。リモートマシン３０’’は、アプリケーションファイルへのアクセスを提供する機能を提供し、アプリケーションサーバまたはファイルサーバとして動作する。ローカルマシン１０は、コンテンツをコンテンツサーバ３０、ウェブサーバ３０’、およびアプリケーションサーバ３０’’から、ネットワーク１５５を通してダウンロードすることができる。一実施態様では、ローカルマシン１０は、コンテンツ（たとえば、アプリケーション）をアプリケーションサーバ３０’’から、クライアント−アプリケーションサーバ通信チャネル１１５０を通してダウンロードすることができる。
【００５６】
一実施態様では、ローカルマシン１０上のウェブブラウザ１１は、セキュアソケットレイヤー（ＳＳＬ）サポートを使用して、コンテンツサーバ３０および／またはウェブサーバ３０’と通信する。ＳＳＬは、カリフォルニア州、マウンテンビューのＮｅｔｓｃａｐｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｃｏｒｐｏｒａｔｉｏｎによって開発された保護プロトコルであり、現在、Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ（ＩＥＴＦ）によって推奨されている規格である。あるいは、ウェブブラウザ１１は、他のセキュリティプロトコルを使用して、コンテンツサーバ３０および／またはウェブサーバ３０’に接続することができ、こうしたプロトコルとしては、カリフォルニア州、ロスアルトスのＴｅｒｉｓａ  Ｓｙｓｔｅｍｓによって開発されたセキュアハイパーテキスト転送プロトコル（ＳＨＴＴＰ）、ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって開発されたプライベートコミュニケーションテクノロジー（ＰＣＴ）、ＩＥＴＦによって推奨されるトランスポートレベルセキュリティ（ＴＬＳ）規格が挙げられるが、これらだけに限らない。他の実施態様では、ウェブブラウザ１１は、ハイパーテキスト転送プロトコル（ＨＴＴＰ）などの暗号化を行わない通信プロトコルを使用して、サーバ３０と通信する。
【００５７】
さらに、ローカルマシン１０は、クライアント−アプリケーションサーバ通信チャネル１１５０を通して、アプリケーションサーバ３０’’との通信を確立および交換するために、アプリケーションクライアント１３を含む。一実施態様では、アプリケーションクライアント１３は、ＧＵＩアプリケーションである。実施態様によっては、アプリケーションクライアント１３は、フロリダ州、フォートローダーデールのＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発された独立計算アーキテクチャ（ＩＣＡ）クライアントであり、以下ではＩＣＡクライアント１３とも呼ばれる。アプリケーションクライアント１３のその他の実施態様としては、ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって開発されたリモートディスプレープロトコル（ＲＤＰ）クライアント、マルチメディアアプリケーション、ｅメール、Ｊａｖａ（登録商標）、または．ＮＥＴコードを実行可能なＸ−Ｗｉｎｄｏｗｓ（登録商標）クライアント１３、クライアント側プレーヤー、インタープリタ、またはシミュレータが挙げられる。さらに、一実施態様では、アプリケーションサーバ３０’上で実行されるアプリケーションの出力は、ＩＣＡクライアント１３を介して、ローカルマシン１０に表示することができる。実施態様によっては、アプリケーションクライアント１３は、アプリケーションストリーミングクライアント５５２などのアプリケーションクライアントであり、図５に関連して詳細に説明されている。実施態様によっては、アプリケーションクライアント１３は、クライアント１０とサーバ３０との間の通信を加速するため、本明細書に記載する実施態様の何れかによる加速プログラム６１２０を含む。
【００５８】
ローカルマシン１０は、ウェブサービスディレクトリ１６０をサーチして、ウェブサービスを探す。一実施態様では、サーチは手動サーチである。あるいは、サーチは自動サーチである。ウェブサービスディレクトリ１６０は、ウェブサービスディレクトリ内のウェブサービスをサーチするために、白色および黄色ページなど、サービスに基づくビューも提供し得る。別の実施態様では、ウェブサービスディレクトリ１６０は、ＧＵＩアプリケーションの構造化サービス名称およびサービスの種類に基づく階層的なブラウジングをサポートする。一実施態様では、ウェブサービスディレクトリ１６０は、ディレクトリサーバなどのコンテンツサーバ３０に関係なく、リモートマシン上で実行される。他の実施態様では、ウェブサービスディレクトリ１６０は複数のサーバ上で実行される。
【００５９】
実施態様によっては、コンテンツサーバ３０は、ローカルマシン１０が、ウェブサービスディレクトリ１６０内の情報または分析を提供することによって、この追加の分析または情報に基づいてウェブサービスを選択することを可能にする。ウェブサービスディレクトリ１６０がリストすることが可能なサービス情報の例としては、サービスを提供する事業体の名称、サービスのタイプ、サービスのテキスト記述、１つまたは複数のサービスアクセスポイント（ＳＡＰ）、ネットワークのタイプ、使用する経路（たとえば、ＴＣＰまたはＨＴＴＰＳ）、およびサービス品質（ＱｏＳ）情報が挙げられるが、これらだけに限らない。さらに、サービス情報は、クライアントデバイスのタイプ、またはユーザ（たとえば、職務）に特有でよい。したがって、サービスの選択は、上記の属性のうちの１つまたは複数でよい。
【００６０】
一実施態様では、サービスのタイプは、ローカルマシン１０が、ウェブサービスにアクセスするために使用しなければならないプログラミングインターフェースを示す。たとえば、サービスのタイプは、ウェブサービス記述言語（ＷＳＤＬ）などのインターフェース記述言語によって符号化される。
【００６１】
サービスアクセスポイント、つまりＳＡＰは、アプリケーションに一意のアドレスである。ＳＡＰは、コンピュータシステムが、ローカルマシン１０、および各々のリモートマシン３０において複数のアプリケーションをサポートすることを可能にする。たとえば、アプリケーションサーバ３０’’は、電子メール（つまり、ｅメール）アプリケーション、ファイル転送アプリケーション、および／またはＧＵＩアプリケーションをサポートし得る。一実施態様では、これらのアプリケーションは、アプリケーションサーバ３０’’内で一意のＳＡＰを有する。一実施態様では、ＳＡＰは、ウェブまたはインターネットアドレス（たとえば、ドメイン名システム（ＤＮＳ）の名称、ＩＰ／ポート、または均一リソースロケータ（ＵＲＬ））である。したがって、一実施態様では、ＳＡＰは、ウェブサーバ３０’のアドレスを、ウェブサーバ３０’上に記憶されたアプリケーションのアドレスの一部として識別する。実施態様によっては、ＳＡＰは、発行サーバプラグイン１６５のアドレスを、以下に記載するとおり、ウェブサーバ３０’上に記憶されているアドレスの一部として識別する。一実施態様では、ＳＡＰは、ＵＤＤＩレジストリの「ａｃｃｅｓｓＰｏｉｎｔ」である。
【００６２】
ウェブサービスディレクトリ１６０内で発行する項目を作成するために、コンテンツサーバ３０はウェブ発行ツール１７０を備える。一実施態様では、ウェブ発行ツール１７０はソフトウェアモジュールである。あるいは、ウェブ発行ツール１７０は、コンテンツサーバ３０外、またはコンテンツサーバ３０内に位置し得る別のサーバである。
【００６３】
一実施態様では、ウェブサーバ３０’は、ウェブページをローカルマシン１０に提供する。ウェブサーバ３０’は、ウェブページをローカルマシン１０に提供することが可能な任意のリモートマシン３０でよい。別の実施態様では、ウェブサーバ３０’は、企業内情報ポータルである（たとえば、企業イントラネット、または安全な企業間エクストラネット）。企業内ポータルは、アプリケーションを統合、個人化、または提供する企業ウェブサイトである。企業によっては、ポータルによって、従来のデスクトップソフトウェアは、ブラウザによる仮想職場へのアクセスに置き換えられた。実施態様によっては、アプライアンス１２５０は、ウェブページの提供を加速し、これは、本明細書に記載する加速技術の何れかを用いて加速される。他の実施態様では、加速プログラム６１２０は、ウェブページの提供を加速する。
【００６４】
ウェブサーバ３０’は、グラフィカルユーザインターフェース（ＧＵＩ）アプリケーションの発行を可能にする発行サーバプラグイン１６５も備える。より詳細には、発行サーバプラグイン１６５は、新しいウェブサービスエントリＵＲＬをＧＵＩアプリケーションサービスに翻訳して、ＧＵＩがウェブサービスディレクトリ１６０を介してアクセスすることを可能にする。一実施態様では、発行サーバプラグイン１６５は、共通ゲートウェイインターフェース（ＣＧＩ）スクリプトであり、これは、ＣＧＩ規格に準拠するデータを受け取り、データを返すように設計されたプログラムである。プログラムは、Ｃ、Ｐｅｒｌ、Ｊａｖａ（登録商標）、またはＶｉｓｕａｌ  Ｂａｓｉｃなど、任意のプログラミング言語で書くことができる。別の実施態様では、発行サーバプラグイン１６５は、Ｊａｖａ（登録商標）  Ｓｅｒｖｅｒ  Ｐａｇｅ（ＪＳＰ）である。発行サーバプラグイン１６５を使用して、リモートＧＵＩアプリケーションの発行を容易にすると、ローカルマシン１０は、それによって、プログラミングインターフェースまたはウェブページを通さずに、ＣｉｔｒｉｘのＩＣＡまたは  ＭｉｃｒｏｓｏｆｔのＲＤＰなどの完全なＧＵＩインターフェースを通してウェブサービスにアクセスすることができる。実施態様によっては、アプライアンス１２５０または加速プログラム６１２０は、クライアントに対するぜＧＵＩの提供を加速し、これは、本明細書のＣ項に記載されている何れかの加速技術を使用して加速される。
【００６５】
アプリケーションサーバ３０’’は、ローカルマシン１０で使用可能な１つまたは複数のアプリケーションをホストする。こうしたアプリケーションの例としては、ともにワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎが製造するＭＩＣＲＯＳＯＦＴ  ＷＯＲＤなどのワード処理プログラム、およびＭＩＣＲＯＳＯＦＴ  ＥＸＣＥＬなどの表計算プログラム、財務報告プログラム、顧客登録プログラム、プログラム提供技術サポート情報、顧客データベースアプリケーション、またはアプリケーションセットマネジャーが挙げられる。
【００６６】
一実施態様では、ウェブ発行ツール１７０は、ウェブ発行ツール１７０が、持続大容量記憶装置２２５内のウェブサービスディレクトリ１６０で発行するアプリケーションに関する情報を記憶する。一実施態様では、この情報は、動的発行サーバプラグイン１６５のＵＲＬである。持続大容量記憶装置２２５は、磁気ディスクまたは磁気光学ドライブでよい。一実施態様では、持続大容量記憶装置２２５は、１つまたは複数のローカルサービスデータベース内の発行済みアプリケーションに関連するデータを記憶するデータベースサーバである。持続大容量記憶装置２２５は、あらゆるリモートマシン３０の内部に位置するか、またはその外部に位置する構成要素でよい。
【００６７】
他の実施態様では、コンテンツサーバ３０またはウェブサーバ３０’は、ファーム３８内のリモートマシン３０と通信して、アプリケーションのリストを検索する。これらの実施態様の１つでは、コンテンツサーバ３０またはウェブサーバ３０’は、持続大容量記憶装置２２５ではなく、ファーム３８と通信する。
【００６８】
次に、図２を参照すると、フロー図は、アプリケーションプログラムの実行方法を選択するために行われるステップの一実施態様を示す。簡潔に説明すると、ローカルマシン、ローカルマシンのユーザに関連する信任状は、ローカルマシンによる実行に使用可能なアプリケーションの一覧の要求とともに受信される（ステップ２０２）。ローカルマシンが使用可能な複数のアプリケーションプログラムの一覧は、受信された信任状に応答して提供される（ステップ２０４）。要求は、一覧のアプリケーションを実行するために受信される（ステップ２０６）。一覧のアプリケーションを実行するための予め決められた数の方法の１つが、ポリシーに応じて選択され、予め決められた数の方法は、一覧のアプリケーションのアプリケーションストリーミングの方法を含む（ステップ２０８）。
【００６９】
ローカルマシン、またはローカルマシンのユーザに関連する信任状は、ローカルマシンによる実行に使用可能なアプリケーションの一覧の要求とともに受信される（ステップ２０２）。一実施態様では、リモートマシンは、使用可能なアプリケーションの一覧の要求をローカルマシン１０から、信任状とともに受信する。別の実施態様では、リモートマシン３０上のＸＭＬサービスは、要求および信任状を受信し、要求および信任状をリモートマシン３０上の管理サービスに伝送する。
【００７０】
実施態様によっては、ウェブサーバとして機能するリモートマシン３０は、ローカルマシン１０から通信を受信し、その通信をリモートマシン３０’に回送する。これらの実施態様の１つでは、ウェブサーバは、リモートマシン３０’上のＸＭＬサービスに通信を回送する。これらとは別の実施態様では、ウェブサーバは、ローカルマシン上に存在する。他の実施態様では、ローカルマシン１０からの通信は、ウェブサーバによってリモートマシン３０’に経路指定され、リモートマシン３０は、ローカルマシン１０のインターネットプロトコル（ＩＰ）アドレスに応じて選択される。
【００７１】
実施態様によっては、ローカルマシン１０は、リモートマシン３０上に存在するアプリケーションに対するアクセスを要求する。これらの実施態様の１つでは、ローカルマシン１０は、リモートマシン３０が、リモートマシン３０上に存在するアプリケーションを実行することを要求する。これらとは別の実施態様では、ローカルマシン１０は、アプリケーションを含む複数のアプリケーションファイルの検索を要求する。
【００７２】
実施態様によっては、ユーザは、リモートマシン３０によってローカルマシン１０に提示されたグラフィカルユーザインターフェースを介して、信任状をリモートマシン３０に提供する。他の実施態様では、ウェブサーバの機能を有するリモートマシン３０’’’は、グラフィカルユーザインターフェースをローカルマシン１０に提供する。さらに他の実施態様では、リモートマシン３０によってローカルマシン１０に伝送される収集エージェントは、ローカルマシン１０からの信任状を収集する。一実施態様では、信任状は、ユーザ名およびパスワードを意味する。別の実施態様では、信任状は、ユーザ名およびパスワードに限られず、ローカルマシン１０のマシンＩＤ、オペレーティングシステムのタイプ、オペレーティングシステムに対するパッチの存在、インストールされたネットワークカードのＭＡＣアドレス、クライアントサーバ上の電子透かし、アクティブディレクトリ内のメンバーシップ、ウィルススキャナの存在、パーソナルファイアウォールの存在、ＨＴＴＰヘッダ、ブラウザのタイプ、デバイスのタイプ、ネットワーク接続情報、たとえばインターネットプロトコルアドレスまたはアドレスの範囲、リモートマシン３０のマシンＩＤ、時間帯を変更するための調節を含むアクセス要求の日時、並びに信任状の承認を含むが、これらだけに限らない。
【００７３】
実施態様によっては、ローカルマシンに関連する信任状は、ローカルマシンのユーザに関連する。これらの実施態様の１つでは、信任状は、ユーザが所有する情報である。これらとは別の実施態様では、信任状は、ユーザ認証情報である。他の実施態様では、ローカルマシンに関連する信任状は、ネットワークに関連する。これらの実施態様の１つでは、信任状は、ローカルマシンが接続し得るネットワークに関連する情報である。これらとは別の実施態様では、信任状は、ローカルマシンに関する情報を収集するネットワークに関連する情報である。さらに他の実施態様では、ローカルマシンに関連する信任状は、ローカルマシンの特性である。
【００７４】
ローカルマシンが使用可能な複数のアプリケーションプログラムの一覧は、受信された信任状に応じて提供される（ステップ２０４）。一実施態様では、ローカルマシン１０のユーザは、アプリケーションを探す場所を知らなくても、またアプリケーションにリンクするために必要な技術情報がなくても、ネットワーク４０内のリモートマシン３０によってホストされるアプリケーションプログラムの可用性を把握することができる。これらの使用可能なアプリケーションプログラムは、ユーザの「ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄ」を構成する。ローカルマシンに対するＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄを決定するためのシステムは、アプリケーションプログラム（以下、「Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄ」アプリケーションと呼ぶ）、アプリケーションプログラムの構成要素を記憶するためのメモリ、およびアプリケーションプログラムを実行するためのプロセッサを含む。Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄ（ＰＮ）アプリケーションは、以下で説明するように、ローカルマシン１０のメモリ内、および／またはリモートマシン３０上にインストールすることができる。
【００７５】
Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションに従って動作するリモートマシン３０は、ファーム３８内のリモートマシン３０の各々から、アプリケーションに関連する情報を収集する。ホストされている各々のアプリケーションのアプリケーション関連情報は、たとえば、当該アプリケーションをホストするリモートマシンのアドレス、アプリケーションの名称、当該アプリケーションの使用を承認されるユーザまたはユーザグループ、および接続を確立して、アプリケーションを実行する前に、ローカルマシン１０に要求される最低の能力を含む多様な情報でよい。たとえば、アプリケーションはストリームビデオデータの場合があり、したがって、要求される最低の能力は、ローカルマシンがビデオデータをサポートすることであり得る。その他の例は、ローカルマシンがオーディオデータをサポートするか、または暗号化データを処理する能力を有するという要件である。アプリケーション関連情報は、データベース内に記憶される。
【００７６】
ローカルマシン１０が、ネットワーク４０に接続する場合、ローカルマシン１０のユーザは、ユーザ信任状を提供する。ユーザ信任状は、ローカルマシン１０のユーザのユーザ名、ユーザのパスワード、ユーザが承認されるドメイン名を含み得る。あるいは、ユーザ信任状は、スマートカード、時間ベースのトークン、社会保障番号、ユーザのパスワード、個人識別（ＰＩＮ）番号、対称キーもしくは楕円曲線暗証番号に基づくデジタル証明書、ユーザの生体認証特性、またはローカルマシン１０のユーザの本人確認を取得して、認証に提出することが可能なその他の手段から取得することができる。ローカルマシン１０に応答するリモートマシン３０は、ユーザ信任状に基づいてユーザを認証することができる。ユーザ信任状は、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションが実行される場所であれば、どの場所にも記憶することができる。ローカルマシン１０がＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを実行する実施態様の場合、ユーザ信任状は、ローカルマシン１０に記憶し得る。リモートマシン３０がＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄを実行する実施態様の場合、ユーザ信任状は、当該リモートマシン３０に記憶することができる。
【００７７】
リモートマシン３０は、ユーザ信任状およびアプリケーション関連情報から、ローカルマシン１０のユーザが、リモートマシン３０によってホストされているどのアプリケーションプログラムを使用することができるかを決定することもできる。リモートマシン３０は、使用可能なアプリケーションプログラムをローカルマシン１０に提示する情報を伝送する。このプロセスは、ローカルマシン１０のユーザが、アプリケーションの接続を確立する必要性をなくす。さらに、リモートマシン３０の管理者は、ローカルマシン１０の複数のユーザ間におけるアプリケーションへのアクセスを制御することができる。
【００７８】
実施態様によっては、リモートマシン３０によって行われるユーザ認証は、ローカルマシン１０に提示される、ホストされている各々のアプリケーションプログラムの使用を承認するのに十分であるが、このようなアプリケーションは、別のリモートマシン３０’に存在する場合がある。したがって、ローカルマシン１０が、ホストされているアプリケーションの１つを開始する（つまり、実行を開始する）場合、ローカルマシン１０によるユーザ信任状の追加の入力は、当該アプリケーションの使用を認証する必要はない場合がある。したがって、ユーザ信任状を１回入力すると、ユーザが、さらに手動のログオン認証プロセスを行わなくても、使用可能なアプリケーションを決定し、当該アプリケーションの開始を承認するのに役立つ場合がある。
【００７９】
ローカルマシン１０またはリモートマシン３０はどちらも、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを開始することができる。その結果は、ローカルマシン１０、２０のディスプレースクリーン１２、２２に表示される。グラフィカルウィンドウベースのインプリメンテーションの場合、結果は、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄグラフィカルウィンドウに表示することができ、承認された各々のアプリケーションプログラムは、グラフィカルアイコンによってウィンドウ内に表現することができる。
【００８０】
一実施態様では、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションは、ローカルマシン１０が実行を承認しないアプリケーションプログラムをフィルタリングして除去し、承認された（つまり、使用可能な）プログラムのみを表示する。他の実施態様では、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションは、承認されたアプリケーション、および承認されないアプリケーションを表示することができる。承認されないアプリケーションが、表示からフィルタリングされない場合、当該アプリケーションは使用できないことを示す通知を提供することができる。あるいは、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションは、ローカルマシン１０がどのアプリケーションを実行することを承認されているか、または承認されていないかを特定しなくても、リモートマシン３０によってホストされるすべてのアプリケーションをローカルマシン１０のユーザに報告することができる。承認は、ローカルマシン１０が、これらのアプリケーションの１つを実行しようとする場合、後で決定することができる。
【００８１】
ローカルマシン１０は、アプリケーション一覧をリモートマシン３０に要求し得る。アプリケーション一覧は、ローカルマシン１０のユーザが、発行されたすべてのアプリケーションの名称を閲覧することを可能にする。一実施態様では、ローカルマシン１０のユーザは、当該ユーザが、アプリケーションを実行するための承認を持っているかどうかに関係なく、アプリケーションの名称を閲覧することができる。別の実施態様では、ユーザは、ユーザが、実行を承認されるアプリケーションの名称のみを閲覧することができる。
【００８２】
アプリケーション一覧に対する要求は、ローカルマシン１０によって実行されている特定のプロセスに応じて、ＩＣＡブラウザサブシステム２６０、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０、または共通アプリケーションサブシステム５２４に渡る。たとえば、ローカルマシン１０が、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを実行している場合、アプリケーション一覧に対する要求は、リモートマシン３０上のｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０に送られる。ローカルマシン１０が、ウェブページを通して一覧の要求を提示する場合、この要求は、共通アクセスポイントサブシステム５２４に渡る。これらの実施態様では、共通アプリケーションサブシステム５２４は、ローカルマシン１０が、アプリケーションを一覧にすることを望む場合、ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０、ＩＣＡブラウザサブシステム２６０、および共通アプリケーションサブシステムの最初のアクセスポイントとして使用される。実施態様によっては、ローカルマシン１０が、ウェブページを通して一覧の要求を提示する場合、ウェブサーバをホストする中間のリモートマシン３０が要求を受信し、その要求をリモートマシン３０’に回送する。
【００８３】
共通アプリケーションサブシステム５２４は、一覧の要求を受信後、持続ストア２３０にすべてのアプリケーションのリストを問い合わせる。ｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステム２７０、および共通アクセスポイント６４５のサブシステムから受信された要求の場合、このアプリケーションのリストは、ローカルマシン１０のユーザの信任状に従ってフィルタリングされる（つまり、ユーザは、ユーザが承認されたアプリケーションのみを閲覧する）。
【００８４】
ローカルマシン１０は、リモートマシンの一覧も要求することができる。リモートマシンの一覧は、ローカルマシン１０のユーザが、ファーム３８内のリモートマシンのリストを閲覧することを可能にする。一実施態様では、リモートマシンのリストは、当該リモートマシン上の特殊なリモートマシンサブシステムによって決定されるように、リモートマシンのタイプに従ってフィルタリングすることができる。
【００８５】
リモートマシンの一覧に対する要求は、ローカルマシン１２０によって実行されている特定のプロセスに応じて、ＩＣＡブラウザサブシステム２６０または共通アクセスポイントサブシステム６４５に渡る。たとえば、ローカルマシン１２０が、ウェブページを通してリモートマシンの一覧の要求を提示する場合、その要求は、共通アクセスポイントサブシステム６４５に渡る。これらの実施態様では、共通リモートマシンサブシステム３００は、ＩＣＡブラウザサブシステム２６０および共通アクセスポイント６４５のサブシステムの最初のアクセスポイントとして役立つ。共通リモートマシンサブシステムは、リモートマシンの一覧の要求を受信すると、持続ストア２３０にすべてのリモートマシンのリストを問い合わせる。任意に、リモートマシンのリストは、リモートマシンのタイプに応じてフィルタリングされる。
【００８６】
図３Ａは、ローカルマシン１０が、この例ではワールドワイドウェブを介して、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションの実行を開始するプロセスの別の実施態様を示すブロック図である。ローカルマシン１０は、ウェブブラウザアプリケーション８０、たとえばカリフォルニア州、マウテンビューのＮｅｔｓｃａｐｅ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ，Ｉｎｃ．が製造するＮＥＴＳＣＡＰＥ  ＮＡＶＩＧＡＴＯＲ、ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎが製造するＭＩＣＲＯＳＯＦＴ  ＩＮＴＥＲＮＥＴ  ＥＸＰＬＯＲＥＲ、カリフォルニア州、マウテンビューのＭｏｚｉｌｌａ  Ｆｏｕｎｄａｔｉｏｎが製造するＦＩＲＥＦＯＸ、ノルウェイ、オスロのＯｐｅｒａ  Ｓｏｆｔｗａｒｅ  ＡＳＡが製造するＯＰＥＲＡ、またはカリフォルニア州、クパチーノのＡｐｐｌｅ  Ｃｏｍｐｕｔｅｒが製造するＳＡＦＡＲＩを実行する。
【００８７】
ローカルマシン１０は、ウェブブラウザ８０を通して要求８２を伝送し、リモートマシン３０上に存在するＨＴＭＬページに対応する均一リソースロケータ（ＵＲＬ）アドレスにアクセスする。実施態様によっては、リモートマシン３０によってローカルマシン１０に８４を返した最初のＨＴＭＬページは、ローカルマシン１０を特定することを求める認証ページである。
【００８８】
さらに図３Ａを参照すると、ローカルマシン１０がリモートマシン３０によって認証されると、リモートマシン３０は、ＨＴＭＬページ８８を作成して、ローカルマシン１０に伝送し、このＨＴＭＬページ８８は、ローカルマシン１０がアクセスするアプリケーションプログラムを表すグラフィカルアイコン５７、５７’が表示されるＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄのウィンドウ５８を含む。ローカルマシン１０のユーザは、アイコン５７をクリックすることによって、アイコン５７により表現されるアプリケーションの実行を呼び出す。
【００８９】
実施態様によっては、リモートマシン３０は、ローカルマシン１０のユーザに代わってＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを実行する。これらの実施態様の１つでは、リモートマシン３０は、ローカルマシン１０とリモートマシン３０’との間に存在する中間のリモートマシンである。
【００９０】
図３Ｂを参照すると、フロー図は、ウェブサービスディレクトリのＧＵＩの発行を介して、ローカルマシンが使用可能な複数のアプリケーションプログラムを提供するために行われるステップの一実施態様を示す。ウェブ発行ツール１７０は、ウェブサービスの記述、および発行のためのアプリケーション（たとえば、ＧＵＩアプリケーション）のアクセス情報を受信する（ステップ３００）。一実施態様では、ウェブサービスの記述は、上記のサービス情報を含む（たとえば、ウェブサービスを提供する企業名、サービスのタイプ、サービスのテキスト記述、およびＳＡＰ）。アクセス情報は、たとえば、発行済みアプリケーションの名称、伝送制御プロトコル（ＴＣＰ）ブラウジングサーバのファームアドレス、およびＭｅｔａＦｒａｍｅサーバＩＰアドレスを含む。実施態様によっては、アクセス情報は、ネットワーク、セキュリティゲートウェイ、またはブリッジデバイスを横断するために使用するアドレス、および使用するチケットを指定する。
【００９１】
ウェブ発行ツール１７０は、次に、ウェブサービス（つまり、ＧＵＩアプリケーション）の発行を要求するサービス発行要求を構成する（ステップ３０５）。一実施態様では、サービス発行要求はＳＡＰを含む。実施態様によっては、ＳＡＰは、ウェブサーバ３０’および発行サーバプラグイン１６５のウェブアドレスを含むＵＲＬである。さらに、ウェブアドレスは、統一リソース識別子（ＵＲＩ）でよく、これは、ウェブ上のオブジェクトを意味する名称およびアドレスのタイプの総称である。ＵＲＬは、一種のＵＲＩである。ＵＲＩの一例は、発行サーバプラグイン１６５のためのウェブサーバ３０’の名称（たとえば、「ウェブ−サーバ」）、およびＣＧＩスクリプトの名称（たとえば、「動的構成要素」）である。
【００９２】
ウェブ発行ツール１７０は、持続大容量記憶装置２２５内のＳＡＰに関連するＳＡＰエントリを記憶する（ステップ３１０）。実施態様によっては、ウェブ発行ツール１７０は、発行済みアプリケーション情報（たとえば、ＩＣＡ−ｐｕｂｌｉｓｈｅｄ−ａｐｐ−ｉｎｆｏ）をＧＵＩアプリケーションとも関連付ける。さらに他の実施態様では、ウェブ発行ツール１７０は、コンテンツサーバ３０が持続大容量記憶装置２２５内に記憶するＳＡＰエントリを識別するために、サービス発行要求内のキーも含む。たとえば、キーは、「１２３４５６６７７」という値を有することができる。ウェブサーバ３０’を識別するＳＡＰ、発行サーバプラグイン１６５のＣＧＩスクリプトの名称、および上記のキーの一例は、「ｈｔｔｐ：／／ｗｅｂ−ｓｅｒｖｅｒ／ｄｙｎａｍｉｃ−ｃｏｍｐｏｎｅｎｔ／？ａｐｐ＝１２３４５６６７７」である。
【００９３】
上記のＳＡＰに関連するＳＡＰエントリの一例は、「キー＝１２３４５６６７７、値＝ＩＣＡ−ｐｕｂｌｉｓｈｅｄ−ａｐｐ−ｉｎｆｏ」である。キーは、任意の長さでよい（たとえば、５６ビットのキー、１２８ビットのキー）。一実施態様では、キーは暗号の乱数である。キーは、キーの所有者にアクセス権を提供することもある。キーとともに図示されているが、任意の手段を使用して、持続大容量記憶装置２２５内に記憶されたＳＡＰエントリに、ある形態のセキュリティを提供することができる。
【００９４】
ウェブ発行ツール１７０は、ウェブサービスディレクトリ１６０内における発行のため、サービス発行要求をコンテンツサーバ３０に提供する（ステップ３１５）。さらに、一実施態様では、コンテンツサーバ３０は、ＳＡＰエントリを探す際に後で使用するため、特定のウェブサービスを要求するローカルマシン１０にＳＡＰのキーを伝送する。一実施態様では、サービス発行要求の発行は、ローカルマシン１０のユーザがサービスにアクセスすることを可能にする。一実施態様では、ＧＵＩアプリケーションは、フロリダ州、フォートローダーデールのＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発されたＮＦＵＳＥを使用して、ウェブサービスディレクトリ１６０上で発行される。実施態様によっては、ＧＵＩアプリケーションの発行者は、やはりＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発されたアプリケーションの開始および埋め込み（ＡＬＥ）を使用して、ウェブサービスディレクトリ１６０上のＧＵＩアプリケーションの発行をカスタマイズする。ＡＬＥは、ＨＴＭＬページからＧＵＩアプリケーションを開始し、アプリケーションをＨＴＭＬページ内に埋め込むことを可能にする。
【００９５】
ローカルマシン１０は、次に、サービス名称をウェブサービスディレクトリ１６０に問い合わせる（ステップ３２０）。コンテンツサーバ３０は、ローカルマシン１０から問い合わせを受信し（ステップ３２５）、要求されたサービス名をウェブサービスディレクトリ１６０内で探す。別の実施態様では、ローカルマシン１０のユーザは、ローカルマシン１０のユーザが見つけようとする特定のサービス名を突き止めるまで、ウェブサービスディレクトリ１６０をナビゲートする。ローカルマシン１０とともに図示されているが、任意のウェブサービスディレクトリのクライアント（たとえば、ＵＤＤＩクライアントまたはＬＤＡＰブラウザ）は、発行済みウェブサービスを発見するために、ウェブサービスディレクトリ１６０に問い合わせ、ウェブサービスディレクトリ１６０をナビゲートすることができる。
【００９６】
受信した問い合わせに関連するＳＡＰのロケーションでは、コンテンツサーバ３０は、ＳＡＰをローカルマシン１０に伝送する（ステップ３３０）。ローカルマシン１０は、ＳＡＰを受信し（ステップ３３５）、発行サーバプラグイン１６５のアドレスをＳＡＰから決定する。ローカルマシン１０は、次に、ＧＵＩアプリケーションに対する要求をウェブサーバ３０’に伝送する（ステップ３４０）。実施態様によっては、ローカルマシン１０の要求は、ウェブブラウザ１１からウェブサーバ３０’に伝送されるＨＴＴＰ要求である。他の実施態様では、ローカルマシン１０上で実行されるアプリケーション（たとえば、汎用ディレクトリブラウザ、またはＨＴＭＬ  ＵＩ）は、ＳＡＰをコンテンツサーバ３０から受信し、ＳＡＰを引数としてウェブブラウザ１１に提供する。ウェブブラウザ１は、次に、ＨＴＴＰ要求（ＧＵＩアプリケーションに対する）をウェブサーバ３０’に自動的に伝送する。上記の例の線に従うと、ウェブサーバ３０’へのアプリケーション要求の特定の例はｈｔｔｐ：／／ｗｅｂ−ｓｅｒｖｅｒ／ｄｙｎａｍｉｃ−ｃｏｍｐｏｎｅｎｔ／？ａｐｐ＝１２３４５６６７７）である。
【００９７】
ウェブサーバ３０’、特に発行サーバプラグイン１６５は、ＳＡＰに関連するアプリケーション要求を受信し（ステップ３４５）、その要求に関連するＳＡＰエントリを決定する（ステップ３５０）。一実施態様では、発行サーバプラグイン１６５は、ローカルマシン１０から要求を受信し、持続大容量記憶装置２２５内に記憶された（ＳＡＰエントリの一部として）当該要求に関連する発行済みアプリケーション情報を受信する。実施態様によっては、発行サーバプラグイン１６５は、ローカルマシン１０がコンテンツサーバ３０から受信したＳＡＰ（または、ＳＡＰの一部）を、持続大容量記憶装置２２５内に記憶された適切なサービスエントリ（たとえば、発行済みアプリケーション情報）にアクセスするためのキーとして使用する。
【００９８】
発行サーバプラグイン１６５は、次に、発行済みアプリケーション情報（たとえば、アプリケーションサーバ３０’’のＨＴＴＰアドレス）を有するファイルまたはドキュメントを構成し（ステップ３５２）、このドキュメントをローカルマシン１０に伝送する（ステップ３５５）。発行サーバプラグイン１６５は、ファイルが、アプリケーションクライアント１３に適合する形式を有するように、ファイルを構成する。一実施態様では、ドキュメントは、多目的インターネットメール拡張仕様（ＭＩＭＥ）、またはセキュアＭＩＭＥ（Ｓ／ＭＩＭＥ）ドキュメントである。別の実施態様では、ドキュメントは、オブジェクトＨＴＭＬタグが埋め込まれたＩＣＡウェブクライアントを含むＨＴＭＬドキュメントである。さらに別の実施態様では、ドキュメントは、オブジェクトＨＴＭＬタグが埋め込まれたアプリケーションストリーミングクライアントを含むＨＴＭＬドキュメントである。
【００９９】
ウェブブラウザ１１は、次に、ドキュメントを受信し、そのドキュメントを開こうとする。一実施態様では、アプリケーションクライアント１３が、ローカルマシン１０上にインストールされない場合、ローカルマシン１０は、アプリケーションサーバ３０’’と通信して、アプリケーションクライアント１３をダウンロードしてインストールする。アプリケーションクライアント１３をインストールした後、あるいは、アプリケーションクライアント１３が、ローカルマシン１０に既にインストールされている場合、ローカルマシン１０は、アプリケーションクライアント１３を開始して、ウェブサーバ３０’から受信したドキュメントを閲覧する（ステップ３６０）。
【０１００】
アプリケーションクライアント１３がインストールされ、ローカルマシン１０上で実行されると、アプリケーションサーバ３０’’は、次に、アプリケーションを実行し、アプリケーションをアプリケーションクライアント１３上に表示する（ステップ３６５）。別の実施態様では、アプリケーションサーバ３０’’は、アプリケーションを含む複数のアプリケーションファイルをアプリケーションクライアント１３に伝送し、図７に関連して以下でさらに説明するように、ローカルマシン１０上で実行される。別の実施態様では、ローカルマシン１０は、ドキュメントを閲覧し（アプリケーションクライアント１３が開始する前でも）、ドキュメント内の情報を使用して、ＧＵＩアプリケーションをアプリケーションサーバ３０’’から取得する。この実施態様では、ＧＵＩアプリケーションのディスプレーは、アプリケーションクライアント３０’’のインストールおよび実行を含む。さらに、ドキュメントの閲覧は、ローカルマシン１０のユーザに対して透過的である。たとえば、ローカルマシン１０は、ドキュメントをウェブサーバ３０’から受信し、ＧＵＩアプリケーションをサーバ３０’’に自動的に要求する前に、そのドキュメントを解釈する。
【０１０１】
したがって、アプリケーションクライアント１３は、発行済みアプリケーション、デスクトップ、デスクトップドキュメント、およびアプリケーションクライアント１３によってサポートされる任意のその他のアプリケーションに対するサービスベースのアクセスを提供する。アプリケーションクライアント１３がアクセスを提供することが可能なアプリケーションの例としては、特に、どれもワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって開発されたＷＩＮＤＯＷＳ（登録商標）デスクトップ、ＷＩＮＤＯＷＳ（登録商標）ドキュメント、たとえばＭＩＣＲＯＳＯＦＴ  ＥＸＣＥＬ、ＷＯＲＤ、およびＰＯＷＥＲＰＯＩＮＴ、カリフォルニア州、パロアルトのＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓによって開発されたＳＵＮ  ＳＯＬＡＲＩＳなどのＵｎｉｘ（登録商標）デスクトップ、並びにノースカロライナ州、ダラムのＲｅｄ  Ｈａｔ，Ｉｎｃ．によって分配されるＧＮＵ／Ｌｉｎｕｘが挙げられるが、これらだけに限らない。
【０１０２】
実施態様によっては、ローカルマシン１０が使用可能な複数のアプリケーションプログラムの一覧は、ローカルマシンがアプリケーションにアクセスすることができるかどうか、どのようにアクセスすることができるかに関してポリシーエンジンによる決定に応じて提供される（ステップ２０４）。ポリシーエンジンは、決定する前に、ローカルマシンに関する情報を収集することができる。次に、図４Ａを参照すると、コンピュータネットワークの一実施態様が示されており、このネットワークは、ローカルマシン１０、収集エージェント４０４、ポリシーエンジン４０６、ポリシーデータベース４０８、ファーム３８、およびアプリケーションサーバ３０’を含む。一実施態様では、ポリシーエンジン４０６はリモートマシン３０である。別の実施態様では、アプリケーションサーバ３０’はリモートマシン３０’である。図４Ａに示されている実施態様には、１つのローカルマシン１０、収集エージェント４０４、ポリシーエンジン４０６、ファーム３８、およびアプリケーションサーバ３０’のみが示されているが、システムは、これらの構成要素の何れかまたはそれぞれを複数提供することができると考えるべきである。
【０１０３】
簡潔に説明すると、ローカルマシン１０が、要求４１０をポリシーエンジン４０６に伝送して、アプリケーションにアクセスする場合、収集エージェント４０４は、ローカルマシン１０と通信し、ローカルマシン１０に関する情報を検索し、ローカルマシン情報４１２をポリシーエンジン４０６に伝送する。ポリシーエンジン４０６は、ポリシーデータベース４０８のポリシーを、受信した情報４１２に適用することによってアクセス制御を決定する。
【０１０４】
より詳細には、ローカルマシン１０は、リソースに対する要求４１０をポリシーエンジン４０６に伝送する。一実施態様では、ポリシーエンジン４０６は、アプリケーションサーバ３０’上に存在する。別の実施態様では、ポリシーエンジン４０６はリモートマシン３０である。さらに別の実施態様では、アプリケーションサーバ３０’は、要求４１０をローカルマシン１０から受信し、要求４１０をポリシーエンジン４０６に伝送する。さらに別の実施態様では、ローカルマシンは、リソースに対する要求４１０をリモートマシン３０’’’に伝送し、リモートマシン３０’’’は、要求４１０をポリシーエンジン４０６に伝送する。
【０１０５】
ポリシーエンジン４０６は、要求を受信すると、収集エージェント４０４による情報の収集を開始する。収集エージェント４０４は、ローカルマシン１０に関連する情報を収集し、情報４１２をポリシーエンジン４０６に伝送する。
【０１０６】
実施態様によっては、収集エージェント４０４は、ネットワーク接続を通して情報４１２を収集し、伝送する。実施態様によっては、収集エージェント４０４は、バイトコードプログラミング言語ＪＡＶＡ（登録商標）で書かれたアプリケーションなどのバイトコードを含む。実施態様によっては、収集エージェント４０４は、少なくとも１つのスクリプトを含む。これらの実施態様では、収集エージェント４０４は、ローカルマシン１０上の少なくとも１つのスクリプトを実行することによって、情報を収集する。実施態様によっては、収集エージェントは、ローカルマシン１０上のアクティブＸコントロールを含む。アクティブＸコントロールは、コントロールのように見えて、コントロールのように動作することを可能にする一連のインターフェースをインプリメントする専用コンポーネントオブジェクトモデル（ＣＯＭ）である。
【０１０７】
一実施態様では、ポリシーエンジン４０６は、収集エージェント４０４をローカルマシン１０に伝送する。別の実施態様では、アプライアンス１２５０は、収集エージェントを記憶またはキャッシュし得る。次に、アプライアンス１２５０は、収集エージェントをローカルマシン１０に伝送し得る。他の実施態様では、アプライアンス１２５０は、収集エージェント４０４の伝送を傍受し得る。さらに別の実施態様では、アプライアンス１２５０は、収集エージェントの提供を加速し得る。一実施態様では、ポリシーエンジン４０６は、収集エージェント４０４が、情報４１２をポリシーエンジン４０６に伝送した後、収集エージェント４０４の第２実行を要求する。この実施態様では、ポリシーエンジン４０６は、ローカルマシン１０が特定の条件を満たすかどうかを決定するには、不十分な情報４１２を有する場合がある。他の実施態様では、ポリシーエンジン４０６は、受信した情報４１２に応じて、収集エージェント４０４の複数の実行を要求する。
【０１０８】
実施態様によっては、ポリシーエンジン４０６は、インストラクションを収集エージェント４０４に伝送し、収集エージェント４０４が収集する情報のタイプを決定する。これらの実施態様では、システム管理者は、ポリシーエンジン４０６から収集エージェント４０４に伝送されるインストラクションを構成し得る。これは、収集される情報のタイプをさらに制御する。その結果、収集される情報のタイプがさらに制御されることによって、ポリシーエンジン４０６が行うことができるアクセス制御決定のタイプが拡張される。収集エージェント４０４は、情報４１２を収集し、情報４１２としては、ローカルマシン１０のマシンＩＤ、オペレーティングシステムのタイプ、オペレーティングシステムに対するパッチの存在、インストールされたネットワークカードのＭＡＣアドレス、クライアントデバイス上の電子透かし、アクティブディレクトリ内のメンバーシップ、ウィルススキャナの存在、パーソナルファイアウォールの存在、ＨＴＴＰヘッダ、ブラウザのタイプ、デバイスのタイプ、ネットワーク接続情報、たとえばインターネットプロトコルアドレスまたはアドレスの範囲、リモートマシン３０のマシンＩＤ、時間帯を変更するための調節を含むアクセス要求の日時、並びに信任状の承認が挙げられるが、これらだけに限らない。実施態様によっては、収集エージェントは、アプリケーションが、加速プログラム６１２０を試用して、クライアント上で加速可能であるかどうかを決定するための情報を収集する。
【０１０９】
実施態様によっては、デバイスタイプはパーソナルデジタルアシスタントである。他の実施態様では、デバイスタイプは携帯電話である。他の実施態様では、デバイスタイプはラップトップコンピュータである。他の実施態様では、デバイスタイプはデスクトップコンピュータである。他の実施態様では、デバイスタイプは、インターネットキオスクである。
【０１１０】
実施態様によっては、電子透かしはデータの埋め込みを含む。実施態様によっては、透かしは、ファイルに関するソース情報を提供するため、ファイル内に挿入されるデータのパターンを含む。他の実施態様では、透かしは、不正な変更を検出するために、データハッシングファイルを含む。他の実施態様では、透かしは、ファイルに関する著作権情報を提供する。
【０１１１】
実施態様によっては、ネットワーク接続情報は、帯域幅の能力に関連する。他の実施態様では、ネットワーク接続情報は、インターネットプロトコルアドレスに関連する。さらに他の実施態様では、ネットワーク接続情報は、インターネットプロトコルアドレスから構成される。一実施態様では、ネットワーク接続情報は、ローカルマシンが認証信任状を与えたログオンエージェントを識別するネットワーク区域を含む。
【０１１２】
実施態様によっては、承認信任状は、ある数の認証情報タイプを含み、こうした情報としては、ユーザ名、クライアント名、クライアントのアドレス、パスワード、ＰＩＮ、音声サンプル、１回限りのパスコード、生体認証データ、デジタル証明、チケットなど、およびこれらの組合せが挙げられるが、これらだけに限らない。収集された情報４１２を受信後、ポリシーエンジン４０６は、受信した情報４１２に基づいてアクセス制御を決定する。
【０１１３】
次に、図４Ｂを参照すると、ブロック図は、条件データベース４２２およびログオンエージェント４２４を有する第１構成要素４２０と、ポリシーデータベース４３２を有する第２構成要素４３０とを含むポリシーエンジン４０６の一実施態様を示す。第１構成要素４２０は、条件データベース４２２からの条件を、ローカルマシン１０に関して受信した情報に適用し、受信した情報が条件を満たしているかどうかを決定する。
【０１１４】
実施態様によっては、条件は、ローカルマシン１０が、当該条件を満たすために特定のオペレーティングシステムを実行することを要求し得る。実施態様によっては、条件は、当該条件を満たすために、特定のオペレーティングシステムのパッチを実行することを要求し得る。さらに他の実施態様では、条件は、ローカルマシン１０が、当該条件を満たすために、インストールされた各々のネットワークカードのＭＡＣアドレスを提供することを要求し得る。実施態様によっては、条件は、ローカルマシン１０が、当該条件を満たすために、特定のアクティブディレクトリにおけるメンバーシップを表示するように要求し得る。別の実施態様では、条件は、ローカルマシン１０が、当該条件を満たすために、ウィルススキャナを実行するように要求し得る。他の実施態様では、条件は、ローカルマシン１０が、当該条件を満たすために、パーソナルファイアウォールを実行することを要求し得る。実施態様によっては、条件は、ローカルマシン１０が、当該条件を満たすために、特定のデバイスタイプを構成することを要求し得る。他の実施態様では、条件は、ローカルマシン１０が、当該条件を満たすために、特定のタイプのネットワーク接続を確立することを要求し得る。
【０１１５】
受信した情報が条件を満たしている場合、第１構成要素４２０は、当該条件の識別子をデータセット４２６に記憶する。一実施態様では、受信した情報は、当該情報が条件を真にする場合、受信した情報は条件を満たしている。たとえば、ある条件は、特定のオペレーティングシステムがインストールされることを要求する場合がある。ローカルマシン１０が、当該オペレーティングシステムを有する場合、条件は真であり、満たされる。別の実施態様では、受信した情報は、当該情報が条件を偽にする場合、条件を満たしている。たとえばある条件は、スパイウェアがローカルマシン１０上に存在するかどうかという問題に対処する場合がある。ローカルマシン１０がスパイウェアを含まない場合、その条件は偽であり、満たされる。
【０１１６】
実施態様によっては、ログオンエージェント４２４は、ポリシーエンジン４０６の外部に存在する。他の実施態様では、ログオンエージェント４２４は、ポリシーエンジン４０６上に存在する。一実施態様では、第１構成要素４２０は、ローカルマシン１０に関する情報収集を開始するログオンエージェント４２４を含む。実施態様によっては、ログオンエージェント４２４は、データストアをさらに含む。これらの実施態様では、データストアは、収集エージェントが情報を収集し得る条件を含む。このデータストアは、条件データベース４２２とは異なる。
【０１１７】
実施態様によっては、ログオンエージェント４２４は、収集エージェント４０４を実行することによって、情報収集を開始する。他の実施態様では、ログオンエージェント４２４は、収集エージェント４０４をローカルマシン１０に伝送し、ローカルマシン１０上で実行することによって、情報収集を開始する。さらに他の実施態様では、ログオンエージェント４２４は、情報４１２を受信後に、追加の情報収集を開始する。一実施態様では、ログオンエージェント４２４は、情報４１２も受信する。この実施態様では、ログオンエージェント４２４は、受信した情報４１２に基づいて、データセット４２６を生成する。実施態様によっては、ログオンエージェント４２４は、データベース４２２からの条件を、収集エージェント４０４から受信した情報に適用することによって、データセット４２６を生成する。
【０１１８】
別の実施態様では、第１構成要素４２０は、複数のログオンエージェント４２４を含む。この実施態様では、複数のログオンエージェント４２４の少なくとも１つは、ローカルマシン１０がリソース要求を伝送した伝送元の各々のネットワークドメインに存在する。この実施態様では、ローカルマシン１０は、リソース要求を特定のログオンエージェント４２４に伝送する。実施態様によっては、ログオンエージェント４２４は、ポリシーエンジン４０６に対し、ローカルマシン１０がログオンエージェント４２４にアクセスしたアクセス元のネットワークドメインを伝送する。一実施態様では、ローカルマシン１０がログオンエージェント４２４にアクセスするアクセス元のネットワークドメインは、ローカルマシン１０のネットワーク区域と呼ばれる。
【０１１９】
条件データベース４２２は、第１構成要素４２０が、受信した除法に適用されるという条件を記憶する。ポリシーデータベース４３２は、第２構成要素４３０が、受信したデータセット４２６に適用されるというポリシーを記憶する。実施態様によっては、条件データベース４２２、およびポリシーデータベース４３２は、ＯＤＢＣに準拠するデータベース内にデータを記憶する。たとえば、条件データベース４２２、およびポリシーデータベース４３２は、カリフォルニア州、レッドウッドショアのＯｒａｃｌｅ  Ｃｏｒｐｏｒａｔｉｏｎが製造するＯＲＡＣＬＥデータベースとして提供され得る。他の実施態様では、条件データベース４２２、およびポリシーデータベース４３２は、ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎが製造するＭｉｃｒｏｓｏｆｔ  ＡＣＣＥＳＳデータベース、またはＭｉｃｒｏｓｏｆｔ  ＳＱＬサーバデータベースでよい。
【０１２０】
第１構成要素４２０が、受信した情報を、条件データベース４２２内の各々の条件に適用した後、第１構成要素は、データセット４２６を第２構成要素４３０に伝送する。一実施態様では、第１構成要素４２０は、データセット４２６のみを第２構成要素４３０に伝送する。したがって、この実施態様では、第２構成要素４３０は情報４１２を受信せず、満たされた条件の識別子のみを受信する。第２構成要素４３０は、データセット４２６を受信し、データセット４２６内で識別された条件に基づいて、ポリシーデータベース４３２のポリシーを適用することによって、アクセス制御を決定する。
【０１２１】
一実施態様では、ポリシーデータベース４３２は、受信した情報４１２に適用されたポリシーを記憶する。一実施態様では、ポリシーデータベース４３２内に記憶されるポリシーは、システム管理者によって少なくとも部分的に指定される。別の実施態様では、ユーザは、ポリシーデータベース４３２内に記憶されるポリシーの少なくともいくつかを指定する。ユーザが指定する１つまたは複数のポリシーは、選択に応じて記憶される。ポリシーデータベース４３２は、揮発性または不揮発性メモリ内に記憶されるか、たとえば複数のサーバを通して分散される。
【０１２２】
一実施態様では、ポリシーは、１つまたは複数の条件が満たされた場合にのみ、リソースにアクセスすることを可能にする。別の実施態様では、ポリシーは、リソースに対するアクセスを可能にするが、ローカルマシン１０に対するリソースの伝送を傍受する。別のポリシーは、アクセスを要求するローカルマシン１０が、セキュアネットワーク内にあることを条件として、フックすることができる。実施態様によっては、リソースはアプリケーションプログラムであり、ローカルマシン１０は、アプリケーションプログラムの拡張を要求している。これらの実施態様の１つでは、ポリシーは、ローカルマシン１０上におけるアプリケーションプログラムの実行を可能にし得る。これらとは別の実施態様では、ポリシーは、ローカルマシン１０が、アプリケーションプログラムを含むファイルのストリームを受信することを可能にし得る。この実施態様では、ファイルのストリームは、隔離環境内に記憶されて実行される。これらとはさらに別の実施態様では、ポリシーは、アプリケーションサーバなどのリモートマシン上で、アプリケーションプログラムの実行のみを可能にし、アプリケーション出力データをローカルマシン１０に伝送するように、リモートマシンに要求する。
【０１２３】
次に、図４Ｃを参照すると、フロー図は、ローカルマシン１０に関して受信した情報に基づいて、アクセス制御を決定するために、ポリシーエンジン４０６によって行われるステップの一実施態様を示す。ポリシーエンジン４０６は、ローカルマシン１０に関して収集された情報を受信後（ステップ４５０）、当該情報に基づいてデータセットを生成する（ステップ４５２）。データセット４２６は、受信された情報４１２によって満たされる各々の条件の識別子を含む。ポリシーエンジン４０６は、データセット４２６内で識別された各々の条件にポリシーを適用する。アプリケーションは、ローカルマシン１０がアクセスし得るリソースの一覧を生成する（ステップ４５４）。ポリシーエンジン４０６は、次に、その一覧をローカルマシン１０に提示する。実施態様によっては、ポリシーエンジン４０６は、一覧をローカルマシンに提示するために使用されるハイパーテキストマークアップ言語（ＨＴＭＬ）ドキュメントを生成する。
【０１２４】
図４Ｄを参照すると、ネットワークの一実施態様が示されており、これは、ローカルマシン１０、収集エージェント４０４、ポリシーエンジン４０６、ポリシーデータベース４０８、条件データベース４１０、ローカルマシン２０、セッションサーバ４２０、記憶されたアプリケーションデータベース４２２、リモートマシン３０’、第１データベース４２８、リモートマシン３０’’、および第２データベースを備える。簡潔に説明すると、ローカルマシン１０が、アプリケーションプログラムにアクセスする要求４１２をアクセス制御サーバ４０６に伝送する時、収集エージェント４０４は、ローカルマシン１０と通信し、ローカルマシン１０に関する情報を検索し、ローカルマシン情報４１４をポリシーエンジン４０６に伝送する。ポリシーエンジン４０６は、図４Ａおよび図４Ｂに関して上記で説明したように、アクセス制御を決定する。ローカルマシン１０は、ローカルマシン１０に関連する、使用可能なアプリケーションの一覧を受信する。
【０１２５】
実施態様によっては、セッションサーバ４２０は、ローカルマシン１０と、ローカルマシン１０に関連する複数のアプリケーションセッションとの間の接続を確立する。他の実施態様では、ポリシーエンジン４０６は、ローカルマシン１０が、アプリケーションを含む複数のアプリケーションファイルを検索し、アプリケーションプログラムをローカルに実行する承認を有すると決定する。実施態様によっては、ポリシーエンジン４０６は、加速プログラム６１２０をローカルマシン１０に伝送することによって、アプリケーションファイルの提供を加速するかどうかを決定する。これらの実施態様の１つでは、リモートマシン３０’は、アプリケーションセッションのデータ、およびアプリケーションプログラムを含む複数のアプリケーションファイルを記憶する。これらとは別の実施態様では、ローカルマシン１０は、アプリケーションセッションのデータと、アプリケーションプログラムを含むアプリケーションファイルとを記憶するリモートマシン３０’とのアプリケーションストリーミングセッションを確立する。実施態様によっては、ポリシーエンジン４０６は、加速プログラム６１２０をローカルマシン１０に伝送することによって、ストリーミングセッションの提供を加速するかどうかを決定する。実施態様によっては、ポリシーエンジン４０６は、加速プログラム６１２０をローカルマシン１０に伝送することによって、データファイルの提供を加速するかどうかを決定する。
【０１２６】
次に、図４Ｅを参照すると、フロー図は、ローカルマシン１０がアプリケーションセッションにアクセスするために、セッションサーバ４２０が行うステップの一実施態様を示す。セッションサーバ４２０は、ポリシーエンジン４０６が作成したアクセス制御決定を含むポリシーエンジン４０６から、ローカルマシン１０に関する情報を受信する（ステップ４８０）。セッションサーバ４２０は、関連するアプリケーションの一覧を生成する（ステップ４８２）。セッションサーバ４２０は、ローカルマシン１０を関連するアプリケーションに接続し得る（ステップ４８４）。一実施態様では、情報は、ローカルマシン情報４１４も含む。別の実施態様では、情報は、アプリケーションプログラムをローカルに実行するための承認を含む。
【０１２７】
セッションサーバ４２０は、関連するアプリケーションの一覧を生成する（ステップ４８２）。実施態様によっては、ポリシーエンジン４０６は、既にローカルマシン１０に関連付けられている複数のアプリケーションセッションを識別する。他の実施態様では、セッションサーバ４２０は、ローカルマシン１０に関連する記憶されたアプリケーションセッションを識別する。これらの実施態様のいくつかでは、セッションサーバ４２０は、情報をポリシーエンジン４０６から受信後、記憶されたアプリケーションセッションを自動的に識別する。一実施態様では、記憶されたアプリケーションデータベース４２２は、セッションサーバ４２０上に存在する。別の実施態様では、記憶されたアプリケーションデータベース４２２は、ポリシーエンジン４０６上に存在する。
【０１２８】
記憶されたアプリケーションデータベース４２２は、アプリケーションセッションを実行するか、またはアプリケーションセッションデータ、およびアプリケーションプログラムを含むアプリケーションファイルに対するアクセスを提供するファーム３８内の複数のリモートマシンに関連するデータを含む。実施態様によっては、ローカルマシン１０に関連するアプリケーションセッションを識別するには、１つまたは複数のリモートマシンに関連する記憶データを調査する必要がある。これらの実施態様のいくつかでは、セッションストア４２０は、１つまたは複数のリモートマシンに関連する記憶データを調査する。これらの実施態様の他の実施態様では、ポリシーエンジン４０６は、１つまたは複数のリモートマシンに関連する記憶データを調査する。実施態様によっては、第１アプリケーションセッションは、リモートマシン３０’上で動作し、第２アプリケーションセッションは、リモートマシン３０’’上で動作する。他の実施態様では、すべてのアプリケーションセッションは、ファーム３８内の単一リモートマシン３０上で動作する。
【０１２９】
セッションサーバ４２０は、ユーザが開始したアプリケーションセッションに関連する情報を含む。セッションサーバは、揮発性または不揮発性メモリ内に記憶するか、あるいは、たとえば、複数のサーバに分散させることができる。表１は、具体的なセッションサーバ４２０の一部分に含まれるデータを示す。
【０１３０】
【化１−１】
2009536377.tif 000003
【０１３１】
【化１−２】
2009536377.tif 000004
表１の具体的なセッションサーバ４２０は、各々のアプリケーションセッションを、アプリケーションセッションを開始したユーザと関連付けるデータ、該当する場合、ユーザが、現在リモートマシン３０’に接続されている接続元のクライアントコンピュータ１０または２０の識別表示、およびクライアントコンピュータ１０または２０のＩＰアドレスを含む。具体的なセッションサーバ４２０は、各々のアプリケーションセッションの状態をも含む。アプリケーションセッションの状態は、たとえば、「アクティブ」（ユーザが、アプリケーションセッションに接続されていることを意味する）、または「切断」（ユーザが、アプリケーションセッションに接続されていないことを意味する）でよい。代わりの実施態様では、アプリケーションセッションの状態は、「実行−切断」（ユーザはアプリケーションセッションから切断されているが、アプリケーションセッション内のアプリケーションは、未だ実行されていることを意味する）、あるいは「インストール−切断」（ユーザは切断されており、アプリケーションセッション内のアプリケーションは未だ実行されていないが、切断直前の動作状態は記憶されたことを意味する）に設定してもよい。セッションサーバ４２０は、各々のアプリケーションセッション内で実行されているアプリケーション１１６を示す情報、およびサーバ上の各々のアプリケーションのプロセスを示すデータをさらに記憶する。リモートマシン３０’が、ファーム３８の一部である実施態様の場合、セッションサーバ４２０は、動的ストアの少なくとも一部であり、ファーム３８内のどのリモートマシン３０上で、各々のアプリケーションが実行されているか／実行されていたかを示す表１の最後の２桁のデータ、および当該リモートマシン３０のＩＰアドレスも含む。代わりの実施態様では、セッションサーバ４２０は、各々のアプリケーションセッション内の各々のアプリケーションの状態指標を含む。
【０１３２】
たとえば、表１の例では、３つのアプリケーションセッション、アプリケーションセッション１、アプリケーションセッション２、およびアプリケーションセッション３が存在する。アプリケーションセッション１は、端末１を現在使用しているユーザ１に関連する。端末１のＩＰアドレスは、１５２．１６．２．５０である。アプリケーションセッション１の状態はアクティブであり、アプリケーションセッション１では、ワード処理プログラムが実行している。ワード処理プログラムは、サーバＡ上でプロセス番号１として実行している。サーバＡのＩＰアドレスは、１５２．１６．２．５５である。表１のアプリケーションセッション２は、切断されたアプリケーションセッション１１８の一例である。アプリケーションセッション２はユーザ２に関連するが、アプリケーションセッション２は、ローカルマシン１０にまたは２０に接続していない。アプリケーションセッション２は、サーバＡ上のＩＰアドレス１５２．１６．２．５５で、プロセス番号３として実行しているデータベースプログラムを含む。アプリケーションセッション３は、ユーザが、別のリモートマシン３０上で動作しているアプリケーションセッションと、どのように相互作用することが可能かの一例である。アプリケーションセッション３は、アプリケーションセッション１と同様、ユーザ１に関連している。アプリケーションセッション３は、サーバＢのＩＰアドレス１５２．１６．２．５６で、プロセス番号２として実行している表計算プログラムを含み、アプリケーションセッション１に含まれるアプリケーションセッションは、サーバＡ上で実行している。
【０１３３】
別の例では、ユーザは、サーバＡなど、リモートマシン３０’上で実行しているアプリケーションセッションを通して、第１アプリケーションプログラムにアクセスし、アプリケーションストリーミングセッション全体で、サーバＢなどの第２リモートマシン３０’’と通信し、第２リモートマシン３０’’からアプリケーションプログラムを検索してローカルに実行する。ローカルマシン１０のユーザは、第２アプリケーションプログラムをローカルに実行する承認を既に取得しているが、第１アプリケーションプログラムの実行前提条件を満たしていない場合がある。
【０１３４】
一実施態様では、セッションサーバ４２０は、ローカルマシン１０に関連するアプリケーションセッションを切断するための切断要求を受信し、要求に応じてアプリケーションセッションを切断するように構成される。セッションサーバ４２０は、ローカルマシン１０がアプリケーションセッションから切断された後に、引き続きアプリケーションセッションを実行する。この実施態様では、セッションサーバ４２０は、記憶されたアプリケーションデータベース４２２にアクセスし、切断された各々のアプリケーションセッションに関連するデータにアクセスし、切断された各々のアプリケーションセッションに関連するデータ記録を更新し、その結果、記録は、ローカルマシン１０に関連するアプリケーションセッションが切断されていることを指示する。
【０１３５】
ネットワークに接続するローカルマシンに関連する認証情報を受信後、セッションサーバ４２０は、ローカルマシンのユーザに関連する任意のアクティブなアプリケーションセッションであって、認証情報が、たとえばローカルマシン２０に関連する場合、ローカルマシン１０などの異なるローカルマシンに接続するアプリケーションセッションを識別するために、記憶されたアプリケーションデータベース４２２を調査する。一実施態様では、セッションサーバ４２０が、任意のこうしたアプリケーションセッションを識別する場合、セッションサーバ４２０は、１つまたは複数のアプリケーションセッションをローカルマシン１０から自動的に切断し、１つまたは複数のアプリケーションセッションを現在のローカルマシン２０に接続する。実施態様によっては、受信した認証情報は、ローカルマシン１０が再接続し得るアプリケーションセッションを制限するであろう。他の実施態様では、受信した認証情報は、ローカルマシン１０に対する認証が拒絶されたかもしれない場合、ローカルマシン２０上のアプリケーションプログラムの実行を承認する。これらの実施態様の１つでは、セッションサーバ４２０は、アプリケーションプログラムを検索して、ローカルに実行するために、ローカルマシンにアクセス情報を提供し得る。
【０１３６】
一覧のアプリケーションを実行する要求が受信される（ステップ２０６）。一実施態様では、ローカルマシン１０のユーザは、使用可能なアプリケーションの受信した一覧から実行するアプリケーションを選択する。別の実施態様では、ユーザは、受信した一覧に関係なく実行するアプリケーションを選択する。実施態様によっては、ユーザは、クライアントエージェントによって、ローカルマシン１０上に提示されるアプリケーションのグラフィカル表現を選択することによって、実行されるアプリケーションを選択する。他の実施態様では、ユーザは、ウェブサーバ、または他のリモートマシン３０’’’上でユーザに提示されるアプリケーションのグラフィカル表現を選択することによって、実行されるアプリケーションを選択する。実施態様によっては、アプライアンス１２５０、または加速プログラム６１２０は、グラフィカル表現の提供を加速する。実施態様によっては、アプライアンス１２５０は、グラフィカル表現をキャッシングまたは記憶する。実施態様によっては、アプライアンスは、関連するあらゆるアプリケーション、または関連するアプリケーションの一部をキャッシングまたは記憶し得る。
【０１３７】
さらに他の実施態様では、ユーザは、アクセスファイルを要求する。これらの実施態様の１つでは、アプリケーションの実行には、ファイルに対するアクセスをユーザに提供する必要がある。これらとは別の実施態様では、アプリケーションは、アクセスするファイルの選択後に実行されるように、自動的に選択される。これらとはさらに別の実施態様では、ファイルに対するアクセスを要求する前に、アプリケーションは、ファイルのタイプに関連付けられ、要求されたファイルに関連するファイルのタイプを識別した後、自動的にアプリケーションを選択することが可能になる。実施態様によっては、アプライアンス１２５０、または加速プログラム６１２０は、１つまたは複数のファイルの提供を加速するために使用し得る。実施態様によっては、アプライアンス１２５０は、いくつかまたはすべてのファイルをキャッシングまたは記憶し得る。
【０１３８】
一実施態様では、一覧のアプリケーションは、複数のアプリケーションファイルを含む。実施態様によっては、複数のアプリケーションファイルは、リモートマシン３０’上に存在する。他の実施態様では、複数のアプリケーションファイルは、別個のファイルサーバ、またはリモートマシン３０’’上に存在する。さらに他の実施態様では、複数のアプリケーションファイルは、ローカルマシン１０に伝送し得る。さらに他の実施態様では、複数のアプリケーションファイル内のファイルは、複数のアプリケーションファイル内の第２ファイルをローカルマシン１０に伝送する前に実行することができる。実施態様によっては、アプライアンス１２５０、または加速プログラム６１２０は、１つまたは複数のアプリケーションファイルの提供を加速するために使用し得る。
【０１３９】
実施態様によっては、リモートマシン３０は、一覧のアプリケーションに関する情報をリモートマシン３０’から検索する。これらの実施態様の１つでは、リモートマシン３０は、複数のアプリケーションファイルをホストするリモートマシン３０’’の識別表示を検索する。これらとは別の実施態様では、リモートマシン３０は、複数のアプリケーションファイルのロケーションの識別表示を受信し、この識別表示は、汎用命名規則（ＵＮＣ）に従う。これらとはさらに別の実施態様では、識別表示は、ネットワークロケーション、およびアプリケーションストリーミングプロトコルのソケットを含む。
【０１４０】
一実施態様では、リモートマシン３０は、一覧のアプリケーションに関する情報を含むファイルを検索する。ファイルは、一覧のアプリケーションをホストするサーバのロケーションの識別表示を含み得る。ファイルは、一覧のアプリケーションの複数のバージョンの識別表示を含み得る。ファイルは、一覧のアプリケーションを含む複数のアプリケーションファイルの一覧を含み得る。ファイルは、一覧のアプリケーションを含む複数のアプリケーションファイルを含む圧縮ファイルの識別表示を含み得る。ファイルは、一覧のアプリケーションを実行するマシンによって満たされる前提条件の識別表示を含み得る。ファイルは、一覧のアプリケーションに関連するデータファイルの一覧を含み得る。ファイルは、一覧のアプリケーションを実行するマシン上で実行されるスクリプトの一覧を含み得る。ファイルは、一覧のアプリケーションに関連するレジストリデータの一覧を含み得る。ファイルは、一覧のアプリケーションが隔離環境内で実行される一実施態様で使用される規則の一覧を含み得る。一実施態様では、ファイルは、「マニフェスト」ファイルと呼ばれる場合がある。ファイルが含み得る情報について、図２１に関連して以下でさらに詳細に説明する。
【０１４１】
実施態様によっては、リモートマシン３０は、ローカルマシン１０の識別された特性にポリシーを適用する。これらの実施態様の１つでは、リモートマシン３０は、識別された特性に応じて実行される一覧のアプリケーションのバージョンを識別する。これらとは別の実施態様では、リモートマシン３０は、ローカルマシン１０の特性に適合するあるバージョンの一覧のアプリケーションを実行することを決定する。これらとはさらに別の実施態様では、リモートマシン３０は、ローカルマシン１０を実行しているオペレーティングシステムに適合するあるバージョンの一覧のアプリケーションを実行することを決定する。これらとはさらに別の実施態様では、リモートマシン３０は、ローカルマシン１０上のオペレーティングシステムのリビジョンレベルに適合するあるバージョンの一覧を実行することを決定する。これらの実施態様の１つでは、リモートマシン３０は、ローカルマシン１０上のオペレーティングシステムが指定する言語に適合するあるバージョンの一覧を実行することを決定する。
【０１４２】
一覧のアプリケーションを実行するための予め決められた数の１つの方法は、ポリシーに応じて選択され、予め決められた数の方法は、一覧のアプリケーションのアプリケーションストリーミングの方法を含む（ステップ２０８）。一実施態様では、選択は、ローカルマシン１０に関連して受信した信任状に対するポリシーのアプリケーションに応じて行われる。実施態様によっては、選択は、図４Ａ、図４Ｂ、および図４Ｃに関して上記で説明したポリシーエンジン４０６などのポリシーエンジンによって行われる。他の実施態様では、一覧のアプリケーションを実行するための信任状および要求を受信するリモートマシン３０は、ポリシーエンジン４０６をさらに含む。
【０１４３】
一実施態様では、予め決められた数の方法は、リモートマシン３０’上で一覧のアプリケーションを実行するための方法を含む。別の実施態様では、予め決められた数の方法は、ローカルマシン１０上で一覧のアプリケーションを実行するための方法を含む。さらに他の実施態様では、予め決められた数の方法は、第２リモートマシン３０’上で一覧のアプリケーションを実行するための方法を含む。
【０１４４】
実施態様によっては、予め決められた数の方法は、アプリケーションストリーミングセッション全体で、一覧のアプリケーションをローカルマシン１０に提供するための方法を含む。これらの実施態様の１つでは、ローカルマシン１０は、リモートマシン３０’との接続を開始し、伝送されたデータパケットのストリームをリモートマシン３０’から受信することが可能なストリーミングサービスエージェントを含む。
【０１４５】
データパケットのストリームは、一覧のアプリケーションを有するアプリケーションファイルを含み得る。実施態様によっては、アプリケーションファイルは、アプリケーションプログラムに関連するデータファイルを含む。他の実施態様では、アプリケーションファイルは、アプリケーションプログラムの実行に必要な実行可能ファイルを含む。さらに他の実施態様では、アプリケーションファイルは、ファイルに関する情報、たとえばロケーション、互換性要件、構成データ、レジストリデータ、隔離環境で使用するための実行スクリプト規則の識別表示、または承認要件を含むメタデータを含む。一実施態様では、データパケットのストリームは、ＴＣＰ／ＩＰパケットのペイロードなどのトランスポート層接続を介して伝送される。
【０１４６】
実施態様によっては、ストリーミングされたアプリケーションは、ストリーミングされたアプリケーションを含む複数のアプリケーションファイルの各々のアプリケーションファイルの伝送前に実行される。これらの実施態様の１つでは、ストリーミングされたアプリケーションの実行は、ローカルマシン１０が、複数のアプリケーションの中の１つのアプリケーションファイルを受信すると開始する。これらとは別の実施態様では、ストリーミングされたアプリケーションの実行は、ローカルマシン１０が、複数のアプリケーションファイルの中の実行可能なアプリケーションファイルを受信すると開始する。これらとはさらに別の実施態様では、ローカルマシン１０は、複数のアプリケーションファイルの中の受信された第１のアプリケーションファイルを実行し、受信された第１のアプリケーションファイルは、複数のアプリケーションファイルの中の第２アプリケーションファイルにアクセスすることを要求する。
【０１４７】
一実施態様では、ストリーミングされたアプリケーションは、ローカルマシン１０上に永続的に存在するのではなく、ローカルマシン１０上で実行される。この実施態様では、ストリーミングされたアプリケーションは、ローカルマシン１０上で実行することができ、ストリーミングされたアプリケーションが終了すると、ローカルマシン１０から除去される。別の実施態様では、ストリーミングされたアプリケーションは、各々のアプリケーションファイルの事前に展開されたコピーが、ローカルマシン１０上に記憶された後、ローカルマシン１０上で実行される。さらに別の実施態様では、ストリーミングされたアプリケーションは、各々のアプリケーションファイルのコピーがローカルマシン上の隔離環境で記憶された後に実行される。さらに別の実施態様では、ストリーミングされたアプリケーションは、各々のアプリケーションファイルのコピーが、ローカルマシン１０上のキャッシュ内に記憶された後、ローカルマシン１０上で実行される。
【０１４８】
一実施態様では、アプリケーションをローカルマシン１０にストリーミングする方法は、ローカルマシン１０が、ストリーミングされたアプリケーションファイルを受信し得るという決定に応じて、予め決められた数の方法から選択される。別の実施態様では、アプリケーションをローカルマシン１０にストリーミングする方法は、ローカルマシン１０が、ストリーミングされたアプリケーションファイルをローカルに実行する権限を有するという決定に応じて、予め決められた数の方法から選択される。
【０１４９】
他の実施態様では、予め決められた数の方法は、アプリケーション出力データをローカルマシン１０に提供する方法を含み、アプリケーション出力データは、リモートマシン３０上での一覧のアプリケーションの実行から生成される。これらの実施態様の１つでは、リモートマシン３０は、一覧のアプリケーションの実行に対する要求を受信するリモートマシン３０である。これらとは別の実施態様では、リモートマシン３０は、ファイルサーバまたはアプリケーションサーバなどの第２リモートマシン３０’である。実施態様によっては、一覧のアプリケーションは、一覧のアプリケーションを実行するリモートマシン３０’上に存在する。他の実施態様では、一覧のアプリケーションを実行するリモートマシン３０’は、アプリケーションストリーミングセッション全体で、第２リモートマシン３０’からの一覧のアプリケーションを最初に受信する。これらの実施態様の１つでは、リモートマシン３０’は、第２リモートマシン３０’との接続を開始し、伝送されたデータのストリームを第２リモート３０’から受信することが可能なストリーミングサービスエージェントを含む。これらとは別の実施態様では、第２リモートマシン３０’は、負荷平衡技術を使用して識別し得る。これらとはさらに別の実施態様では、第２リモートマシン３０’は、リモートマシン３０’との近接性に基づいて識別し得る。これらの実施態様について、図９に関連して以下でさらに詳細に説明する。
【０１５０】
実施態様によっては、リモートマシン３０は、一覧のアプリケーションを実行するための予め決められた数の方法から、一覧のアプリケーションをリモートマシン３０にストリーミングし、リモートマシン３０上で一覧のアプリケーションを実行し、一覧のアプリケーションの実行によって生成されたアプリケーション出力データをローカルマシン１０に提供する方法を選択する。これらの実施態様の１つでは、リモートマシン３０は、ローカルマシン１０の評価に応じて方法を選択する。これらとは別の実施態様では、決定は、ローカルマシン１０の評価に対するポリシーの適用に応じて行われる。これらとはさらに別の実施態様では、決定は、受信した信任状の評価に応じて行われる。一実施態様では、リモートマシン３０は、一覧のアプリケーションを含む複数のアプリケーションファイルを受信する。別の実施態様では、リモートマシン３０は、ＩＣＡ提示レベルプロトコル、リモートデスクトップウィンドウ提示レベルプロトコル、またはＸ−ウィンドウ提示レベルプロトコルなどの提示レベルプロトコルを介して、アプリケーション出力データを提供する。
【０１５１】
実施態様によっては、リモートマシン３０は、一覧のアプリケーションに関連するアクセス情報も提供し、このアクセス情報は、選択された方法に応じて生成される。これらの実施態様の１つでは、アクセス情報は、一覧のアプリケーションプログラムの実行のために選択された方法の指示を、ローカルマシン１０に提供する。これらとは別の実施態様では、アクセス情報は、一覧のアプリケーションのロケーションの識別表示を含み、この識別表示は、汎用命名規則（ＵＮＣ）に従う。これらとはさらに別の実施態様では、アクセス情報は、セッション管理サーバの識別表示を含む。
【０１５２】
実施態様によっては、アクセス情報は、認証情報を含む開始チケットを含む。これらの実施態様の１つでは、ローカルマシン１０は、リモートマシン３０から受信したアクセス情報を認証するために、開始チケットを使用することができる。これらとは別の実施態様では、ローカルマシン１０は、一覧のアプリケーションをホストする第２リモートマシン３０に対し、ローカルマシン１０自体を認証するために、開始チケットを使用することができる。これらとはさらに別の実施態様では、リモートマシン３０は、開始チケットに対するローカルマシン１０の要求に応じて、アクセス情報内に開始チケットを含む。
【０１５３】
次に、図５を参照すると、ブロック図は、ローカルマシン１０がアプリケーションプログラムの実行を要求し、リモートマシン３０を含むアプリケーション提供システム５００が、アプリケーションプログラムを実行する方法を選択する一実施態様を示す。
一実施態様では、リモートマシン３０は、ローカルマシン１０から信任状を受信する。別の実施態様では、リモートマシン３０は、使用可能なアプリケーションの一覧に対する要求をローカルマシン１０から受信する。
【０１５４】
実施態様によっては、複数の冗長なリモートマシン３０、３０’、３０’’、３０’’’、および３０’’’’が提供される。これらの実施態様の１つでは、たとえば、複数のファイルサーバ、複数のセッション管理サーバ、複数のステージングマシン、複数のウェブインターフェース、または複数のａｃｃｅｓｓ  ｓｕｉｔｅコンソールが存在し得る。これらとは別の実施態様では、リモートマシンが故障している場合、故障したマシンの機能を提供するため、冗長なリモートマシン３０が選択される。他の実施態様では、リモートマシン３０、３０’、３０’’、３０’’、および３０’’’’、ウェブインターフェース５５８、およびａｃｃｅｓｓ  ｓｕｉｔｅコンソールは、管理サーバの別個の機能を有する別個のリモートマシン３０として記載されているが、セッション管理サーバ、ステージングマシン、ファイルサーバ、ウェブサーバ、およびａｃｃｅｓｓ  ｓｕｉｔｅコンソール、単一のリモートマシン３０は、これらのすべてのマシンの機能を有して提供し得る。さらに他の実施態様では、リモートマシン３０は、１つまたは複数の多数のリモートマシンの機能およびサービスを提供し得る。
【０１５５】
次に、図５をさらに詳細に参照すると、ブロック図は、アプリケーションプログラムに対するアクセスを提供するアプリケーション提供システム５００を示す。アプリケーション提供システム５００は、１つまたは複数のリモートマシン３０、アプライアンス１２５０、またはこれらの任意の組合せを備え得る。図１Ｄに関連して上記で説明したインターフェースおよびサブシステムのほかに、リモートマシン３０は、管理通信サービス５１４、ＸＭＬサービス５１６、および管理サービス５０４をさらに含む。管理サービス５０４は、アプリケーション管理サブシステム５０６、サーバ管理サブシステム５０８、セッション管理サブシステム５１０、およびライセンス管理サブシステム５１２を備え得る。リモートマシン３０は、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０と通信し得る。
【０１５６】
一実施態様では、管理サービス５０４は、特殊化したリモート手順サブシステム、ＭｅｔａＦｒａｍｅリモート手順コール（ＭＦＲＰＣ）サブシステム５２２をさらに備える。実施態様によっては、ＭＦＲＰＣサブシステム５２２は、ＸＭＬサービス５１６など、リモートマシン３０上のサブシステムと、管理サービス５０４との間の通信を経路指定する。他の実施態様では、ＭＦＲＰＣサブシステム５２２は、管理機能を呼び出すためのリモート手順コール（ＰＲＣ）インターフェースを提供し、管理サービス５０４に対するＰＲＣコールを提供し、コールを行ったサブシステムに結果を返す。
【０１５７】
実施態様によっては、リモートマシン３０は、図４Ｂに関して上記で説明したプロトコルエンジン４０６などのプロトコルエンジンと通信する。これらの実施態様の１つでは、リモートマシン３０は、リモートマシン３０’上に存在するプロトコルエンジン４０６と通信する。他の実施態様では、リモートマシン３０は、プロトコルエンジン４０６をさらに備える。
【０１５８】
リモートマシン３０は、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０と通信し得る。ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０は、リモートマシン３０またはファーム３８の管理者に対する管理ツールをホストし得る。実施態様によっては、リモートマシン３０は、ＸＭＬを使用して、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０と通信する。他の実施態様では、リモートマシン３０は、シンプルオブジェクトアクセスプロトコル（ＳＯＡＰ）を使用して、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０と通信する。
【０１５９】
リモートマシン３０が、サブシステムのサブセットを含む図１Ｄおよび図５で説明する実施態様のような実施態様の場合、管理サービス５０４は、複数のサブシステムを含み得る。一実施態様では、各々のサブシステムは、シングルスレッドまたはマルチスレッドサブシステムである。スレッドは、マルチタスク環境で動作する実行の単独のストリームである。シングルスレッドサブシステムは、一度に１つのスレッドのみを実行することができる。マルチスレッドサブシステムは、現在実行している複数のスレッドをサポートすることができ、つまり、マルチスレッドサブシステムは、複数のタスクを同時に実行することができる。
【０１６０】
アプリケーション管理サブシステム５０６は、ストリーミング可能な複数のアプリケーションに関連する情報を管理する。一実施態様では、アプリケーション管理サブシステム５０６は、アプリケーションを記憶する、削除する、更新する、一覧にする、または解決するなど、他の構成要素からの要求を処理する。別の実施態様では、アプリケーション管理サブシステム５０６は、ストリーミング可能なアプリケーションに関連する構成要素によって送信される要求を処理する。これらのイベントは、３つのタイプのイベント、つまりアプリケーションの発行、アプリケーション一覧、およびアプリケーションの起動に分類され、これらの各々について、以下でさらに詳細に説明する。他の実施態様では、アプリケーション管理サブシステム５０６は、アプリケーション解決、アプリケーションの公表、アプリケーションの発行のサポートをさらに含む。他の実施態様では、アプリケーション管理サブシステム５０６は、アプリケーションの特性およびポリシーを記憶するためにデータストアを使用する。
【０１６１】
サーバ管理サブシステム５０８は、サーバファーム構成におけるアプリケーションのストリーミングに特有の構成を処理する。実施態様によっては、サーバ管理サブシステム５０８は、ファーム３８の構成に関連する情報の検索を要求するイベントも処理する。他の実施態様では、サーバ管理サブシステム５０８は、アプリケーションストリーム全体でアプリケーションに対するアクセスを提供するリモートマシンに関連するその他の構成要素によって送信されるイベント、およびこれらのリモートマシンの特性を処理する。一実施態様では、サーバ管理サブシステム５０８は、リモートマシンの特性およびファーム特性を記憶する。
【０１６２】
実施態様によっては、リモートマシン３０は、特殊化された１つまたは複数のアプリケーションサブシステムにサービスを提供する１つまたは複数の共通アプリケーションサブシステムをさらに含む。これらのリモートマシン３０は、特殊化された１つまたは複数のリモートマシンサブシステムにサービスを提供する１つまたは複数の共通リモートマシンサブシステムを有してもよい。他の実施態様では、共通アプリケーションサブシステム５２４は提供されず、特殊化された各々のアプリケーションおよびリモートマシンサブシステムが、必要なすべての機能をインプリメントする。
【０１６３】
リモートマシン３０が、共通アプリケーションサブシステム５２４を含む一実施態様では、共通アプリケーションサブシステム５２４は、発行済みアプリケーションの共通の特性を管理する。実施態様によっては、共通アプリケーションサブシステム５２４は、発行済みアプリケーション、または共通特性に関連する情報の検索を要求するイベントを処理する。他の実施態様では、共通アプリケーションサブシステム５２４は、共通アプリケーション、およびその特性に関連する他の構成要素によって送信されるすべてのイベントを処理する。
【０１６４】
共通アプリケーションサブシステム５２４は、ファーム３８にアプリケーションを「発行」することができ、ファーム３８は、ローカルマシン１０による一覧作成および起動に、各々のアプリケーションを使用できるようにする。一般に、アプリケーションは、アプリケーションの可用性が望ましい各々のリモートマシン３０上にインストールされる。一実施態様では、アプリケーションを発行するために、管理者は、アプリケーションをホストするリモートマシン３０、各々のリモートマシン上で実行可能なファイル名、アプリケーション（たとえば、音声、映像、暗号化など）を実行するためのローカルマシンの所定の能力、およびアプリケーションを使用することができるユーザのリストなどの情報を指定する管理ツールを実行する。この指定された情報は、アプリケーション特有の情報および一般的な情報に分類される。アプリケーションに特有の情報の例は、アプリケーションにアクセスする経路の名称、およびアプリケーションを実行するための実行可能ファイルである。共通の情報（つまり、共通アプリケーションデータ）としては、たとえば、ユーザにわかりやすいアプリケーション名（たとえば、「Ｍｉｃｒｏｓｏｆｔ  ＷＯＲＤ  ２０００」）、アプリケーションの一意な識別表示、およびアプリケーションのユーザが挙げられる。
【０１６５】
アプリケーションに特有の情報、および共通の情報は、アプリケーションをホストする各々のリモートマシン３０上のアプリケーションを制御する特殊化されたアプリケーションサブシステムに送信し得る。特殊化されたアプリケーションサブシステムは、アプリケーションに特有の情報、および共通の情報を持続ストア２４０に書き込むことができる。
【０１６６】
共通アプリケーションサブシステム５２４は、提供される場合、ファーム３８内の発行済みアプリケーションを管理する機能も提供する。管理者は、共通アプリケーションサブシステム５２４を通して、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０などの管理ツールを使用してファーム３８のアプリケーションを管理し、アプリケーション群を構成し、これらのアプリケーション群のアプリケーションツリー階層を生成することができる。各々のアプリケーション群は、アプリケーションツリー階層内のフォルダとして表現することができる。アプリケーションツリー階層内の各々のアプリケーションフォルダは、１つまたは複数のアプリケーションフォルダ、およびリモートマシンの特有のインスタンスを含むことができる。共通アプリケーションサブシステム５２４は、アプリケーションフォルダを作成、移動、改名、削除、および一覧を作成するための機能を提供する。
【０１６７】
一実施態様では、共通アプリケーションサブシステム５２４は、アプリケーション一覧およびアプリケーション解決要求を処理する際に、アプリケーション管理サブシステム５０６をサポートする。実施態様によっては、共通アプリケーションサブシステム５２４は、あるタイプのデータファイルと、当該タイプのデータファイルを処理するためのアプリケーションとの間のマッピングに応じて、実行されるアプリケーションを識別する機能を提供する。他の実施態様では、第２アプリケーションのサブシステムは、ファイルタイプの関連性のための機能を提供する。
【０１６８】
実施態様によっては、リモートマシン３０は、ポリシーサブシステムをさらに備え得る。ポリシーサブシステムは、ローカルマシン１０によってアプリケーションの実行が要求された後、アプリケーションがローカルマシン１０にストリーミングされ得るかどうかを決定するためのポリシー規則を含む。実施態様によっては、ポリシーサブシステムは、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０内で発行されたストリーミングされたアプリケーションに関連するサーバアクセスオプションを識別する。これらの実施態様の１つでは、ポリシーサブシステムは、ポリシー規則の代わりに、サーバアクセスオプションをポリシーとして使用する。
【０１６９】
セッション監視サブシステム５１０は、ローカルマシン１０に関連するアプリケーションストリーミングセッションのセッション状態を維持および更新し、アプリケーションストリーミングセッションのライセンス要件を実施する。一実施態様では、セッション管理サブシステム５１０は、セッションおよびログイベント、たとえばアプリケーションの起動、またはアプリケーションストリーミングセッションの終了を監視する。別の実施態様では、セッション監視サブシステム５１０は、心拍メッセージなどの通信を受信し、ローカルマシン１０からリモートマシン３０に伝送する。さらに別の実施態様では、セッション管理サブシステム５１０は、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０内のツールなどの管理ツールからのセッションに関する問い合わせに応答する。実施態様によっては、管理サービス５０４は、アプリケーションを実行するローカルマシンにライセンスを提供し、維持するため、セッション管理サブシステムと通信するライセンス管理サブシステムをさらに備える。
【０１７０】
一実施態様では、管理サービス５０４は、アプリケーション一覧およびアプリケーション解決のための機能を提供する。実施態様によっては、管理サービス５０４は、アプリケーションの起動、セッション監視および追跡、アプリケーションの発行、並びにライセンスの実施のための機能も提供する。
【０１７１】
次に、図６を参照すると、ブロック図は、アプリケーション一覧を提供する管理サービスを含むリモートマシン３０の一実施態様を示す。管理サービス５０４は、ＸＭＬサービス５１６と相互作用するウェブインターフェースの使用により、アプリケーション一覧を提供し得る。一実施態様では、ＸＭＬサービス５１６は、ローカルマシン１０のユーザに対するアプリケーションの一覧を作成する。別の実施態様では、ＸＭＬサービス５１６は、上記のＩＣＡブラウザシステムおよびｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄサブシステムの機能をインプリメントする。ＸＭＬサービス５１６は、管理通信サービス５１４と相互作用し得る。一実施態様では、ＸＭＬサービス５１６は、管理通信サービス５１４を使用して、アプリケーション一覧要求を生成する。アプリケーション一覧要求は、一覧のアプリケーションを実行する時に使用される実行の方法を指示するクライアントタイプを含み得る。アプリケーション一覧要求は、共通アプリケーションサブシステム５２４に送信される。一実施態様では、共通アプリケーションサブシステム５２４は、アプリケーション一覧要求のクライアントタイプに関連するアプリケーションの一覧を返す。別の実施態様では、共通アプリケーションサブシステム５２４は、ローカルマシン１０のユーザが使用可能なアプリケーションの一覧、ポリシーのアプリケーションに応じて選択された一覧を、ローカルマシン１０に関連する信任状に返す。この実施態様では、ポリシーエンジン４０６は、上記で図４に関連して説明したように、収集エージェント４０４によって収集された信任状にポリシーを適用し得る。さらに別の実施態様では、アプリケーションの一覧が返され、ローカルマシン１０に対するポリシーの適用は、一覧のアプリケーションの実行が要求されるまで延期される。
【０１７２】
管理サービス５０４は、アプリケーションをホストする第２リモートマシン３０’を識別するために、アプリケーション解決サービスを提供し得る。一実施態様では、第２リモートマシン３０’はファイルサーバまたはアプリケーションサーバである。実施態様によっては、管理サービス５０４は、アプリケーションをホストする複数のリモートマシン３０の識別子を含むファイルを調査する。一実施態様では、管理サービス５０４は、アプリケーションを実行するためのローカルマシン１０からの要求に応じて、アプリケーション解決サービスを提供する。別の実施態様では、管理サービス５０４は、第１リモートマシン３０とは異なるアプリケーション実行方法をインプリメントすることが可能な第２リモートマシン３０’を識別する。実施態様によっては、管理サービス５０４は、アプリケーションプログラムをローカルマシン１０にストリーミングすることが可能な第１リモートマシン３０’、およびアプリケーションプログラムに応じて生成されたアプリケーション出力データをローカルマシン１０に提供することが可能な第２リモートマシン３０’を識別する。
【０１７３】
一実施態様では、ウェブインターフェースは、アプリケーション解決要求をＸＭＬサービス５１６に伝送する。別の実施態様では、ＸＭＬサービス５１６は、アプリケーション解決要求を受信し、その要求をＭＦＲＰＣサブシステム５２２に伝送する。
【０１７４】
一実施態様では、ＭＦＲＰＣサブシステム５２２は、受信したアプリケーション解決要求とともに含まれるクライアントタイプを識別する。別の実施態様では、ＭＦＲＰＣサブシステムは、ポリシーをクライアントタイプに適用し、アプリケーションをローカルマシン１０に「ストリーミング」することを決定する。この実施態様では、ＭＦＲＰＣサブシステム５２２は、アプリケーション解決要求をアプリケーション管理サブシステム５０６に回送し得る。一実施態様では、アプリケーション解決要求をＭＦＲＰＣサブシステム５２２から受信すると、アプリケーション管理サブシステム５０６は、ローカルマシン１０に対するセッション管理サーバ５６２として機能するリモートマシン３０’’’’を識別し得る。実施態様によっては、ローカルマシンは、心拍メッセージをセッション管理サーバ５６２に伝送する。別の実施態様では、アプリケーション管理サブシステム５０６は、ローカルマシン１０にストリーミングされるアプリケーションを含む複数のアプリケーションファイルをホストするリモートマシン３０’を識別し得る。
【０１７５】
実施態様によっては、アプリケーション管理サブシステム５０６は、リモートマシン３０’を識別するための複数のアプリケーションファイルをホストする複数のリモートマシンを一覧にするファイルを使用する。他の実施態様では、アプリケーション管理サブシステム５０６は、ローカルマシン１０のＩＰアドレスに類似するＩＰアドレスを有するリモートマシン３０’を識別する。さらに他の実施態様では、アプリケーション管理サブシステム５０６は、ローカルマシン１０がアクセス可能なＩＰアドレスの範囲内のＩＰアドレスを有するリモートマシン３０’を識別する。
【０１７６】
さらに別の実施態様では、ＭＦＲＰＣサブシステム５２２は、ポリシーをクライアントタイプに適用し、アプリケーションが、リモートマシン３０’上で実行され、リモートマシン３０’が、アプリケーションの実行によって生成されたアプリケーション出力データをローカルマシン１０に伝送することができると決定する。この実施態様では、ＭＦＲＰＣサブシステム５２２は、アプリケーション解決要求を共通アプリケーションサブシステム５２４に回送し、リモートマシン３０’のホストアドレスの識別子を検索することができる。一実施態様では、識別されたリモートマシン３０’は、ＩＣＡまたはＲＤＰまたはＸ  Ｗｉｎｄｏｗｓ（登録商標）などの提示レベルプロトコルを使用して、アプリケーション出力データをローカルマシンに伝送し得る。実施態様によっては、リモートマシン３０’は、アプリケーションストリーミングセッション全体で、第２リモートマシン３０’からアプリケーションを受信する。
【０１７７】
一実施態様では、アプリケーション一覧およびアプリケーション解決が完了すると、アクセス情報は、一覧のアプリケーションの実行方法の識別表示と、一覧のアプリケーションをホストするリモートマシン３０’の識別子とを含むローカルマシン１０に伝送される。管理サービス５０４が、一覧のアプリケーションがローカルマシン１０上で実行するであろうと決定する一実施態様では、ウェブインターフェースは、一覧のアプリケーションに関する名前が決定された情報を含むファイルを作成し、ローカルマシン１０に伝送する。実施態様によっては、このファイルは、「．ｒａｄ」拡張子を使用して識別し得る。ローカルマシン１０は、受信したファイルの内容に応じて一覧のアプリケーションを実行することができる。表２は、このファイルに含まれる情報の一実施態様を示す。
【０１７８】
【化２−１】
2009536377.tif 000005
【０１７９】
【化２−２】
2009536377.tif 000006
ファイルは、表２に示すように、アプリケーションを実行する際にローカルマシンによって使用される開始チケットも含み得る。実施態様によっては、開始チケットは、予め決められた期間が経過した後に失効する。一実施態様では、ローカルマシンは、実行される一覧のアプリケーションをホストするリモートマシンに開始チケットを提供する。開始チケットを使用して、ローカルマシンのユーザが一覧のアプリケーションにアクセスすることを承認することによって、ユーザがファイルを再使用するか、あるいは承認されないバージョンのファイルを生成して、アプリケーションに不適切にアクセスすることを防止するのに役立つ。一実施態様では、開始チケットは、無作為に生成された大きい数を含む。
【０１８０】
図２に関連して上記で説明したように、アプリケーションプログラムの実行方法を選択する方法は、ローカルマシン１０またはローカルマシン１０のユーザに関連する信任状が受信された時に開始し（ステップ２０２）、ローカルマシン１０が使用可能な複数のアプリケーションプログラムは、受信された信任状に応じて提供される（ステップ２０４）。要求が受信されて一覧のアプリケーションが実行され（ステップ２０６）、一覧のアプリケーションを実行するための予め決められた数の方法の１つが、ポリシーに応じて選択され、予め決められた数の方法は、一覧のアプリケーションのアプリケーションストリーミング方法を含む（ステップ２０８）。
【０１８１】
次に図７を参照すると、フロー図は、アプリケーションプログラムを含む複数のファイルにアクセスするために行われるステップを示す。ローカルマシンは、ローカルマシンの起動前の分析を実行する（ステップ２１０）。一実施態様では、ローカルマシン１０は、アプリケーションプログラムを含む複数のアプリケーションファイルを検索および実行する前に起動前の分析を実行する。別の実施態様では、ローカルマシン１０は、起動前の分析が、アプリケーションプログラムを含む複数のアプリケーションファイルにアクセスすることを承認されるための必要条件であるという指示を受信すると、起動前の分析を実行する。
【０１８２】
実施態様によっては、ローカルマシン１０は、複数のアプリケーションファイルに関連するアクセス情報をリモートマシン３０から受信する。これらの実施態様の１つでは、アクセス情報は、複数のアプリケーションファイルをホストするリモートマシン３０’のロケーションの識別表示を含む。これらとは別の実施態様では、ローカルマシン１０は、アプリケーションプログラムの１つまたは複数のバージョンを含む複数のアプリケーションの識別表示を受信する。これらとはさらに別の実施態様では、ローカルマシン１０は、１つまたは複数のアプリケーションプログラムを含む複数のアプリケーションファイルの識別表示を受信する。他の実施態様では、ローカルマシン１０は、ローカルマシン１０が検索および実行に使用可能なアプリケーションプログラムの一覧を受信する。これらの実施態様の１つでは、一覧は、ローカルマシン１０の評価に起因する。さらに他の実施態様では、ローカルマシン１０は、アプリケーションプログラムを含む複数のアプリケーションファイルに関して受信された識別表示に応じて、少なくとも１つの特性を検索する。
【０１８３】
実施態様によっては、アクセス情報は、ローカルマシンが複数のアプリケーションファイルにアクセスすることを承認することが可能な開始チケットを含む。これらの実施態様の１つでは、開始チケットは、ローカルマシン１０の評価に応じてローカルマシン１０に提供される。これらとは別の実施態様では、開始チケットは、ローカルマシン１０によるローカルマシン１０の起動前の分析の後、ローカルマシン１０に提供される。
【０１８４】
他の実施態様では、ローカルマシン１０は、複数のアプリケーションファイルの実行に必要な少なくとも１つの特性を検索する。これらの実施態様の１つでは、アクセス情報は、少なくとも１つの特性を含む。これらとは別の実施態様では、アクセス情報は、ローカルマシン１０によって検索されるファイルのロケーションを指示し、ファイルは、少なくとも１つの特性を一覧にする。これらとはさらに別の実施態様では、少なくとも１つの特性を一覧にするファイルは、複数のアプリケーションファイルの一覧、および複数のアプリケーションファイルをホストするリモートマシン３０の識別表示をさらに含む。
【０１８５】
ローカルマシン１０は、少なくとも１つの特性がローカルマシン上に存在すると決定する。一実施態様では、ローカルマシン１０は、この決定を起動前の分析の一部として行う。別の実施態様では、ローカルマシン１０は、ローカルマシン１０が少なくとも１つの特性を有するかどうかを決定する。
【０１８６】
一実施態様では、ローカルマシン１０上における少なくとも１つの特性の存在の決定は、デバイスドライバがローカルマシン上にインストールされているかどうかを決定することを含む。別の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、オペレーティングシステムがローカルマシン１０上にインストールされているかどうか決定することを含む。さらに別の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、特定のオペレーティングシステムがローカルマシン１０上にインストールされているかどうか決定することを含む。さらに別の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、オペレーティングシステムの特定のリビジョンレベルが、ローカルマシン１０上にインストールされているかどうか決定することを含む。
【０１８７】
実施態様によっては、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、ローカルマシン１０が、一覧のアプリケーションを実行するための承認を取得したかどうか決定することを含む。これらの実施態様の１つでは、決定は、ローカルマシン１０が、一覧のアプリケーションを実行するためのライセンスを受信したかどうかに関して、ローカルマシン１０によって行われる。これらとは別の実施態様では、決定は、ローカルマシン１０が、アプリケーションストリーミングセッション全体で、一覧のアプリケーションを含む複数のアプリケーションファイルを受信するライセンスを受信したかどうかに関して、ローカルマシン１０によって行われる。他の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、ローカルマシン１０が、一覧のアプリケーションを検索および実行するために使用可能な十分な帯域幅を有するかどうかを決定することを含む。
【０１８８】
実施態様によっては、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、ローカルマシン１０上のスクリプトの実行を含む。他の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、ソフトウェアをローカルマシン１０上にインストールすることを含む。さらに他の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、ローカルマシン１０上のレジストリの修正を含む。さらに他の実施態様では、少なくとも１つの特性がローカルマシン１０上に存在することの決定は、収集エージェント４０４をローカルマシン１０に伝送して、ローカルマシン１０で実行し、ローカルマシン１０に関連する信任状を収集することを含む。
【０１８９】
ローカルマシン１０は、複数のアプリケーションファイルを実行するための承認をリモートマシン３０に要求し、要求は、開始チケットを含む（ステップ２１２）。実施態様によっては、ローカルマシン１０は、少なくとも１つの特性がローカルマシン１０上に存在するという決定に応じて要求を行う。これらの実施態様の１つでは、ローカルマシン１０は、複数の特性がローカルマシン１０上に存在し、この複数の特性は一覧のアプリケーションに関連し、一覧のアプリケーションを実行する要求に応じて受信されたと決定する。これらとは別の実施態様では、ローカルマシン１０が、一覧のアプリケーションの実行を承認する指示を受信するかどうかは、少なくとも１つの特性がローカルマシン１０上に存在するかどうかによって決まる。一実施態様では、ローカルマシン１０は、アプリケーションプログラムの一覧を受信し、一覧のアプリケーションの実行を要求し、少なくとも１つの特性がローカルマシン１０上に存在するという決定の後、少なくとも１つの特性、および一覧のアプリケーションの実行を承認する開始チケットを含むアクセス情報を受信した。
【０１９０】
一実施態様では、ローカルマシン１０は、複数のアプリケーションファイルの実行を承認するライセンスをリモートマシン３０から受信する。実施態様によっては、ライセンスは、特定期間における実行を承認する。これらの実施態様の１つでは、ライセンスは、複数のアプリケーションファイルを実行する証人を維持するために、心拍メッセージの伝送を要求する。
【０１９１】
別の実施態様では、ローカルマシン１０は、複数のアプリケーションファイルの実行を監視するリモートマシン３０に関連するライセンスおよび識別子をリモートマシン３０から受信する。実施態様によっては、リモートマシンは、図５に示すようにセッション管理サーバ５６２である。これらの実施態様の１つでは、セッション管理サーバ５６２は、ローカルマシン１０に関連するセッションを監視するセッション管理サブシステム５１０を含む。他の実施態様では、別個のリモートマシン３０’’’’がセッション管理サーバ５６２である。
【０１９２】
ローカルマシン１０は、複数のアプリケーションファイルを受信し、実行する（ステップ２１４）。一実施態様では、ローカルマシン１０は、アプリケーションストリーミングセッション全体で複数のアプリケーションファイルを受信する。別の実施態様では、ローカルマシン１０は、複数のアプリケーションファイルをローカルマシン１０上の隔離環境内に記憶する。さらに別の実施態様では、さらに別の実施態様では、ローカルマシン１０は、複数のアプリケーションファイルのうちの第２のアプリケーションファイルを受信する前に、複数のアプリケーションファイルの１つのアプリケーションファイルを実行する。実施態様によっては、リモートマシンは、複数のアプリケーションファイルを複数のローカルマシンに伝送し、複数のローカルマシンの中の各々のローカルマシンは、リモートマシンとの個々のアプリケーションストリーミングセッションを確立している。
【０１９３】
実施態様によっては、ローカルマシン１０は、複数のアプリケーションファイルをキャッシュ内に記憶し、アプリケーションファイルの実行を遅延させる。これらの実施態様の１つでは、ローカルマシン１０は、予め画定された期間にアプリケーションファイルを実行するための承認を受信する。これらとは別の実施態様では、ローカルマシン１０は、ローカルマシン１０がネットワークにアクセスできない場合、予め画定された期間にアプリケーションファイルを実行するための承認を受信する。他の実施態様では、ローカルマシンは、複数のアプリケーションファイルをキャッシュ内に記憶する。これらの実施態様の１つでは、アプリケーションストリーミングクライアント５５２は、複数のアプリケーションファイルをキャッシュから検索するため、内部のアプリケーションストリーミングセッションを確立する。これらとは別の実施態様では、ローカルマシン１０は、ローカルマシン１０がネットワークにアクセスできない場合、予め画定された期間にアプリケーションファイルを実行するための承認を受信する。
【０１９４】
ローカルマシン１０は、少なくとも１つの心拍メッセージをリモートマシンに伝送する（ステップ２１６）。実施態様によっては、ローカルマシン１０は、一覧のアプリケーションを含む複数のアプリケーションファイルを実行する承認を保持するため、少なくとも１つの心拍メッセージを伝送する。他の実施態様では、ローカルマシン１０は、複数のアプリケーションファイル内のアプリケーションファイルを検索するための承認を保持するため、少なくとも１つの心拍メッセージを伝送する。さらに他の実施態様では、ローカルマシン１０は、予め決められた期間に複数のアプリケーションファイルを実行することを承認するライセンスを受信する。
【０１９５】
実施態様によっては、ローカルマシン１０は、第２のリモートマシン３０’’’’に心拍メッセージを伝送する。これらの実施態様の１つでは、第２リモートマシン３０’’’’は、複数のアプリケーションファイルの検索および実行を監視するセッション管理サーバ５６２を含み得る。これらとは別の実施態様では、第２リモートマシン３０’’’’は、伝送された心拍メッセージに応じて、複数のアプリケーションファイルの実行を承認するライセンスを更新し得る。これらとはさらに別の実施態様では、第２リモートマシン３０’’’’は、伝送された心拍メッセージに応じて、ローカルマシン１０にコマンドを伝送し得る。
【０１９６】
再び図５を参照すると、ローカルマシン１０は、アプリケーションストリーミングクライアント５５２、ストリーミングサービス５５４、および隔離環境５５６を含み得る。アプリケーションストリーミングクライアント５５２は、実行可能なプログラムでよい。実施態様によっては、アプリケーションストリーミングクライアント５５２は、実行可能な別のプログラムを開始することが可能であり得る。他の実施態様では、アプリケーションストリーミングクライアント５５２は、ストリーミングサービス５５４を開始し得る。これらの実施態様の１つでは、アプリケーションストリーミングクライアント５５２は、アプリケーションプログラムの実行に関連するパラメータをストリーミングサービス５５４に提供し得る。これらとは別の実施態様では、アプリケーションストリーミングクライアント５５２は、リモート手順コールを使用して、ストリーミングサービス５５４を開始し得る。
【０１９７】
一実施態様では、ローカルマシン１０は、アプリケーションプログラムの実行を要求し、実行に関連するリモートマシン３０からアクセス情報を受信する。別の実施態様では、アプリケーションストリーミングクライアント５５２は、アクセス情報を検索する。さらに別の実施態様では、アプリケーションストリーミングクライアント５５２は、アクセス情報をストリーミングサービス５５４に提供する。さらに別の実施態様では、アクセス情報は、アプリケーションプログラムを含む複数のアプリケーションファイルに関連するファイルのロケーションの識別表示を含む。
【０１９８】
一実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルに関連するファイルを検索する。実施態様によっては、検索されたファイルは、複数のアプリケーションファイルのロケーションの識別表示を含む。これらの実施態様の１つでは、ストリーミングサービス５５４は、複数のアプリケーションファイルを検索する。これらとは別の実施態様では、ストリーミングサービス５５４は、検索された複数のアプリケーションファイルをローカルマシン１０上で実行する。他の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルを検索し、実行するための承認を維持するため、心拍メッセージをリモートマシンに伝送する。
【０１９９】
実施態様によっては、検索されたファイルは、１つより多くの複数のアプリケーションファイルのロケーションの識別表示を含み、各々の複数のアプリケーションファイルは、異なるアプリケーションプログラムを含む。これらの実施態様の１つでは、ストリーミングサービス５５４は、ローカルマシン１０に適合可能なアプリケーションプログラムを含む複数のアプリケーションファイルを検索する。これらとは別の実施態様では、ストリーミングサービス５５４は、ローカルマシン１０の評価に応じて、特定の複数のアプリケーションファイルを検索するための承認を受信する。
【０２００】
実施態様によっては、複数のアプリケーションファイルは圧縮され、ＣＡＢ、ＺＩＰ、ＳＩＴ、ＴＡＲ、ＪＡＲなどのアーカイブファイル、またはその他のアーカイブファイル内のファイルサーバ上に記憶される。一実施態様では、アーカイブファイル内に記憶された複数のアプリケーションファイルは、アプリケーションプログラムを含む。別の実施態様では、アーカイブファイル内に記憶された複数の複数のアプリケーションファイルは各々、あるアプリケーションプログラムの異なるバージョンを含む。さらに別の実施態様では、アーカイブファイル内に記憶された複数の複数のアプリケーションファイルは各々、異なるアプリケーションプログラムを含む。実施態様によっては、アーカイブファイルは、複数のアプリケーションファイル内の各々のファイルに関連するメタデータを含む。これらの実施態様の１つでは、ストリーミングサービス５５４は、含まれているメタデータに応じてディレクトリ構造を生成する。以下の図１２に関連してさらに詳細に説明するとおり、メタデータは、アプリケーションプログラムによるディレクトリ一覧の要求を満たすために使用することができる。
【０２０１】
一実施態様では、ストリーミングサービス５５４は、アーカイブファイルを解凍して、複数のアプリケーションファイルを取得する。別の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイル内のファイルのローカルコピーが、ファイルを複数のアプリケーションファイルから検索する前に、ローカルマシン１０上のキャッシュ内に存在するかどうかを決定する。さらに別の実施態様では、ファイルシステムフィルタドライバ５６４は、ローカルコピーがキャッシュ内に存在するかどうかを決定する。実施態様によっては、ストリーミングサービス５５４は、複数のアプリケーションファイル内のファイルを検索する前に、レジストリのエントリを修正する。
【０２０２】
実施態様によっては、ストリーミングサービス５５４は、ローカルマシン１０上のキャッシュ内の複数のアプリケーションファイルを記憶する。これらの実施態様の１つでは、ストリーミングサービス５５４は、複数のアプリケーションファイルをキャッシュする要求を受信すると、複数のアプリケーションファイルをキャッシュする機能を提供し得る。これらとは別の実施態様では、ストリーミングサービス５５４は、キャッシュをローカルマシン１０上に固定するための機能を提供し得る。これらとは別の実施態様では、ストリーミングサービス５５４は、キャッシュのサイズおよびロケーションを調節するためのアルゴリズムを使用し得る。
【０２０３】
実施態様によっては、ストリーミングサービス５５４は、ローカルマシン１０上に隔離環境５５６を形成する。これらの実施態様の１つでは、ストリーミングサービス５５４は、隔離環境アプリケーションプログラムインターフェースを使用して、隔離環境５５６を形成する。これらとは別の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルを隔離環境５５６内に記憶する。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、隔離環境内の複数のアプリケーションファイル内の１つのファイルを実行する。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、隔離環境内のアプリケーションプログラムを実行する。
【０２０４】
ローカルマシン１０上でアプリケーションを実行するために承認を受信する実施態様では、アプリケーションの実行は、隔離環境５５６内で行い得る。実施態様によっては、アプリケーションを含む複数のアプリケーションファイルは、アプリケーションの実行前に、ローカルマシン１０上に記憶される。他の実施態様では、複数のアプリケーションファイルのサブセットが、アプリケーションの実行前に、ローカルマシン１０上に記憶される。さらに他の実施態様では、複数のアプリケーションファイルは、隔離環境５５６内に存在しない。さらに他の実施態様では、複数のアプリケーションファイルのサブセットは、ローカルマシン１０上に存在しない。複数のアプリケーションファイルのサブセット、または複数のアプリケーションファイル内の各々のアプリケーションファイルが、ローカルマシン１０上に存在するか、あるいは隔離環境５５６内に存在するかに関係なく、実施態様によっては、複数のアプリケーションファイル内のアプリケーションファイルは、隔離環境５５６内で実行し得る。
【０２０５】
隔離環境５５６は、アプリケーションのソースコードを変更する必要がなく、アプリケーションの互換性問題を減少させるために、ファイルシステムの仮想化、レジストリシステムの仮想化、指定オブジェクトの仮想化を提供することが可能なコアシステムから構成し得る。隔離環境５５６は、レジストリおよび指定オブジェクトの仮想化の場合はユーザモード、ファイルシステムの仮想化の場合はファイルシステムフィルタドライバを使用するカーネルの両方におけるフッキングを使用して、アプリケーションリソース要求をリダイレクトし得る。以下は、隔離環境５５６のいくつかの実施態様の説明である。
【０２０６】
次に、図８Ａを参照すると、アプリケーションの互換性およびアプリケーションの適合性の問題を減少させたオペレーティングシステム１００の制御下で実行されるコンピュータの一実施態様が示されている。オペレーティングシステム１００は、そのシステム層１０８を介して、様々なネイティブリソースをアプリケーションプログラム１１２、１１４に利用できるようにする。システム層１０８によって具現されるリソースのビューは、「システム範囲」と呼ばれるであろう。アプリケーションプログラム１１２、１１４によるネイティブリソース１０２、１０４、１０６、１０７に対する矛盾するアクセスを防止するため、隔離環境２００が提供される。図８Ａに示すように、隔離環境２００は、アプリケーション隔離層２２０およびユーザ隔離層２４０を含む。概念上、隔離環境２００は、アプリケーション隔離層２２０を介してアプリケーションプログラム１１２、１１４に、ネイティブリソースの特有なビュー、たとえばファイルシステム１０２、レジストリ１０４、オブジェクト１０６およびウィンドウ名１０７を提供する。各々の隔離層は、アプリケーションに提供されるネイティブリソースのビューを修正する。ある層によって提供されるネイティブリソースの修正されたビューは、当該層の「隔離スコープ」と呼ばれるであろう。図８Ａに示すように、アプリケーション隔離層は、２つのアプリケーション隔離スコープ２２２、２２４を備える。スコープ２２２は、アプリケーション１１２に提供されるネイティブリソースのビューを表し、スコープ２２４は、アプリケーション１１４に提供されるネイティブリソースのビューを表す。したがって、図８Ａに示す実施態様の場合、ＡＰＰ１  １１２には、ファイルシステム１０２’の特定のビューが提供され、ＡＰＰ２  １１４には、ファイルシステム１０２’’に特有であるファイルシステム１０２’’の別のビューが提供される。実施態様によっては、アプリケーション隔離層２２０は、ネイティブリソース１０２、１０４、１０６、１０７の特定のビューを、オペレーティングシステム１００の上部で実行する個々のアプリケーションプログラム各々に提供する。他の実施態様では、アプリケーションプログラム１１２、１１４は、セットとして集合化され、これらの実施態様では、アプリケーション隔離層２２０は、ネイティブリソースの特定のビューを各々のセットのアプリケーションプログラムに提供する。矛盾するアプリケーションプログラムは、アプリケーションの互換性および適合性を保障するため、別個の群に入れることができる。さらに他の実施態様では、あるセットに属するアプリケーションは、管理者が構成し得る。実施態様によっては、システムスコープに正確に対応する「パススルー」隔離スコープを画定することができる。つまり、パススルー隔離スコープ内で実行されるアプリケーションは、直接システムスコープ上で動作する。
【０２０７】
実施態様によっては、アプリケーション隔離スコープは、層状サブスコープとしてさらに分割される。メインサブスコープは、ベースアプリケーション隔離スコープを含み、追加のサブスコープは、複数のアプリケーションの実行インスタンスにとって見ることができる、このスコープに対する様々な修正を含む。たとえば、サブスコープは、アプリケーションのパッチレベルの変更、または追加の特徴のインストールもしくは除去を具現するスコープに対する修正を含み得る。実施態様によっては、実行アプリケーションのインスタンスに見える追加のサブスコープのセットは、構成可能である。実施態様によっては、見えるサブスコープのセットは、どのユーザのためにアプリケーションが実行されているかに関係なく、実行アプリケーションのすべてのインスタンスで同じである。他の実施態様では、見えるサブスコープのセットは、アプリケーションを実行する様々なユーザごとに変化し得る。さらに他の実施態様では、サブスコープの様々なセットが画定され、ユーザは、どのセットを使用するかに関して選択肢を有する。実施態様によっては、サブスコープは、不要になった場合は廃棄し得る。実施態様によっては、サブスコープのセット内に含まれる修正は、一緒に統合されて、単一のサブスコープを形成する。
【０２０８】
次に、図８Ｂを参照すると、アプリケーションの互換性およびアプリケーションの適合性の問題が減少したマルチユーザコンピュータが示されている。マルチユーザコンピュータは、上記の隔離環境２００と同様、システム層１０８内にネイティブリソース１０２、１０４、１０６、１０７を含む。アプリケーション隔離層２２０は、上記のように機能し、ネイティブリソースの修正されたビューとともに、１つのアプリケーション、またはアプリケーション群を提供する。ユーザ隔離層２４０は、概念上、アプリケーションプログラム１１２、１１４にネイティブリソースのビューを提供し、このビューは、アプリケーションが実行されているユーザのユーザアイデンティティに基づいてさらに変更される。図８Ｂに示すように、ユーザ隔離層２４０は、ある数のユーザ隔離スコープ２４２’、２４２’’、２４２’’’、２４２’’’’、２４２’’’’’、２４２’’’’’’（一般に、２４２）を含むように考えることができる。ユーザ隔離スコープ２４２は、ネイティブリソースのアプリケーションに特有のビューのユーザに特有のビューを提供する。たとえば、ユーザ「ａ」のためにユーザセッション１１０で実行されるＡＰＰ１  １１２には、ユーザ隔離スコープ２４２’、およびアプリケーション隔離スコープ２２２の両方によって変更または修正されるファイルシステムビュー１０２’（ａ）が提供される。
【０２０９】
言い換えれば、ユーザ隔離層２４０は、アプリケーション隔離スコープ２２２によって提供されるアプリケーション特有のビューの修正の「上部で」、ユーザ隔離スコープ２４２’によって提供されるユーザ特有のビューの修正を「階層化」し、その結果、システム層によって提供されるネイティブリソースのシステム全体のビューの「上部で階層化する」ことによって、個々のユーザ各々のネイティブリソースのビューを変更する。たとえば、ＡＰＰ１  １１２の第１インスタンスが、レジストリデータベース１０４内のエントリにアクセスする場合、第１ユーザセッションおよびアプリケーション１０４’（ａ）に特有のレジストリデータベースのビューが調査される。要求されたレジストリキーが、レジストリ１０４’（ａ）のユーザ特有のビューに見られる場合、レジストリキーはＡＰＰ１  １１２に返される。そうではない場合、アプリケーション１０４’に特有のレジストリデータベースのビューが調査される。要求されたレジストリキーが、レジストリ１０４’のアプリケーション特有のビューに見られる場合、レジストリキーはＡＰＰ１  １１２に返される。そうではない場合、次に、システム層１０８内のレジストリデータベース１０４内に記憶されたレジストリキー（つまり、ネイティブレジストリキー）が、ＡＰＰ１  １１２に返される。
【０２１０】
実施態様によっては、ユーザ隔離層２４０は、個々のユーザ各々に隔離スコープを提供する。他の実施態様では、ユーザ隔離層２４０は、あるグループのユーザに隔離スコープを提供し、この隔離スコープは、組織内の役割ごとに画定することができるか、あるいは管理者によって予め決められる。さらに他の実施態様では、ユーザ隔離層２４０は提供されない。これらの実施態様では、アプリケーションプログラムによって見られるネイティブリソースのビューは、アプリケーション隔離層２２０によって提供されるビューである。隔離環境２００は、様々なユーザがアプリケーションプログラムの同時実行をサポートするマルチユーザコンピュータに関連して説明されてはいるが、異なるユーザが同じコンピュータシステム上で、アプリケーションプログラムを順次実行することから生じるアプリケーションの互換性および適合性の問題、並びに同じユーザが互換性のないプログラムをインストールおよび実行することから生じる問題に対処するために、シングルユーザコンピュータ上でも使用し得る。
【０２１１】
実施態様によっては、ユーザ隔離スコープは、さらにサブスコープとして分割される。当該スコープ内で実行するアプリケーションに提示されるビューをユーザ隔離スコープによって修正すると、そのスコープの各々のサブスコープ内に含まれる修正が統合される。サブスコープは、互いに上部に階層化され、統合されたビューでは、より上位のサブスコープのリソースを修正すると、下位の層の同じリソースに対する修正は無効になる。
【０２１２】
これらの実施態様のいくつかでは、１つまたは複数のこれらのサブスコープは、ユーザに特有のビューの修正を含むことができる。これらの実施態様のいくつかでは、１つまたは複数のサブスコープは、ユーザのセットに特有なビューの修正を含むことができ、この修正は、システム管理者によって画定されるか、あるいはオペレーティングシステム内のユーザのグループとして画定される。これらの実施態様のいくつかでは、これらのサブスコープの１つは、特定のログインセッションに特有であり、したがって、セッションが終了すると廃棄されるビューの修正を含むことができる。これらの実施態様のいくつかでは、ユーザ隔離スコープに関連するアプリケーションインスタンスによるネイティブリソースの変更は、常にこれらのサブスコープの１つに影響し、他の実施態様では、こうした変更は、特定のリソースに応じて、異なるサブスコープに影響し得る。
【０２１３】
上記の概念上のアーキテクチャは、ユーザのために実行するアプリケーションを、統合または統一され、仮想化され、当該アプリケーションとユーザとの組合せに特有のビューで提示することを可能にする。統合されたビューは、「仮想スコープ」と呼ぶことができる。ユーザのために実行するアプリケーションインスタンスは、ネイティブリソースのすべての有効な仮想化インスタンスを表すネイティブリソースの単一ビューで提示される。概念上、この統合されたビューは、先ず、システムスコープ内のオペレーティングシステムによって提供されるネイティブリソースの集合から構成され、この集合は、実行アプリケーションに適用されるアプリケーション隔離スコープに具現される修正と重畳され、ユーザのために実行するアプリケーションに適用されるユーザ隔離スコープに具現される修正とさらに重畳される。システムスコープ内のネイティブリソースは、オペレーティングシステムの許可が、特定のユーザまたはアプリケーションにアクセスすることを拒絶する場合を除いて、システム上のすべてのユーザおよびアプリケーションに共通であるという特徴がある。アプリケーション隔離スコープに具現されるリソースのビューの修正は、当該アプリケーション隔離スコープに関連するアプリケーションのすべてのインスタンスに共通であるという特徴がある。ユーザ隔離スコープに具現されるリソースビューの修正は、ユーザ隔離スコープに関連して、ユーザのために実行している適用可能なアプリケーション隔離スコープに関連するすべてのアプリケーションに共通であることを特徴とする。
【０２１４】
このコンセプトは、サブスコープに拡大適用することができる；ユーザサブスコープに具現されるリソースビューの修正は、ユーザ隔離サブスコープに関連して、ユーザまたはユーザのグループのために実行され、適用されるすべてのアプリケーションに共通である。この説明全体で、一般的な参照符号が「スコープ」に言及する場合は常に、サブスコープが存在する場合は、サブスコープも指示することを意図している。
【０２１５】
アプリケーションが、ファイルシステムまたはレジストリデータベースの一部など、ネイティブリソースのレジストリデータベースの一覧を要求する場合、仮想化一覧は、先ず、ネイティブリソースの「システムスコープ」インスタンス、つまり、システム層内に見られるインスタンスがあれば、そのインスタンスを一覧にすることによって構成される。次に、要求されたリソースの「アプリケーションスコープ」インスタンス、つまり、適切なアプリケーション隔離スコープ内に見られるインスタンスがあれば、そのインスタンスが一覧にされる。アプリケーション隔離スコープ内で遭遇する一覧の任意のリソースは、ビューに追加される。一覧のリソースが、ビュー内に既に存在する場合（システムスコープ内にも存在していたため）、アプリケーション隔離スコープ内で遭遇するリソースのインスタンスと置き換えられる。同様に、要求されたリソースの「ユーザスコープ」インスタンス、つまり、適切なユーザ隔離スコープ内で見られるインスタンスがあれば、そのインスタンスが一覧にされる。やはり、ユーザ隔離スコープ内で遭遇する一覧の任意のリソースは、ビューに追加される。ネイティブリソースが既にビュー内に存在する場合（システムスコープ、または適切なアプリケーション隔離スコープ内に存在していたため）、ユーザ隔離スコープ内で遭遇するリソースのインスタンスと置き換えられる。この方法では、ネイティブリソースの任意の一覧は、遭遇するネイティブリソースの仮想化を適切に反映する。概念上、複数のサブスコープを含む隔離スコープを一覧にする場合、同じ方法が適用される。個々のサブスコープが一覧にされ、より上位のサブスコープのリソースは、統合されたビュー内のより下位のサブスコープの一致するインスタンスと置き換えられる。
【０２１６】
他の実施態様では、一覧は、逆ではなく、ユーザ隔離スコープ層からシステム層まで行うことができる。これらの実施態様では、ユーザ隔離スコープが一覧にされる。次に、アプリケーション隔離スコープが一覧にされ、アプリケーション隔離スコープ内に表示されており、ユーザ隔離スコープ内で遭遇しなかった任意のリソースインスタンスは、構成中の統合ビューに追加される。類似のプロセスは、システムスコープ内にのみ表示されるリソースについて繰り返すことができる。
【０２１７】
さらに他の実施態様では、すべての隔離スコープは同時に一覧にされ、個々の一覧が結合される。
【０２１８】
あるアプリケーションが、ネイティブリソースの既存のインスタンスを開こうとするが、そのリソースを修正する意図はない場合、アプリケーションに返される特定のインスタンスは、仮想スコープ内に見られるインスタンスであるか、あるいは同様に、要求されたリソースの親の仮想化一覧内に表示されると思われるインスタンスである。隔離環境の観点から、アプリケーションは、「仮想リソース」を開くことを要求すると考えられ、その要求を満たすために使用されるネイティブリソースの特定のインスタンスは、要求されたリソースに対応する「リテラルリソース」であると考えられる。
【０２１９】
ユーザのために実行されるアプリケーションが、リソースを開こうとして、そのリソースを修正する意図があって開こうとしている場合、アプリケーション隔離スコープおよびシステムスコープ内のリソースは、ユーザのために実行されるアプリケーションに共通であるため、当該アプリケーションインスタンスには、一般に、修正するためのリソースのプライベートコピーが与えられる。一般に、リソースのユーザスコープコピーは、ユーザスコープされた当該インスタンスが既に存在しない限り作成される。仮想スコープによって提供される統合ビューの定義は、アプリケーションスコープまたはシステムスコープのリソースをユーザ隔離スコープにコピーする動作は、仮想スコープによって、当該ユーザおよびアプリケーション、任意の他のユーザ、また任意の他のアプリケーションインスタンスに提供される統合ビューを変更しないことを意味する。ユーザのために実行されるアプリケーションインスタンスによって行われるコピーされたリソースに対する後続の修正は、同じユーザ隔離スコープを共用しない他のいずれかのアプリケーションインスタンスの統合ビューに影響しない。つまり、これらの修正は、同じアプリケーション隔離スコープに関連しない他のユーザ、またはアプリケーションインスタンスのためのネイティブリソースの統合ビューを変更しない。
【０２２０】
アプリケーションは、特定の隔離スコープ内にインストールし得る（以下で、より詳細に説明する）。隔離スコープ内にインストールされるアプリケーションは、常に、当該スコープに関連付けられる。あるいは、アプリケーションは、特定の隔離スコープ、またはある数の隔離スコープを開始し得る。実際上、アプリケーションは、１つまたは複数の隔離スコープで開始され、関連付けられる。関連する隔離スコープ、またはスコープは、ネイティブリソースの特定のビューをプロセスに提供する。アプリケーションは、システムスコープで開始することができ、つまりアプリケーションは、どの隔離スコープにも関連付けなくてよい。その結果、Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒなどのオペレーティングシステムのアプリケーション、また隔離環境内の第三者のアプリケーションの選択的な実行が可能になる。
【０２２１】
アプリケーションがどこにインストールされているかに関係なく、アプリケーションをある隔離スコープ内で開始するこの能力は、アプリケーションを当該隔離スコープ内に別個にインストールする必要がなく、アプリケーションの互換性および適合性問題を軽減する。インストールされているアプリケーションを異なる隔離スコープで選択的に開始する能力は、ヘルパーアプリケーション（Ｗｏｒｄ、Ｎｏｔｅｐａｄなど）を必要とするアプリケーションが、これらのヘルパーアプリケーションを同じ規則集合で開始する能力を提供する。
【０２２２】
さらに、複数の隔離環境内でアプリケーションを開始する能力は、隔離アプリケーションおよび共通アプリケーション間をより良好に統合することを可能にする。
【０２２３】
次に、図８Ｃを参照し、簡潔に説明すると、プロセスを隔離スコープと関連付ける方法は、一時停止状態でプロセスを開始するステップを含む（ステップ８８２）。所望の隔離スコープに関連する規則が検索され（ステップ８８４）、そのプロセスの識別子、および検索された規則が、メモリ要素内に記憶され（ステップ８８６）、一時停止されたプロセスが再開される（ステップ８８８）。プロセスによって作成されるネイティブリソースにアクセスするための後続のコールは傍受されるか、またはフックされ（ステップ８９０）、プロセス識別子に関連する規則がある場合、その規則を使用して、要求されたリソースに対するアクセスを仮想化する（ステップ８９２）。
【０２２４】
さらに図８Ｃをより詳細に参照すると、プロセスは、一時停止常態で開始される（ステップ８８２）。実施態様によっては、このタスクを達成するために、カスタムランチャープログラムが使用される。これらの実施態様のいくつかでは、ランチャーは、選択された隔離スコープでプロセスを開始するように特に設計される。他の実施態様では、ランチャーは、たとえばコマンドラインオプションにより、所望の隔離スコープの明細を入力として認める。
【０２２５】
所望の隔離スコープに関連する規則が検索される（ステップ８８４）。実施態様によっては、規則は、持続的な記憶要素、たとえばハードディスクドライブまたはその他の固体メモリ要素から検索される。規則は、関係データベース、フラットファイルデータベース、ツリー構造データベース、２進ツリー構造、またはその他の持続データ構造として記憶し得る。他の実施態様では、規則は、規則を特に記憶するように構成されたデータ構造内に記憶し得る。
【０２２６】
プロセスｉｄ（ＰＩＤ）などのプロセスの識別子、および検索された規則は、メモリ要素内に記憶される（ステップ８８６）。実施態様によっては、新しいプロセスの生成に関するオペレーティングシステムのメッセージを受信するカーネルモードドライバが提供される。これらの実施態様では、ＰＩＤおよび検索された規則は、ドライバのコンテキスト内に記憶することができる。他の実施態様では、ネイティブリソース要求を傍受するファイルシステムのフィルタドライバ、またはミニフィルタが提供される。これらの実施態様では、ＰＩＤ、および検索された規則は、フィルタ内に記憶することができる。さらに他の実施態様では、すべての傍受は、ユーザモードのフッキングによって行われ、ＰＩＤはまったく記憶されない。規則は、プロセスの開始時にユーザモードのフッキング装置によってロードされ、規則は、プロセス時に完全に実行されるため、その他の構成要素は、ＰＩＤに適用される規則を知る必要はない。
【０２２７】
一時停止プロセスが再開し（ステップ８８８）、プロセスによって作成されるネイティブリソースにアクセスするための後続のコールが傍受またはフックされ（ステップ８９０）、プロセス識別子に関連する規則があれば、要求されたリソースに対するアクセスを仮想化するために、その規則が使用される（ステップ８９２）。実施態様によっては、ファイルシステムのフィルタドライバ、またはミニフィルタ、またはファイルシステムドライバは、ネイティブリソースにアクセスする要求を傍受し、傍受された要求に関連するプロセス識別子が、一連の規則に関連付けられているかどうかを決定する。関連付けられている場合、記憶されたプロセス識別子に関連する規則は、ネイティブリソースにアクセスする要求を仮想化するために使用される。関連付けられていない場合、ネイティブリソースにアクセスする要求は、修正されずに通過する。他の実施態様では、動的にリンクされるライブラリは、新たに生成されたプロセス内にロードされ、ライブラリは隔離規則をロードする。さらに他の実施態様では、カーネルモード技術（フッキング、フィルタドライバ、ミニフィルタ）、およびユーザモード技術はともに、ネイティブリソースにアクセスするためのコールを傍受するために使用される。ファイルシステムフィルタドライバが規則を記憶する実施態様では、ライブラリは、ファイルシステムのフィルタドライバから規則をロードすることができる。
【０２２８】
隔離スコープに関連するプロセスの「子」プロセスは、その「親」プロセスの隔離スコープに関連付けられる。実施態様によっては、これは、子プロセスが生成される時に、ファイルシステムフィルタドライバを通知するカーネルモードドライバによって行われる。これらの実施態様では、ファイルシステムフィルタドライバは、親プロセスのプロセス識別子が隔離スコープに関連付けられているかどうかを決定する。関連付けられている場合、ファイルシステムフィルタドライバは、新たに生成された子プロセスのプロセス識別子と、親プロセスの隔離スコープとの関連性を記憶する。他の実施態様では、カーネルモードドライバを使用せずに、システムから直接ファイルシステムフィルタドライバを呼び出すことができる。他の実施態様では、隔離スコープに関連するプロセスでは、新しいプロセスを生成するオペレーティングシステムの機能がフックまたは傍受される。新しいプロセスを生成する要求が、こうしたプロセスから受信された場合、親の新しい子プロセスと隔離スコープ間の関連性が記憶される。
【０２２９】
実施態様によっては、スコープまたはサブスコープは、プロセス全体ではなく個々のスレッドに関連付けることができ、その結果、スレッドごとに隔離を行うことが可能である。実施態様によっては、スレッドごとの隔離は、ＳｅｒｖｉｃｅｓおよびＣＯＭ＋サーバに使用し得る。
【０２３０】
実施態様によっては、隔離環境は、追加の機能をアプリケーションストリーミングクライアント５５２に提供するために使用される。これらの実施態様の１つでは、アプリケーションプログラムは、隔離環境内で実行される。これらとは別の実施態様では、検索された複数のアプリケーションファイルは隔離環境内に存在する。これらとはさらに別の実施態様では、ローカルマシン１０上のレジストリの変更は、隔離環境内で行われる。
【０２３１】
一実施態様では、アプリケーションストリーミングクライアント５５２は、隔離環境５５６を含む。実施態様によっては、アプリケーションストリーミングクライアント５５２は、ファイルに対するアプリケーション要求を傍受するファイルシステムフィルタドライバ５６４を含む。これらの実施態様の１つでは、ファイルシステムフィルタドライバ５６４は、既存のファイルを開くためのアプリケーション要求を傍受して、そのファイルが隔離環境５５６内に存在しないと決定する。これらとは別の実施態様では、ファイルシステムフィルタドライバ５６４は、ファイルが隔離環境５５６内に存在しないという決定に応じて、ストリーミングサービス５５４に要求をリダイレクトする。ストリーミングサービス５５４は、複数のアプリケーションファイルからファイルを抽出し、そのファイルを隔離環境５５６内に記憶し得る。次に、ファイルシステムフィルタドライバ５６４は、ファイルの記憶されたコピーでファイル要求に応答し得る。実施態様によっては、ファイルシステムフィルタドライバ５６４は、ストリーミングサービス５５４がファイルまたは複数のアプリケーションファイルを検索しなかったという指示、および隔離環境５５６内にファイルは存在しないという決定に応じて、ファイル要求をファイルサーバ５４０にリダイレクトし得る。実施態様によっては、ストリーミングサービス５５４は、ファイルおよびアプリケーションの記憶または提供を加速するため、以下で説明する加速技術の一部または全部を実行するための加速プログラム６１２０を含み得る。
【０２３２】
実施態様によっては、ファイルシステムフィルタドライバ５６４は、矛盾するかまたは一致しないデータが隔離環境５５６内に表示されるのを防止するため、厳密な隔離規則を使用する。これらの実施態様の１つでは、リソース要求をユーザ隔離環境内で傍受するファイルシステムフィルタドライバ５６４は、要求をアプリケーション隔離環境にリダイレクトし得る。これらとは別の実施態様では、ファイルシステムフィルタドライバ５６４は、システムスコープに対する要求をリダイレクトしない。
【０２３３】
一実施態様では、ストリーミングサービス５５４は、ＩＯＣＴＬコマンドを使用して、フィルタドライバと通信する。別の実施態様では、ファイルサーバ５４０に対する通信は、Ｍｉｃｒｏｓｏｆｔ  ＳＭＢストリーミングプロトコルを使って受信される。
【０２３４】
実施態様によっては、パッケージ機構５３０は、使用可能なアプリケーションとして発行されたファイルタイプのリストをマニフェストファイル内に記憶し、アプリケーション発行ソフトウェアが、この情報を使用できるようにする。これらの実施態様の１つでは、パッケージ機構５３０は、ステージングマシン上の隔離環境へのアプリケーションプログラムのインストールの監視から情報を受信する。これらとは別の実施態様では、パッケージ機構５３０のユーザは、この情報をパッケージ機構５３０に提供する。他の実施態様では、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０内のアプリケーション発行ソフトウェアは、マニフェストファイルを調査して、ａｃｃｅｓｓ  ｓｕｉｔｅコンソール５２０のユーザに対し、要求されたアプリケーションの発行に関連する可能性がある可能なファイルタイプを提示する。ユーザは、特定の発行済みアプリケーションに関連付けるファイルタイプを選択する。ファイルタイプは、アプリケーション一覧作成時点でローカルマシン１０に提示される。
【０２３５】
ローカルマシン１０は、クライアントエージェント５８０を含み得る。クライアントエージェント５６０は、ファイルタイプをアプリケーションプログラムに関連付け、関連性に応じてアプリケーションプログラムを実行する方法を選択するための機能を提供する。一実施態様では、クライアントエージェント５６０は、Ｐｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションである。
【０２３６】
アプリケーションプログラムが実行のために選択される場合、ローカルマシン１０は、アプリケーションプログラムのファイルタイプに関連する実行方法に関して決定を行う。一実施態様では、ローカルマシン１０は、ファイルタイプが、アプリケーションファイルの検索、および隔離環境内における実行のために、アプリケーションストリーミングセッションを要求する実行方法に関連すると決定する。この実施態様では、ローカルマシン１０は、アプリケーションプログラムのローカルバージョンを開始するのではなく、アプリケーションストリーミングクライアント５５２に対する要求をリダイレクトし得る。別の実施態様では、クライアントエージェント５６０が決定を行う。さらに別の実施態様では、クライアントエージェント５６０は、要求をアプリケーションストリーミングクライアント５５２にリダイレクトする。
【０２３７】
一実施態様では、アプリケーションストリーミングクライアント５５２は、アプリケーションプログラムに関連するアクセス情報をリモートマシン３０から要求する。実施態様によっては、アプリケーションストリーミングクライアント５５２は、アクセス情報を含む実行可能なプログラムを受信する。これらの実施態様の１つでは、アプリケーションストリーミングクライアント５５２は、リモートマシン上のアプリケーションプログラムの実行から生成されるアプリケーション出力データを、ローカルマシン１０上に表示することが可能な実行可能プログラムを受信する。これらとは別の実施態様では、アプリケーションストリーミングクライアント５５２は、アプリケーションストリーミングセッション全体で、アプリケーションプログラム検索し、ローカルマシン１０上の隔離環境でアプリケーションプログラムを実行することが可能な実行可能プログラムを受信する。この実施態様では、アプリケーションストリーミングクライアント５５２は、受信した実行可能プログラムを実行し得る。これらとはさらに別の実施態様では、リモートマシン３０は、上記のとおり、アプリケーション解決の実行に応じてローカルマシン１０に提供する実行可能プログラムを選択する。
【０２３８】
次に、図９を参照すると、フロー図は、アプリケーションを実行するための方法で行われるステップの一実施態様を示す。図７のステップ２１４に関連して上記で説明したとおり、ローカルマシン１０は、複数のアプリケーションファイルを受信および実行する。簡潔に説明すると、ローカルマシン１０は、複数のアプリケーションファイルにアクセスし、アプリケーションストリームを受信することが可能な第１クライアントを実行するためのアクセス情報を含むファイルを受信する（ステップ９０２）。ローカルマシン１０は、ファイルに応じて、複数のアプリケーションファイルの識別表示を検索する（ステップ９０４）。ローカルマシン１０は、ファイルに応じて、複数のアプリケーションファイルの実行に必要な少なくとも１つの特性を検索する（ステップ９０６）。ローカルマシン１０は、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する（ステップ９０８）。ローカルマシン１０は、第２クライアントを実行し、第２クライアントは、ローカルマシン１０に少なくとも１つの特性がないという決定に応じて、リモートマシン上で複数のアプリケーションファイルを実行することを要求する。
【０２３９】
図９をより詳細に参照すると、ローカルマシン１０は、複数のアプリケーションファイルにアクセスし、アプリケーションストリームを受信することが可能な第１クライアントを実行するためのアクセス情報を含むファイルを受信する（ステップ９０２）。一実施態様では、ローカルマシン１０は、アプリケーションプログラムを含む複数のアプリケーションファイルのロケーションの識別表示を含むアクセス情報を受信する。別の実施態様では、ローカルマシン１０は、アプリケーションプログラムの実行の要求に応じてファイルを受信する。さらに別の実施態様では、アクセス情報は、複数のアプリケーションファイルが、アプリケーションサーバまたはファイルサーバなどのリモートマシン３０’上に存在するという指示を含む。さらに別の実施態様では、アクセス情報は、アプリケーションストリーミングセッション上のリモートマシン３０から複数のアプリケーションファイルを検索し得る。
【０２４０】
ローカルマシン１０は、ファイルに応じて、複数のアプリケーションファイルの識別表示を検索する（ステップ９０４）。一実施態様では、ローカルマシン１０は、アクセス情報を含むファイルに応じて、複数のアプリケーションファイルが存在するリモートマシンを識別する。別の実施態様では、ローカルマシン１０は、リモートマシン３０から、複数のアプリケーションファイルを識別するファイルを検索する。実施態様によっては、複数のアプリケーションファイルは、アプリケーションプログラムを含む。他の実施態様では、複数のアプリケーションファイルは、複数のアプリケーションプログラムを含む。さらに他の実施態様では、複数のアプリケーションファイルは、単一アプリケーションプログラムの複数のバージョンを含む。
【０２４１】
さらに図１０を参照すると、フロー図は、ファイルサーバ５４０などのリモートマシン３０’上に存在する複数のアプリケーションファイルの一実施態様を示す。図１０では、パッケージと呼ばれる複数のアプリケーションファイルは、１つまたは複数のアプリケーションプログラムの３つの異なるバージョンを含むアプリケーションファイルを含む。
【０２４２】
一実施態様では、１つまたは複数のアプリケーションプログラムの１つのバージョンを含み、パッケージ内に記憶されたアプリケーションファイルの各々のサブセットは、ターゲットと呼ばれる。たとえば、ターゲット１は、アプリケーションプログラムを処理するワード、および表計算プログラムの１つのバージョンであって、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）  ２０００オペレーティングシステムの英語バージョンと互換性のあるバージョンを含む。ターゲット２は、ワード処理アプリケーションプログラムおよび表計算プログラムの１つのバージョンであって、Ｍｉｃｒｏｓｏｆｔ  ＸＰオペレーティングシステムの英語バージョンと互換性のあるバージョンを含む。ターゲット３は、ワード処理アプリケーションプログラムおよび表計算プログラムの１つのバージョンであって、サービスパック３を含むＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）  ２０００オペレーティングシステムの日本語バージョンと互換性のあるバージョンを含む。
【０２４３】
次に、図９を参照すると、実施態様によっては、複数のアプリケーションファイルをホストするリモートマシン３０から検索されたファイルは、複数のアプリケーションファイル内に含まれるパッケージおよびターゲットの説明を含む。他の実施態様では、リモートマシン３０から検索されたファイルは、ローカルマシン１０によって実行を要求されたアプリケーションプログラムを含む複数のアプリケーションファイルを識別する。
【０２４４】
ローカルマシン１０は、ファイルに応じて、複数のアプリケーションファイルの実行に必要な少なくとも１つの特性を検索する（ステップ９０６）。実施態様によっては、ローカルマシン１０は、当該ローカルマシンが特定の特性を含まない限り、アプリケーションプログラムを実行しないことがある。これらの実施態様の１つでは、様々なアプリケーションプログラムは、ローカルマシン１０が、他のアプリケーションプログラムによって必要とされる特性とは異なる特性を含む。これらとは別の実施態様では、ローカルマシン１０は、ローカルマシン１０によって要求されるアプリケーションプログラムを含む複数のアプリケーションファイルの実行に必要な少なくとも１つの特性の識別表示を受信する。
【０２４５】
ローカルマシンは、当該ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する（ステップ９０８）。一実施態様では、ローカルマシン１０は、ローカルマシン１０上のオペレーティングシステムを評価して、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。別の実施態様では、ローカルマシン１０は、ローカルマシン１０上のオペレーティングシステムが使用する言語を識別し、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。さらに別の実施態様では、ローカルマシン１０は、ローカルマシン１０上のオペレーティングシステムのリビジョンレベルを識別し、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。さらに別の実施態様では、ローカルマシン１０は、ローカルマシン１０上に存在するアプリケーションプログラムのアプリケーションバージョンを識別し、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。実施態様によっては、ローカルマシン１０は、ローカルマシン１０がデバイスドライバを含むかどうかを決定して、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。他の実施態様では、ローカルマシン１０は、ローカルマシン１０がオペレーティングシステムを含むかどうかを決定して、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。さらに他の実施態様では、ローカルマシン１０は、ローカルマシン１０がライセンスを含むかどうかを決定して、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。
【０２４６】
ローカルマシン１０は、第２クライアントを実行し、ローカルマシン１０は少なくとも１つの特性を持たないという決定に応じて、第２クライアントは、リモートマシン３０上の複数のアプリケーションファイルの実行を要求する（ステップ９１０）。一実施態様では、ローカルマシン１０は、ローカルマシン１０が少なくとも１つの特性を持たないと決定した場合、ローカルマシン１０は、アプリケーションストリームを受信することが可能な第１クライアントを実行しない。別の実施態様では、ポリシーは、ローカルマシン１０が少なくとも１つの特性を持たない場合、ローカルマシン１０が、アプリケーションストリーム上の複数のアプリケーションファイルを受信することを禁止する。実施態様によっては、ローカルマシン１０は、ローカルマシン１０が少なくとも１つの特性を含まないと決定する。これらの実施態様の１つでは、ローカルマシン１０は第１クライアントを実行し、第１クライアントは、ローカルマシン上で実行されるリモートマシン３０からの複数のアプリケーションファイルを含むアプリケーションストリームを受信する。
【０２４７】
実施態様によっては、ローカルマシン１０は、リモートマシン上の複数のアプリケーションファイルの実行を要求する。ローカルマシン１０が少なくとも１つの特性を持たないと決定すると、第２クライアントを実行する。これらの実施態様の１つでは、第２クライアントは、複数のアプリケーションファイルをホストするリモートマシン３０に要求を伝送する。これらとは別の実施態様では、リモートマシン３０は、アプリケーションプログラムを含む複数のアプリケーションファイルを実行し、アプリケーション出力データを生成する。これらとはさらに別の実施態様では、第２クライアントは、リモートマシン上の複数のアプリケーションファイルの実行によって生成されるアプリケーション出力データを受信する。実施態様によっては、第２クライアントは、独立計算アーキテクチャ提示レベルプロトコル、Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｗｉｎｄｏｗｓ（登録商標）  提示レベルプロトコル、またはＸ−Ｗｉｎｄｏｗｓ（登録商標）提示レベルプロトコルを介してアプリケーション出力データを受信する。これらとはさらに別の実施態様では、第２クライアントは、アプリケーション出力をローカルマシン１０上に表示する。
【０２４８】
実施態様によっては、第２クライアントは、複数のアプリケーションファイルをホストしないリモートマシン３０に要求を伝送する。これらの実施態様の１つでは、リモートマシン３０は、複数のアプリケーションファイルをホストする第２リモートマシン３０に、複数のアプリケーションファイルを要求し得る。これらとは別の実施態様では、リモートマシン３０は、アプリケーションストリーミングセッション全体で、複数のアプリケーションファイルを第２リモートマシン３０から受信し得る。これらとはさらに別の実施態様では、リモートマシン３０は、受信した複数のアプリケーションファイルを隔離環境に記憶し、アプリケーションプログラムを隔離環境内で実行する。これらとはさらに別の実施態様では、リモートマシンは、生成されたアプリケーション出力データを、ローカルマシン上の第２クライアントに伝送する。
【０２４９】
再び図５を参照すると、一実施態様では、アプリケーションストリームを受信可能な第１クライアントは、アプリケーションストリーミングクライアント５５２である。アプリケーションストリーミングクライアント５５２は、ファイルを受信し、ファイルに応じて、複数のアプリケーションファイルの識別表示、および複数のアプリケーションファイルの実行に必要な少なくとも１つの特性を検索し、ローカルマシン１０が少なくとも１つの特性を含むかどうかを決定する。別の実施態様では、第２クライアントは、クライアントエージェント５６０である。実施態様によっては、クライアントエージェント５６０は、ローカルマシン１０が少なくとも１つの特性を持たないという、アプリケーションストリーミングクライアント５５２による決定に応じて、ファイルをアプリケーションストリーミングクライアント５５２から受信する。
【０２５０】
実施態様によっては、ローカルマシン１０上で実行されるアプリケーション５６６は、Ｗｉｎ３２  ＦｉｎｄＦｉｒｓｔＦｉｌｅ（  ）およびＦｉｎｄＮｅｘｔＦｉｌｅ（  ）ＡＰＩコールを使用して、アプリケーション５６６に関連するファイルの一覧を作成する。これらの実施態様の１つでは、複数のアプリケーションファイルは、アプリケーション５６６を含む。これらとは別の実施態様では、複数のアプリケーションファイル内のすべてのファイルが、ローカルマシン１０上に存在することはない。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、アーカイブ対象ファイル内の複数のアプリケーションファイルを検索したが、複数のアプリケーションファイルのサブセットのみを抽出した。これらとはさらに別の実施態様では、ストリーミングサービス５５４、およびファイルシステムフィルタドライバ５６４は、要求されたファイルがローカルマシン１０上に存在しない場合でも、一覧要求を満たすための機能を提供する。
【０２５１】
一実施態様では、この機能は、一覧要求を傍受し、複数のアプリケーションファイル内のすべてのファイルがローカルマシン１０上に存在するかのように、データを提供することによって提供される。別の実施態様では、この機能は、ファイルシステムフィルタドライバ５６４が、ＩＲＰ＿ＭＪ＿ディレクトリ＿ＣＯＮＴＲＯＬ  ＩＯＣＴＬなどのＩＯＣＴＬコマンドとして伝送される一覧要求を傍受することによって提供される。ファイルシステムフィルタドライバ５６４は、コールを傍受すると、要求をストリーミングサービス５５４にリダイレクトする。一実施態様では、ファイルシステムフィルタドライバ５６４は、要求をストリーミングサービス５５４にリダイレクトする前に、要求された一覧が、ローカルマシン１０上の隔離環境内に存在すると決定する。別の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイル内のファイルであって、複数のアプリケーションファイルに関連するディレクトリ構造の一覧を含むファイルを使用して、要求を履行する。さらに別の実施態様では、ストリーミングサービス５５４は、一覧要求を履行するために、ファイルシステムフィルタドライバ５６４に対する要求に応答する。
【０２５２】
次に、図１１を参照すると、フロー図は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するための方法で行われるステップの一実施態様を示す。簡潔に説明すると、（ｉ）リモートマシンによって記憶されたアプリケーションプログラムを表すディレクトリ構造、（ｉｉ）記憶されたアプリケーションプログラムを含む各々のファイルに関連するメタデータは、リモートマシンから受信される（ステップ１１０２）。ディレクトリ構造およびメタデータが記憶される（ステップ１１０４）。ディレクトリ構造内の特定のファイルに関連するメタデータにアクセスするための少なくとも１つの要求が受信される（ステップ１１０６）。少なくとも１つの要求は、記憶されたメタデータを使用して応答される（ステップ１１０８）。
【０２５３】
図１１をより詳細に参照すると、リモートマシンによって記憶されたアプリケーションプログラムを表すディレクトリ構造、および記憶されたアプリケーションプログラムを含む各々のファイルに関連するメタデータは、リモートマシンから受信される（ステップ１１０２）。一実施態様では、ストリーミングサービス５５４は、ディレクトリ構造およびメタデータを受信する。別の実施態様では、ストリーミングサービス５５４は、ストリーミングサービス５５４が、記憶されたアプリケーションプログラムを含む複数のアプリケーションファイルを検索する時に、ディレクトリ構造およびメタデータを受信する。さらに別の実施態様では、ディレクトリ構造およびメタデータは、複数のアプリケーションファイルのファイル内に記憶される。
【０２５４】
一実施態様では、各々のファイルに関連するメタデータは、少なくとも１つのファイルの別名を含む。別の実施態様では、各々のファイルに関連するメタデータは、少なくとも１つのファイルに１つの省略名を含み、この名前は、８つの文字、１つのドット、および３桁の拡張子を有する。さらに別の実施態様では、各々のファイルに関連するメタデータは、少なくとも１つのファイルの別名と、少なくとも１つのファイルの省略名との間のマッピングを含む。実施態様によっては、複数のアプリケーションファイル内のファイルは、別のファイル名を有する。これらの実施態様の１つでは、ファイルが、ローカルマシンに対するストリーミングサービス５５４によって検索される場合、ファイルは、ファイルの別名と少なくとも１つのファイルの省略名との間のマッピングに応じて、省略名に関連付けられる。
【０２５５】
ディレクトリ構造およびメタデータが記憶される（ステップ１１０４）。一実施態様では、ディレクトリ構造およびメタデータは、隔離環境５５６内に記憶される。別の実施態様では、ディレクトリ構造およびメタデータは、キャッシュメモリ要素内に記憶される。さらに別の実施態様では、リモートマシンによって記憶されたアプリケーションプログラムを表すディレクトリ構造は、ローカルマシンを実行するアプリケーションプログラムを表すディレクトリ構造の一覧を生成するために使用される。
【０２５６】
ディレクトリ構造内の特定のファイルに関連するメタデータにアクセスするための少なくとも１つの要求が受信される（ステップ１１０６）。一実施態様では、この要求は、ファイル一覧の要求である。別の実施態様では、要求は、記憶されたアプリケーションプログラムを含むファイルのコピーが、ローカルに存在するかどうかを決定する要求である。
【０２５７】
一実施態様では、要求は、ローカルマシン上の隔離環境内で実行されるアプリケーション５６６によって行われる。別の実施態様では、要求は、アプリケーションストリーミングクライアント５５２よって行われる。さらに別の実施態様では、要求は、アプリケーション５６６のために行われる。
【０２５８】
一実施態様では、要求は、ファイルシステムフィルタドライバ５６４によって傍受される。別の実施態様では、要求は、ファイルシステムフィルタドライバ５６４によって、アプリケーションストリーミングクライアント５５２に回送される。さらに別の実施態様では、要求は、ファイルシステムフィルタドライバ５６４によって、ストリーミングサービス５５４に回送される。
【０２５９】
実施態様によっては、要求は、ディレクトリの一覧を作成するオペレーティングシステムの１つまたは複数の機能を置き換える機能によってフックされる。別の実施態様では、ライブラリに動的にリンクするフッキングが、要求を傍受するために使用される。フッキング機能は、ユーザモードまたはカーネルモードで実行し得る。フッキング機能がユーザモードで実行される実施態様では、フッキング機能は、プロセスが生成される時に、当該プロセスのアドレス空間内にロードすることができる。フッキング機能が、カーネルモードで実行される実施態様では、フッキング機能は、ファイル動作の要求をディスパッチする際に使用されるオペレーティングシステムリソースに関連付けることができる。個々のオペレーティングシステム機能が、ファイルオペレーションの各々のタイプごとに提供される実施態様では、各々の機能は、別個にフックすることができる。あるいは、傍受によって、いくつかのタイプのファイル動作に対するコールを生成または開放する単一フッキング機能を提供することができる。
【０２６０】
少なくとも１つの要求は、記憶されたメタデータを使用して応答される（ステップ１１０８）。一実施態様では、ファイルシステムフィルタドライバ５６４が要求に応答する。別の実施態様では、アプリケーションストリーミングクライアント５５２が要求に応答する。さらに別の実施態様では、ストリーミングサービス５５４が要求に応答する。一実施態様では、記憶されたメタデータは、少なくとも１つの要求に応答するためにアクセスされる。別の実施態様では、要求は、ファイルのリモートコピーがローカルに存在するという虚偽の指示で応答される。
【０２６１】
一実施態様では、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのＦｉｎｄＦｉｒｓｔ動作が、受信されたメタデータに応答して履行される。別の実施態様では、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムのＦｉｎｄＮｅｘｔ動作が、受信されたメタデータに応じて履行される。さらに別の実施態様では、ディレクトリ構造内のルートノードが、受信されたメタデータに応じて履行される。実施態様によっては、ＷＩＮ３２＿ＦＩＮＤ＿ＤＡＴＡ  ＡＰＩなどのアプリケーション層ＡＰＩが、操作に応答するために使用される。他の実施態様では、ＦＩＬＥ＿ＢＯＴＨ＿ＤＩＲ＿ＩＮＦＯＲＭＡＴＩＯＮなどのカーネル層ＡＰＩが、操作に応答するために使用される。
【０２６２】
一実施態様では、メタデータは、ディレクトリ構造内のノードに関連するアクセス時間を識別するための動作を履行する。別の実施態様では、メタデータは、ディレクトリ構造内のノードに関連する修正時間を識別するための動作を履行する。さらに別の実施態様では、メタデータは、ディレクトリ構造内の修正されたノードを識別するための動作を履行する。
【０２６３】
次に、図１２を参照すると、ブロック図は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するシステムであって、ストリーミングサービス５５４と、ファイルシステムフィルタドライバ５６４と、ディレクトリ構造５７０と、複数のアプリケーションファイル５７２と、メタデータ５７４と、キャッシュメモリ要素５７６とを備えるシステムの一実施態様を示す。簡潔に説明すると、ディレクトリ構造５７０は、少なくとも１つのアプリケーションプログラムに関連する複数のファイルを識別する。メタデータ５７４は、複数のファイルの少なくとも１つに関連付けられ、複数のファイルの少なくとも１つは、リモートマシン上に存在する。一実施態様では、ディレクトリ構造５７０は、メタデータ５７４を含む。キャッシュメモリ要素５７６は、ディレクトリ構造５７０を記憶する。ファイルシステムフィルタドライバ５６４は、リモートに記憶されたファイルの少なくとも１つに関連するメタデータにアクセスする要求を傍受し、キャッシュメモリ要素にアクセスし、記憶されたディレクトリ構造を使用して、少なくとも１つの要求に応答する。
【０２６４】
実施態様によっては、ストリーミングサービス５５４は、ディレクトリ構造５７０およびメタデータ５７４を受信する。これらの実施態様の１つでは、ディレクトリ構造５７０は、アプリケーションプログラムに関連する複数のアプリケーションファイル５７２を表し、複数のアプリケーションファイル５７２は、リモートマシン３０などのリモートマシンに存在する。これらとは別の実施態様では、メタデータ５７４は、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムＦｉｎｄＦｉｒｓｔ要求に応答するための情報を含む。これらとはさらに別の実施態様では、メタデータ５７４は、Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステムＦｉｎｄＮｅｘｔ要求に応答するための情報を含む。これらとはさらに別の実施態様では、メタデータ５７４は、ディレクトリ構造内のルートノードの識別表示に対する要求に応答するための情報を含む。これらとは別の実施態様では、メタデータ５７４は、ディレクトリ構造内のノードの識別表示に対する要求に応答するための情報を含む。実施態様によっては、ＷＩＮ３２＿ＦＩＮＤ＿ＤＡＴＡ  ＡＰＩなどのアプリケーション層ＡＰＩが、操作に応答するために使用される。他の実施態様では、ＦＩＬＥ＿ＢＯＴＨ＿ＤＩＲ＿ＩＮＦＯＲＭＡＴＩＯＮなどのカーネル層ＡＰＩが、操作に応答するために使用される。
【０２６５】
実施態様によっては、ファイルに関する少量のメタデータ５７４は、たとえば、メタデータ識別子が、特定のメタデータ状態に一意に関連する文字列であるメタデータ識別子を使って、仮想名に接尾辞を付けることによって、リテラルファイル名内直接記憶することができる。メタデータ識別子は、１個または数個のビットのメタデータを指示または符号化することができる。仮想ファイル名によるファイルに対するアクセス要求は、メタデータ識別子の存在に基づくリテラルファイル名の可能な変形を確認し、リテラル名で応答するために、ファイル自体の名前を検索する要求がフックまたは傍受される。他の実施態様では、ファイルの１つまたは複数の別名は、仮想ファイル名およびメタデータ識別子から形成することができ、ファイルシステムによって提供されるハードリンクまたはソフトリンク機能を使用して形成することができる。これらのリンクの存在は、リンクの名前を使ってファイルに対するアクセス要求が与えられる場合、ファイルが見つからないことを指示することによって、隔離環境によりアプリケーションから隠すことができる。特定のリンクの存在または不在は、各々のメタデータ識別子の１ビットのメタデータを指示することができ、数ビットのメタデータを指示するために、複数の状態を取ることが可能なメタデータ識別子とのリンクが存在する場合がある。さらに他の実施態様では、ファイルシステムが、別のファイルストリームをサポートする場合、別のファイルストリームは、メタデータを具現するために形成される場合があり、ストリームのサイズは数ビットのメタデータを示す。さらに他の実施態様では、ファイルシステムは、ファイルシステム内の各々のファイルのある第三者のメタデータを記憶する能力を直接提供することができる。さらに他の実施態様では、別個のサブスコープは、削除されたファイルを記録するために使用することができ、当該サブスコープ内のファイル（プレースホルダーとしてマークされていない）の存在は、ファイルが削除されたことを意味すると解釈される。
【０２６６】
一実施態様では、ユーザ隔離環境、アプリケーション隔離環境、およびシステムスコープ内のデータは、アプリケーションを表すディレクトリ構造のローカルな一覧を形成するために結合される。別の実施態様では、ストリーミングサービス５５４は、メタデータ５７４およびディレクトリ構造５７０にアクセスし、アプリケーション隔離環境にポピュレートする。さらに別の実施態様では、ファイルシステムフィルタドライバ５６４は、ディレクトリ構造のローカルな一覧を生成する。さらに別の実施態様では、ディレクトリ構造のローカルな一覧は、複数のアプリケーションファイル５７２内の少なくとも１つのファイルを識別し、当該少なくとも１つのファイルはリモートマシン上に存在し、ローカルマシン上には存在しない。実施態様によっては、ディレクトリ構造のローカルな一覧は、キャッシュメモリ要素５７６上に記憶される。他の実施態様では、ストリーミングサービス５５４はアプリケーション隔離環境、およびディレクトリ構造のローカルな一覧を生成する。
【０２６７】
一実施態様では、ファイルシステムフィルタドライバ５６４は、ディレクトリ構造のローカルな一覧にアクセスするために、システムに伝送される要求を傍受する。別の実施態様では、ファイルシステムフィルタドライバ５６４は、要求を傍受した後、ローカルな一覧を生成する。さらに別の実施態様では、ファイルシステムフィルタドライバ５６４は、ローカルな一覧の要求をユーザ隔離環境にリダイレクトする。さらに別の実施態様では、ファイルシステムフィルタドライバ５６４は、ローカルな一覧の要求をアプリケーション隔離環境にリダイレクトする。
【０２６８】
実施態様によっては、ファイルシステムフィルタドライバ５６４は、ディレクトリのローカルな一覧内のファイル識別子に対するアクセス要求を傍受し、ファイルはリモートマシン上に存在する。これらの実施態様の１つでは、ファイルシステムフィルタドライバ５６４は、図１３に関連して以下でより詳細に説明するように、ストリーミングサービス５５４によるファイルの検索を要求する。
【０２６９】
隔離環境内で実行されるアプリケーションはファイルに要求し、フィルタドライバは、これらの要求を傍受する。この要求がファイルを開くことである場合、フィルタドライバは、先ず、要求を隔離環境にリダイレクトし、要求が隔離環境によって履行され得るかどうかを決定する。コールが成功した場合、フィルタドライバは、隔離環境内に位置するファイルのインスタンスで要求に応答するであろう。
【０２７０】
しかし、要求されたファイルが隔離環境内に存在しない場合、フィルタドライバは、複数のアプリケーションファイルからファイルを検索するために、要求をストリーミングサービス５５４に送信し、要求が完了するまで遮断し、次に、再び最初の開放を試みる。実施態様によっては、フィルタドライバからの要求を受信後、複数のアプリケーションファイルからのファイルを検索するためのストリーミングサービス５５４の機能は、「オンデマンドキャッシング」と呼ばれる。
【０２７１】
次に、図１３を参照すると、フロー図は、ローカルに実行されるアプリケーションプログラムに関連するディレクトリ構造内のリモートファイルにアクセスする方法で行われるステップの一実施態様を示す。簡潔に説明すると、ファイルにアクセスするためのアプリケーションによる要求が傍受される（ステップ１３０２）。要求は、第１隔離環境にリダイレクトされる（ステップ１３０４）。要求されたファイルは、第１隔離環境内に存在しないという決定が行われる（ステップ１３０６）。この要求は、ファイルが、リモートマシン上に存在する複数のアプリケーションファイルに関連するディレクトリ構造の一覧内で識別されないという決定に応じて、第２隔離環境にリダイレクトされる（ステップ１３０８）。要求されたファイルは、第２隔離環境はファイルを含まず、ファイルは一覧内で識別されるという決定に応じて、リモートマシンから検索される（ステップ１３１０）。
【０２７２】
図１３をより詳細に参照すると、ファイルにアクセスするためのアプリケーションによる要求が傍受される（ステップ１３０２）。一実施態様では、この要求は、ファイルシステムのフィルタドライバによって傍受される。別の実施態様では、ファイルシステムフィルタドライバは、ファイルにアクセスするためのすべての要求を傍受する。さらに別の実施態様では、アプリケーションストリーミングクライアント５５２は、この要求を傍受する。実施態様によっては、実行可能ファイルにアクセスするためのアプリケーションによる要求が傍受される。他の実施態様では、ファイルにアクセスするためのアプリケーションによる要求、ローカルマシン１０上で実行されるアプリケーションの一部が傍受される。
【０２７３】
この要求は、第１隔離環境にリダイレクトされる（ステップ１３０４）。一実施態様では、このアプリケーションは、第１隔離環境内で実行される。一実施態様では、このアプリケーションは、ワード処理プログラムまたは表計算プログラムなどのアプリケーションプログラムである。別の実施態様では、このアプリケーションは、アプリケーションストリーミングクライアント５５２である。さらに別の実施態様では、このアプリケーションは、アプリケーションストリーミングクライアント５５２内の構成要素であり、ローカルマシン１０のユーザのためにアプリケーションプログラムを開始しようとする。別の実施態様では、ファイルシステムフィルタドライバは、この要求を第１隔離環境にリダイレクトする。
【０２７４】
要求されたファイルがファイルが第１隔離環境内に存在しないという決定が行われる（ステップ１３０６）。一実施態様では、ファイルシステムフィルタドライバは、要求されたファイルは第１隔離環境内に存在しないという指示を受信する。
【０２７５】
要求は、リモートマシン上に存在する複数のアプリケーションファイルに関連するディレクトリ構造の一覧内で識別される（ステップ１３０８）。一実施態様では、ディレクトリ構造の一覧は、第１アプリケーションの実行に関連してアクセス情報とともに受信される。別の実施態様では、この一覧は、第２アプリケーションを含む複数のアプリケーションファイルを識別する。この実施態様では、第１アプリケーションは、第２アプリケーションのローカルコピーである。
【０２７６】
要求されたファイルは、第２隔離環境はファイルを含まず、ファイルは一覧内で識別されるという決定に応じて、リモートマシンから検索される（ステップ１３１０）。一実施態様では、要求されたファイルは、第２リモートマシンから検索される。別の実施態様では、要求されたファイルは、ファイルサーバから検索される。実施態様によっては、ディレクトリ構造の一覧は、ローカルマシン上に存在する複数のアプリケーションファイルを識別する。他の実施態様では、複数のアプリケーションファイルがローカルマシン上に存在することを指示する。これらの実施態様の１つでは、アプリケーション要求が、複数のアプリケーションファイル内のファイルであって、ディレクトリ構造の一覧が、ローカルマシン上に存在することを指示したファイルにアクセスする場合、このファイルは、アクセス要求の傍受後にファイルサーバから取得される。これらとは別の実施態様では、ファイルサーバは、要求されたファイルをローカルマシンにストリーミングする。これらとはさらに別の実施態様では、要求されたファイルの受信後、要求されたファイルは第２隔離環境内に記憶される。さらに他の実施態様では、アプリケーションが、複数のアプリケーションファイル内のファイルであって、ディレクトリ構造の一覧が、ローカルマシン上に存在することを指示するファイルにアクセスすることを要求する場合、ファイルのコピーが、ローカルキャッシュからアプリケーションに提供される。
【０２７７】
実施態様によっては、要求されたファイルは暗号化される。他の実施態様では、要求されたファイルは、暗号化形式で記憶される。さらに他の実施態様では、ファイルを要求するアプリケーションは、アプリケーションが、要求されたファイルにアクセスする承認を持たない場合、要求されたファイルを解読することを妨げられる場合がある。
【０２７８】
一実施態様では、ディレクトリ構造の一覧はファイルを識別しないという決定が行われる。この実施態様では、ファイルにアクセスする要求は、第１隔離環境外、および第２隔離環境外の環境にリダイレクトすることができる。
【０２７９】
実施態様によっては、ファイルにアクセスするための第２要求が傍受される。これらの実施態様の１つでは、ファイルにアクセスする要求は、第２アプリケーションによって行われる。これらとは別の実施態様では、第２アプリケーションは、第３隔離環境内で実行される。これらとはさらに別の実施態様では、要求は、ファイルが一覧に記載されてなく、第２隔離環境がファイルを含むという決定に応じて、第２隔離環境にリダイレクトされる。ローカルマシンが、ファイルをファイルサーバから受信後、第２隔離環境内のファイルを記憶したという決定が行われ得る。さらに他の実施態様では、ファイルは第３隔離環境内に記憶される。
【０２８０】
次に、図１４を参照すると、ブロック図は、アプリケーションに関連するディレクトリ構造のファイルにアクセスするシステムの一実施態様をを示す。簡潔に説明すると、ローカルマシン１０は、アプリケーションストリーミングクライアント５５２、ストリーミングサービス５５４、隔離環境５５６、ファイルシステムフィルタドライバ５６４、および第１アプリケーション５６６を含む。ローカルマシン１０は、ファイルサーバ５４０、リモートマシン３０、ウェブインターフェース５５８、第２アプリケーション５６６’と相互作用する。
【０２８１】
ローカルマシン１０は、第１アプリケーション５６６を実行するために、アプリケーションストリーミングクライアント５５２を初期化する。一実施態様では、アプリケーションストリーミングクライアント５５２は、第１アプリケーション５６６を検索および実行するために、ストリーミングサービス５５４を初期化する。実施態様によっては、複数のアプリケーションファイルは、第１アプリケーション５６６を含む。これらの実施態様の１つでは、ストリーミングサービス５５４は、複数のアプリケーションファイルを検索し、複数のアプリケーションファイルを隔離環境５６６内に記憶する。これらとは別の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルが存在するが、複数のアプリケーションファイルの検索は行わないリモートマシンのロケーションを識別する。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイル内のファイルのサブセットを検索する。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルを含むアーカイブファイルを検索する。
【０２８２】
一実施態様では、第１アプリケーション５６６は、リモートマシン３０上に存在する第２アプリケーション５６６’のローカルコピーを含む。別の実施態様では、複数のアプリケーションファイルはリモートマシン３０上に存在し、リモートマシン３０上に存在する第２アプリケーション５６６’を含む。さらに別の実施態様では、第２アプリケーション５６６’を実行するために、ローカルマシン１０は、複数のアプリケーションファイルを検索し、ローカルマシン上に第１アプリケーション５６６を作成し、第１アプリケーション５６６を実行する。実施態様によっては、アプリケーション５６６および５６６’は、ワード処理アプリケーション、表計算アプリケーション、または提示アプリケーションなどのユーザアプリケーションである。
【０２８３】
実施態様によっては、複数のアプリケーションファイルは、リモートマシン３０上の複数のアプリケーションファイルに関連するディレクトリ構造を識別するファイルを含む。これらの実施態様の１つでは、ファイルは、複数のアプリケーションファイル内の各々のアプリケーションファイルに関するメタデータを含む。これらとは別の実施態様では、ストリーミングサービス５５４は、図１２に関連して上記で説明したように、メタデータをファイルから検索して、複数のアプリケーションファイルに関連するディレクトリ構造の一覧を生成する。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、第２アプリケーション５６６’を含む複数のアプリケーションファイルに関連するディレクトリ構造の一覧を記憶する。実施態様によっては、ストリーミングサービス５５４は、第２隔離環境内の一覧を記憶する。
【０２８４】
一実施態様では、ストリーミングサービス５５４は、第１アプリケーション５６６に関連する初期実行可能ファイルを検索する。別の実施態様では、ストリーミングサービス５５４は、初期実行可能ファイルの検索後、ローカルマシン１０上の第１アプリケーション５６６を実行する。さらに別の実施態様では、第１アプリケーション５６６は、ファイルは第１アプリケーション５６６の連続的な実行を必要とするため、複数のアプリケーションファイル内の他のファイルにアクセスすることを要求する。実施態様によっては、第１アプリケーション５６６は、隔離環境５５６内で実行される。
【０２８５】
ファイルシステムフィルタドライバ５６４は、複数のアプリケーションファイル内のファイルにアクセスするため、隔離環境５５６内で実行される第１アプリケーション５６６による要求を傍受する。ファイルシステムフィルタドライバ５６４は、この要求を隔離環境５５６にリダイレクトする。要求されたファイルが隔離環境５５６内に存在する場合、要求されたファイルに対するアクセスは、第１アプリケーション５６６に提供される。
【０２８６】
要求されたファイルが、隔離環境５５６内に存在しない場合、ファイルシステムフィルタドライバ５６４は、要求を第２隔離環境にリダイレクトする。一実施態様では、第２隔離環境は、一実施態様では、第２隔離環境は、ストリーミングサービス５５４によって生成されるとともに、第２アプリケーション５６６’を含む複数のアプリケーションファイルに関連するディレクトリ構造の一覧を含む。別の実施態様では、要求されたファイルは、ディレクトリ構造の一覧内で識別されるという決定が行われる。
【０２８７】
実施態様によっては、ストリーミングサービス５５４は、セマフォを隔離環境５５６に提供する。これらの実施態様の１つでは、ファイルシステムフィルタドライバ５６４は、セマフォを使用して、複数のアプリケーションファイル内のファイルにアクセスする必要があることをストリーミングサービス５５４に指示する。他の実施態様では、ファイルシステムフィルタドライバ５６４は、スレッドを使用して、ファイルにアクセスする必要があることをストリーミングサービス５５４に指示する。
【０２８８】
ファイルシステムフィルタドライバ５６４から通知を受信後、ストリーミングサービス５５４は、要求されたファイルを複数のアプリケーションファイルから検索する。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、要求されたファイルを第２アプリケーション隔離環境内に記憶する。一実施態様では、ファイルに対するアクセス要求は、複数のアプリケーションファイルから検索されるファイルのインスタンスとともに履行され、第２隔離環境に記憶される。別の実施態様では、要求されたファイルは、第１隔離環境にも記憶される。
【０２８９】
実施態様によっては、第２隔離環境はファイルを含まず、ファイルは一覧内で識別されるという決定が行われる。これらの実施態様の１つでは、ファイルは、第２アプリケーション５６６’を含む複数のアプリケーションファイルに関連するディレクトリ構造の一覧内で識別され、このファイルは、複数のアプリケーションファイル内のファイルである。これらとは別の実施態様では、ストリーミングサービス５５４は、ファイルをリモートマシンから検索しなかった。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、要求されたファイルを含む複数のアプリケーションファイルを検索しなかった。これらとはさらに別の実施態様では、ストリーミングサービス５５４は、アーカイブ対象ファイル内の複数のアプリケーションファイルを検索したが、要求されたファイルをアーカイブファイルから検索しなかった。
【０２９０】
一実施態様では、ストリーミングサービス５５４は、ファイルシステムのフィルタドライバと通信する送受信機を備える。別の実施態様では、送受信機は、リダイレクトされた要求をファイルシステムのフィルタドライバから受信する。さらに別の実施態様では、送受信機は、ファイルの要求を、要求されたファイルをホストするリモートマシンに回送する。一実施態様では、リモートマシンはファイルサーバ５４０である。別の実施態様では、要求は、要求をファイルサーバ５４０に経路指定するリモートマシン３０に回送される。実施態様によっては、ファイルサーバ５４０は、要求されたファイルをローカルマシン１０上の送受信機にストリーミングする。他の実施態様では、リモートマシン３０は、要求されたファイルをローカルマシン１０上の送受信機にストリーミングする。さらに他の実施態様では、送受信機は、要求されたファイルをファイルサーバ５４０から受信後、受信したファイルを第２隔離環境内に記憶する。
【０２９１】
一実施態様では、ファイルシステムフィルタドライバ５６４は、第３隔離環境において、ローカルマシン１０上で実行される第３アプリケーション５６６’’が行うファイルに対する第２アクセス要求を傍受する。別の実施態様では、ファイルシステムフィルタドライバ５６４は、ファイルに対するアクセス要求を第２隔離環境にリダイレクトする。さらに別の実施態様では、ファイルシステムフィルタドライバ５６４は、ストリーミングサービス５５４が、第３アプリケーション５６６’’によるアクセス要求の傍受の前に、受信したファイルを第２隔離環境に記憶したと決定する。
【０２９２】
実施態様によっては、初期化の後、ストリーミングサービス５５４は、アプリケーションプログラムの実行前に、キャッシュを隔離環境内にポピュレートし得る。これらの実施態様の１つでは、ストリーミングサービス５５４は、レジストリファイルを隔離環境内にインストールする。これらとは別の実施態様では、ストリーミングサービス５５４は、ファイルの長い名前と短いファイル名との間のマッピングを記憶する。
【０２９３】
一実施態様では、ローカルマシン上の空間を節約するために、キャッシュのサイズは制限することができる。実施態様によっては、キャッシュが、その限界に近づくと、キャッシュ内の最も古いファイルは、新しいファイルに場所を空けるために自動的にパージされる。これらの実施態様の１つでは、ファイルの年齢は、オペレーティングシステムが維持するタイムスタンプにより決定され、これは、「最終アクセス」タイムスタンプの時刻を指示する。ファイルの年齢のほか、ファイルタイプが考慮されることがあり−−２進実行可能ファイル（．ＥＸＥ、．ＤＬＬなど）は、他のタイプの類似の年齢のファイルより長く維持され得る。
【０２９４】
初期化後、ストリーミングサービス５５４は、現在キャッシュ内にあるファイルを一覧にし、キャッシュの全体のサイズを決定する。ファイルが、隔離環境５５６またはストリーミングサービス５５４によってキャッシュに追加された後、ストリーミングサービス５５４は、新しいファイルのキャッシュシステムに、新しいファイルのロケーションおよびサイズを通知する機能を呼び出す。新たにキャッシュされた各々のファイルのサイズは、現在のキャッシュのサイズの現在高に追加される。この新しい合計は、次に、キャッシュサイズの制限と比較され、限界を超えている場合、コードはスレッドを送信して、キャッシュを古くさせる。常に、このスレッドの１つのインスタンスのみを、ある特定の時に実行することができる。
【０２９５】
スレッドは、現在キャッシュにあるすべてのファイルのリストを生成し、このリストを最終アクセスタイムスタンプ別に分類し、次に、リストを下方にたどり始め、スレッドの終了基準を満たすのに十分なディスク空間が解放されるまでファイルを削除する。終了基準は、限界未満のレベルまでのキャッシュサイズの減少に基づき、このレベルは、限界の割合として決められる（デフォルト値は１０％）。限界を超えるのを防止するために必要である以上に削除すると、新しいファイルが追加されるごとに、キャッシュがスラッシングするのを防止する。
【０２９６】
実施態様によっては、ストリーミングサービス５５４は、アプリケーションプログラムを含む複数のアプリケーションファイル内のすべてのファイルを、圧縮ファイル形式でローカルマシン１０にコピーする能力を提供する。この能力は、「予備キャッシング」と呼ぶことができる。これらの実施態様の１つでは、アプリケーションプログラムが続いて実行される場合、すべてのパッケージ要求は、ネットワークを横断するのではなく、ローカルコピーに行く。これらの実施態様は、ローカルマシン１０のユーザが、ユーザがネットワークにアクセスできない時に、アプリケーションプログラムを実行することを可能にし得る。
【０２９７】
リモートマシン３０は、ローカルマシン１０によるアプリケーションの使用を監視する機能を含む。リモートマシン３０は、たとえば、アプリケーションの実行または終了時に、ローカルマシン１０によって使用される各々のアプリケーションの状態を監視し得る。一実施態様では、リモートマシン３０は、ローカルマシン１０が実行するアプリケーションの状態に関するメッセージを伝送するように、ローカルマシン１０に要求する。別の実施態様では、ローカルマシン１０が、リモートマシン３０が存在するネットワークに接続する時、ローカルマシン１０は、ローカルマシン１０がネットワークに接続したことを指示するメッセージを伝送する。
【０２９８】
一実施態様では、ローカルマシン１０は、ローカルマシン１０がリモートマシン３０と相互作用し、１つまたは複数のアプリケーションを実行する時、セッションを有すると言われる。別の実施態様では、リモートマシン３０は、あるセッションの期間中、リモートマシンから受信するアプリケーションの実行を承認するライセンスを維持するように、ローカルマシンに要求する。さらに別の実施態様では、セッションは、リモートマシンに割り当てられる一意のセッション識別子を有する。
【０２９９】
一実施態様では、ローカルマシン１０は、メッセージをリモートマシン３０に伝送し、ローカルマシン１０は、リモートマシン３０と相互作用してアプリケーションプログラムを受信し、実行する。別の実施態様では、ローカルマシン１０は、リモートマシン３０から、セッション管理サーバ５６２などの第２リモートマシンの識別子を受信し、第２リモートマシンは、ローカルマシン１０上のセッションに関連するすべての伝送のメッセージを受信し、記憶する。
【０３００】
実施態様によっては、セッション管理サーバ５６２は、ライセンス管理およびセッション監視サービスを提供するリモートマシン３０である。これらの実施態様の１つでは、セッション管理サーバ５６２は、これらのサービスを提供するサーバ管理サブシステム５０８を含む。
【０３０１】
一実施態様では、ローカルマシン１０は、メッセージを直接セッション管理サーバ５６２に伝送する。別の実施態様では、ローカルマシン１０は、別の実施態様では、ローカルマシン１０は、メッセージをリモートマシン３０に伝送し、リモートマシン３０は、このメッセージを、ローカルマシン１０の識別表示とともにセッション管理サーバ５６２に回送する。
【０３０２】
ローカルマシン１０は、心拍メッセージをリモートマシン３０に伝送し得る。一実施態様では、心拍メッセージは、ライセンスに対する要求を含む。この実施態様では、ローカルマシン１０は、ローカルマシン１０が、実行するための承認を要求したプログラムに関連するアクセス情報を受信後、心拍メッセージを伝送することができる。ローカルマシン１０は、アプリケーションを実行する前に、心拍メッセージを伝送し得る。一実施態様では、ローカルマシン１０は、アクセス情報とともに受信した開始チケットを心拍メッセージとともに含む。この実施態様では、リモートマシン３０は、開始チケットの検証に成功した後、ローカルマシン５５２にライセンスを与え得る。
【０３０３】
別の実施態様では、心拍メッセージは、ローカルマシンがアプリケーションの実行を開始したという指示を含む。さらに別の実施態様では、心拍メッセージは、ローカルマシンがアプリケーションの実行を終了したという指示を含む。さらに別の実施態様では、心拍メッセージは、アプリケーションの実行が失敗したという指示を含む。
【０３０４】
一実施態様では、心拍メッセージは、セッション管理サーバ５６２などの第２セッション管理サーバの識別表示に対する要求を含む。別の実施態様では、心拍メッセージは、ローカルマシン１０が、リモートマシン３０が存在するネットワークに接続したという指示を含む。
【０３０５】
実施態様によっては、心拍メッセージは、アプリケーションストリーミングセッションをリセットする要求を含む。これらの実施態様の１つでは、ローカルマシン１０は、エラーが生じ、リモートマシン３０が存在するネットワークと、ローカルマシン１０との間の接続が終了した場合、この心拍メッセージを伝送する。これらとは別の実施態様では、ローカルマシン１０は、心拍メッセージとともに、セッションに関連する情報を伝送する。これらとはさらに別の実施態様では、リモートマシン３０は、セッションが終了した場合、セッション関連情報をローカルマシン１０に伝送し得る。
【０３０６】
これらとは別の実施態様では、リモートマシン３０が、応答する際に使用するネットワークから切断される場合、ローカルマシン１０は、リモートマシン３０に伝送される心拍メッセージに対する応答を受信し得る。一実施態様では、ローカルマシン１０は、セッションのリセットを要求するメッセージをリモートマシン３０に伝送することによって、セッションを再確立し得る。別の実施態様では、ローカルマシン１０は、セッションリセットを要求するメッセージを第２リモートマシン３０に伝送することによって、セッションを再確立し得る。実施態様によっては、リモートマシン３０は、ネットワークに際接続すると、リモートマシン３０が切断されていた間に受信した各々のセッションリセット要求に関して、新しいセッションを作成する。これらの実施態様の１つでは、新しいセッションは、再接続および非ライセンス状態に関連付けられる。これらとは別の実施態様では、新しいライセンスが新しいセッションのために取得されるであろう。これらとはさらに別の実施態様では、ローカルマシン１０が、アプリケーションを実行する時、新しいライセンスが取得され、ローカルマシン１０に関連するのセッションは、アクティブおよびライセンス状態に関連付けられるであろう。
【０３０７】
実施態様によっては、ローカルマシン１０上のアプリケーションストリーミングクライアント５５２は、心拍メッセージを生成する。これらの実施態様の１つでは、アプリケーションストリーミングクライアント５５２は、心拍メッセージをウェブインターフェース５５８に回送して、ローカルマシン１０に伝送し、リモートマシン３０に伝送する。他の実施態様では、リモートマシン３０上の管理サービス５０４は、心拍メッセージをローカルマシン１０からウェブインターフェース５５８を介して受信する。さらに他の実施態様では、コレクタポイント２４０（図１Ｄに関連して上記で説明する）が、心拍メッセージを受信し記憶する。
【０３０８】
実施態様によっては、アプリケーションストリーミングクライアント５５２は、ライセンスをリモートマシン３０に要求する。これらの実施態様の１つでは、ライセンスは、ローカルマシン５５２上のアプリケーションプログラムの実行を承認する。これらとは別の実施態様では、リモートマシン３０は、第２リモートマシンにアクセスして、ライセンスを提供し得る。これらとはさらに別の実施態様では、リモートマシン３０は、ライセンスをローカルマシンに提供し得る。これらとはさらに別の実施態様では、リモートマシン３０は、承認の目的で許容可能なライセンスを第２リモートマシンに提供し得る。実施態様によっては、ライセンスは、アプリケーションプログラムの実行が終了すると無効になる。
【０３０９】
実施態様によっては、ファーム３８内のリモートマシン３０は、操作のためのライセンスを要求するサブシステムのためにライセンスを構成および維持し、これらのサブシステムに対する接続の数を制御するためのライセンス管理サブシステムを含む。他の実施態様では、リモートマシン３０は、アプリケーション管理サブシステムおよびセッション管理サブシステムなどの他のサブシステム内に、ライセンス管理サブシステムの機能を含む。一実施態様では、各々のリモートマシン３０は、ライセンス管理サブシステム、またはライセンス管理サブシステムに関連する機能を含む。ライセンス管理サブシステムは、２つのタイプのライセンス、（１）特徴ライセンス、および（２）接続ライセンスを管理する。簡潔に説明すると、ライセンス管理サブシステムは、ロード管理などのソフトウェア製品の「特徴」に対するアクセスを制御する特徴ライセンス、およびライセンスされたソフトウェア製品により許可されるユーザ接続の数を管理する接続ライセンスを使用する。特徴は、ソフトウェア製品のある態様または特定の機能であるか、あるいは特徴ライセンスがなければ動作しない全体の製品でよい。
【０３１０】
図１５は、ファーム３８内のリモートマシン３０の一実施態様を示し、リモートマシン３０は、ライセンス管理サブシステム１５１０、グループサブシステム１５２０、持続ストアシステムサービスモジュール１５７０、動的ストアシステムサービスモジュール１５８０、関係サブシステム１５３０、特殊化リモートマシンサブシステム１５４０、およびイベントバス１５７０と通信する共通アクセスポイントサブシステム５２４を備える。図１５に示されているこれらのサブシステムは、ライセンス管理サブシステム１５１０の挙動を記述するためのものである。リモートマシン３０は、他のタイプのサブシステムを含むことができる。
【０３１１】
ライセンス管理サブシステム１５１０は、イベントバスを通してグループサブシステム１５２０と通信し、ライセンスの論理的な群化（以下、「ライセンス群」と呼ぶ）を形成して維持し、ライセンスのプール、割当て、および群化を促進する。ライセンス群は、以下で説明するライセンス文字列の収集、および／またはライセンス群を含む。ライセンス群は、類似する特徴のライセンスを収集し、その結果、ライセンスをプールすることを可能にする。プールされたライセンスは、ファーム３８内のリモートマシン３０が使用可能なライセンスである。各々のライセンス群は、ライセンス群および他のライセンスサブ群（つまり、ライセンス群内の他のライセンス群）内のライセンスの集合的なライセンスを保持する。ライセンスのプールに関連する情報は、一実施態様では、動的ストア２４０内に維持される。この実施態様では、各々のライセンス管理サブシステム１６１０は、ライセンスの総数、およびファーム３８内のリモートマシン３０に割り当てられたライセンス数をローカルに記憶する。プールされたライセンスを付与した後、付与するライセンス管理サブシステム１５１０は、動的ストア２４０に記入し、ライセンスが「使用中」であることを指示する。他のすべてのライセンス管理サブシステム１５１０は、このようにプールされたライセンスは付与に使用できないことを認識する。ある特定の実施態様では、動的ストア２４０は、各々のライセンス群に関連するリモートマシンＩＤ／クライアントＩＤを記憶して、使用中であるプールされたライセンスを識別する。
【０３１２】
関係性サブシステム１５３０は、ライセンスとリモートマシン３０との間、およびライセンス群とリモートマシン３０との間の関連性を維持する。関連性は、関連するリモートマシン３０のみが取得し得る各々のライセンスおよびライセンス群（つまり、「ローカルライセンス」）のライセンス数を画定する。ローカルライセンスは、ファーム３８ないの１つのリモートマシンに割り当てられ、他のリモートマシン３８によって共用されないライセンスである。ライセンス管理サブシステム１５１０は、このような関連性を作成、削除、質問、および更新するために、関係性サブシステム１５３０と通信する。共通アクセスポイントサブシステム５２４は、リモートマシン３０上に存在するソフトウェア製品によって使用されるリモート手順コール（ＲＰＣ）を提供する。これらのＲＰＣインターフェースは、こうしたソフトウェア製品が、共通アクセスサブシステム５２４を通して通信し、ライセンス付与情報にアクセスすることを可能にする。
【０３１３】
さらに図１５を参照すると、特殊化リモートマシンサブシステム１５４０は、ライセンス管理サブシステム１５１０と通信し、ライセンスが必要な特殊化リモートマシンサブシステム１５４０の各々の機能の特徴ライセンスを取得する。これは、特殊化リモートマシンサブシステム１５４０の開始時、および何らかのライセンスイベント後に生じる。特徴ライセンスを取得できない場合、特殊化リモートマシンサブシステム１５４０は、サブシステムがライセンスを提供することになっている機能を制限する。また、特殊化リモートマシンサブシステム１５４０は、クライアントセッションがリモートマシン３０で開始される時は常に、ライセンス管理サブシステム１５１０を使用して、クライアント接続ライセンスを取得する。
【０３１４】
ライセンス管理サブシステム１５１０は、持続ストアシステムサービスモジュール３５２と通信し、特徴および接続ライセンスをライセンスリポジトリ１５５０内に、命名規則に従って形成されたライセンス文字列として記憶する。ライセンスリポジトリ１５５０は、持続ストア２３０内に存在する。巡回冗長検査（ＣＲＣ）は、ライセンスがライセンスリポジトリ１５５０内に記憶されている間に、ライセンスが不正変更されるのを防止する。ライセンス管理サブシステム１５１０は、ライセンス文字列に関連する情報もライセンスリポジトリ１５５０内に記憶する。たとえば、この情報は、どのライセンスがファーム３８のどのリモートマシン３０に割り当てられるか、また実施態様によっては、各々のライセンスの起動状態を指示し得る。一実施態様では、接続ライセンステーブル１５６０は、接続ライセンスを取得したローカルマシンの識別子を記憶する。
【０３１５】
一実施態様では、ライセンス管理サブシステム１５１０は、プールされた使用可能なライセンスに対する要求など、ライセンスされた機能の使用を要求するサブシステムからのイベントをサポートする。このイベントは、ライセンスを要求するサブシステムのＵＩＤ、およびサブシステムが存在するリモートマシン３０のＵＩＤを含む。このイベントは、要求されたライセンスタイプ（つまり、特徴または接続ライセンス）もライセンス群ＩＤの形式で含む。持続ストア２３０内に記憶される実際のライセンス群ＩＤは任意であるが、命名規則を遵守することによって、将来新しいソフトウェア製品（つまり、リモートマシン３０にサブシステム）を追加する場合に対応性が得られる。
【０３１６】
要求サブシステムがライセンスを求めることによって送信されるイベントは、（１）ライセンス群タイプの指示、ライセンスを要求するローカルマシンおよびリモートマシンのアイデンティティ、並びに「ｆｏｒｃｅ  ａｃｑｕｉｒｅ」フラグを含む。ライセンス群タイプの指示は、ロード管理などの特徴ライセンス、またはソフトウェアアプリケーション製品などの接続タイプライセンスの識別表示を含み得る。ライセンスを求めるローカルマシンおよびリモートマシンを識別するフィールドは、リモートマシンおよびローカルマシンに関連する一意の識別子を含み得る。ｆｏｒｃｅ  ａｃｑｕｉｒｅフラグは、たとえば、ライセンス変更イベントの後に接続ライセンスを再度取得するために使用することができる。ライセンス変更イベントは、持続ストア２３０内のライセンス付与情報が変更された；たとえばライセンスが削除、追加、または割り当てられたことを指示する。ライセンス変更イベントの後、各々のリモートマシン３０は、ライセンス変更イベントの特定の理由がリモートマシンに把握されていないため、ライセンス変更イベントの前に所有していたすべての接続ライセンスを再取得しようとする。このフラグは、設定されている場合、リモートマシン３０との接続数が増加し、許容される接続の予め決められた最大数を超える場合でも、接続ライセンスを取得しなければならないことを指示する。新しい接続ライセンスは、使用されている接続ライセンス数が、この予め決められた最大数未満まで減少しない限り、その後付与されない。このようにして、ローカルマシンの接続は、ライセンス変更イベントによって中間セッションで終了されない。
【０３１７】
次に、図１６を参照すると、ブロック図は、ライセンス付与の実施に関連する構成要素の一実施態様を示す。リモートマシン３０は、サーバ管理サブシステム５０８およびライセンス管理サブシステム５１２を含む。実施態様によっては、サーバ管理サブシステム５０８およびライセンス管理サブシステム５１２は、上記のライセンス管理サブシステム１５１０の機能を提供する。他の実施態様では、アプリケーション管理サブシステム５０６およびセッション管理サブシステム５１０は、上記のライセンス管理サブシステム１５１０の機能を提供する。さらに他の実施態様では、他のサブシステムは、上記のライセンス管理サブシステム１５１０の機能を提供する。
【０３１８】
一実施態様では、サーバ管理サブシステム５０８は、ライセンスの発行および取消しを要求するために使用されるライセンス付与構成要素を含み得る。別の実施態様では、ライセンス管理サブシステム５１２は、サーバ管理サブシステム５０８から受信したライセンスの発行または取消し要求に対してポリシーを適用し得る。さらに別の実施態様では、ライセンス管理サブシステム５１２は、ライセンス実施機能を提供するリモートマシン３０に要求を伝送し得る。実施態様によっては、管理サービス５０４は、ライセンス実施機能を提供する第２リモートマシン３０との接続を維持し得る。他の実施態様では、リモートマシン３０は、ライセンス実施機能を提供する。
【０３１９】
実施態様によっては、ローカルマシン１０が、予め決められた数の心拍メッセージをリモートマシンに伝送しない場合、ライセンスは失効し、有効であることを中止する。これらの実施態様の１つでは、ライセンスの失効によって、ローカルマシン１０によるアプリケーションプログラムの実行の承認は無効になる。
【０３２０】
他の実施態様では、セッションは、予め決められた期間が経過するとタイムアウトになる。一実施態様では、管理サービス５０４は、ライセンスの失効後、セッションが失効するまで、セッション関連のデータを維持する。実施態様によっては、セッション関連のデータは、セッション名、セッションｉｄ、クライアントｉｄ、クライアント名、セッション開示時刻、サーバ名（ファイルサーバのＵＮＣ経路）、アプリケーション名（ローカルマシンが、ブラウザ名に基づいて生成する一意の名前）、別名、セッションの状態（アクティブ／ライセンス付与、アクティブ／非ライセンス付与、再接続／非ライセンス付与）などの情報を含み得る。別の実施態様では、ローカルマシン１０は、心拍メッセージの伝送を停止し、後のある時点で心拍メッセージの伝送を再開する。さらに別の実施態様では、管理サービス５０４は、ライセンスを再発行し、ローカルマシン１０が、セッションの失効前に心拍メッセージの伝送を再開した場合、ローカルマシン１０が、維持されているセッション関連のデータを利用できるようにする。
【０３２１】
次に、図１７を参照すると、フロー図は、ローカルマシン１０上のセッション期間中に、リモートマシン３０にライセンスを要求し、維持するために行われるステップの一実施態様を示す。簡潔に説明すると、アプリケーションストリーミングのクライアントは、ライセンスを要求する（ステップ１７０２）。リモートマシン３０は、ライセンス要求を受信、要求に関連するチケットを検証し、ライセンスを発行する（ステップ１７０４）。リモートマシン３０は、ライセンスに関連する情報をローカルマシン１０に提供する（ステップ１７０６）。ローカルマシン１０は、図７のステップ２１４に関連して上記で説明したアプリケーションを実行する。ローカルマシンは、ローカルマシンがアプリケーションを実行したことを指示する心拍メッセージを伝送する（ステップ１７０８）。リモートマシン３０は、心拍メッセージを受信し、心拍メッセージとともに伝送された識別情報を検証する（ステップ１７０８）。リモートマシン３０は、実行したアプリケーションおよびローカルマシン１０に関連するセッションを作成する（ステップ１７１０）。セッション作成結果は、ローカルマシン１０に伝送される（ステップ１７１２）。ローカルマシンは、図７のステップ２１６に関連して上記で説明したとおり、アプリケーションの実行全体で心拍メッセージを伝送する。ローカルマシンは、伝送された心拍メッセージに対する応答を受信する（ステップ１７１４）。ローカルマシンは、アプリケーションの実行の終了を指示する心拍メッセージを伝送する（ステップ１７１６）。リモートマシン３０は心拍メッセージを受信し、セッション関連のデータを除去するかどうか、並びにローカルマシン１０および終了したアプリケーションに関連するライセンスを解除するかどうかを決定する（ステップ１７１８）。リモートマシン３０によって行われる決定の結果は、ローカルマシン１０に伝送される（ステップ１７２０）。
【０３２２】
次に、より詳細に図１７を参照すると、ローカルマシン１０上のアプリケーションストリーミングクライアントがライセンスを要求する（ステップ１７０２）。実施態様によっては、ローカルマシン１０は、アプリケーションプログラムに関連するアクセス情報を受信後、ライセンスを要求する。これらの実施態様の１つでは、ローカルマシンは、ローカルマシン１０によるアプリケーションプログラムの実行の承認を付与するリモートマシン３０にライセンスを要求する。実施態様によっては、ライセンス要求は、アクセス情報とともにリモートマシン３０から受信する開始チケットを含む。他の実施態様では、ローカルマシン１０上のアプリケーションストリーミングクライアント５５２は、ウェブインターフェース５５８に対する要求を伝送し、ウェブインターフェース５５８は、要求をリモートマシン３０に伝送する。さらに他の実施態様では、リモートマシン上のセッション管理サブシステム５１０は、ライセンス要求を受信して処理する。
【０３２３】
リモートマシン３０は、ライセンス要求を受信し、要求に関連するチケットを検証し、ライセンスを生成する（ステップ１７０４）。一実施態様では、リモートマシン３０は、ローカルマシン１０が、アプリケーションの実行を承認されることを検証する。別の実施態様では、リモートマシン３０は、ローカルマシン１０が既存のライセンスに既に関連するかどうかを決定する。さらに別の実施態様では、リモートマシン３０は、ローカルマシン１０が既存のライセンスに関連していると決定し、既存のライセンスを管理するセッション管理サーバ５６２の識別子をローカルマシン１０に提供する。さらに別の実施態様では、リモートマシン３０は、新しいライセンス、セッション識別子、および新しいライセンスを管理するセッション管理サーバ５６２の識別表示を生成し、ローカルマシン１０に提供する。
【０３２４】
実施態様によっては、リモートマシン３０は、一実施態様におけるライセンス要求に応答するために、ライセンス管理サブシステム１５１０を使用する。ライセンス管理サブシステム１５１０は、ライセンス要求を受信する。この要求は、特徴ライセンスまたは接続ライセンスに対する要求でよい。ライセンス管理サブシステム１５１０は、ライセンスが既に付与されたかどうか、つまり、特徴が既に開始され、ローカルマシンに対する接続が既に存在するかどうかを決定する。ライセンスが既に付与されている場合、ライセンス管理サブシステム１５１０は、「付与」イベントをライセンス要求側に送信する。ライセンスが、以前に付与されていない場合、ライセンス管理サブシステム１５１０は、ローカルライセンス、つまりリモートマシン３０に対して永続的に割り当てられたライセンスが使用可能であるかどうかを決定する。実施態様によっては、ライセンス管理サブシステム１５１０は、ローカルメモリを検査することによってこの決定を行う。ローカルライセンスが使用可能な場合、つまり、リモートマシン３０が、現在付与されているライセンスより多くのライセンスを永続的に割り当てられている場合、ライセンス管理サブシステム１５１０は、「付与」イベントをライセンス要求側に送信する。
【０３２５】
リモートマシン３０は、ライセンスに関連する情報をローカルマシン１０に提供する（ステップ１７０６）。一実施態様では、ライセンス、セッション識別子、およびセッション管理サーバ５６２の識別表示をリモートマシン３０から受信後、ローカルマシン１０はアプリケーションを実行する。ローカルマシン１０は、図７のステップ２１４に関連して上記で説明したようにアプリケーションを実行し得る。ローカルマシンは、ローカルマシンがアプリケーションを実行したことを指示する心拍メッセージを伝送する（ステップ１７０８）。一実施態様では、ローカルマシンは、心拍メッセージはセッション管理サーバ５６２に伝送するために、心拍メッセージをリモートマシン３０に伝送する。別の実施態様では、ローカルマシン１０は、リモートマシン３０から受信したセッション管理サーバ５６２の識別子に応じて、心拍メッセージをセッション管理サーバ５６２に直接伝送する。
【０３２６】
リモートマシン３０は、心拍メッセージを受信して検証し、心拍メッセージとともに伝送された情報を識別する（ステップ１７０８）。一実施態様では、リモートマシン３０’はセッション管理サーバ５６２である。別の実施態様では、セッション管理サーバ５６２は、ローカルマシン１０によって、心拍メッセージとともに提供されたサーバ識別子を検証する。さらに別の実施態様では、サーバ識別子は、リモートマシン３０によってローカルマシン１０に提供された識別子である。
【０３２７】
リモートマシン３０は、実行されたアプリケーション、およびローカルマシン１０に関連するセッションを作成する（ステップ１７１０）。一実施態様では、セッション管理サーバ５６２は、心拍メッセージを受信後、実行アプリケーションに関連する新しいセッションを作成する。別の実施態様では、第３リモートマシン３０が新しいセッションを作成する。実施態様によっては、セッション管理サーバ５６２は、新しいセッションを作成した後、セッションに関連する情報を記憶する。
【０３２８】
セッション作成結果は、ローカルマシン１０に伝送される（ステップ１７１２）。実施態様によっては、この結果は、セッションの作成を確認する。他の実施態様では、この結果は、セッションに関連する１つまたは複数のアプリケーションを識別する。ローカルマシンは、図７のステップ２１６に関連して上記で説明したように、アプリケーションの実行全体で心拍メッセージを伝送する。一実施態様では、ローカルマシン１０は、心拍メッセージを一定間隔でセッション管理サーバ５６２に対し、アプリケーションプログラムが実行されている間周期的な間隔で伝送し続ける。ローカルマシンは、伝送された心拍メッセージに対する応答を受信する（ステップ１７１４）。一実施態様では、ローカルマシン１０は、心拍メッセージの受信の確認をセッション管理サーバ５６２から受信する。別の実施態様では、ローカルマシン１０は、セッション管理サーバ５６２による心拍メッセージの受信に応じて、実行コマンドをセッション管理サーバ５６２から受信する。
【０３２９】
ローカルマシンは、アプリケーションの実行の終了を支持する心拍メッセージを伝送する（ステップ１７１６）。リモートマシン３０は心拍メッセージを受信し、セッション関連データを除去するかどうか、ローカルマシン１０、および終了したアプリケーションに関連するライセンスを解除するかどうかを決定する（ステップ１７１８）。リモートマシン３０が行った決定の結果は、ローカルマシン１０に伝送される（ステップ１７２０）。
【０３３０】
次に、図１８を参照すると、ブロック図は、管理サービス５０４が監視するセッションに関連し得る常態の一実施態様を示す。一実施態様では、管理サービス５０４上のセッション維持サブシステム５１０は、ローカルマシン１０のセッションを監視し、状態をセッションに割り当てる。別の実施態様では、セッション維持サブシステム５１０は、ライセンス関連データのリストを維持し、このリストは、ローカルマシンに関連する識別子、セッションに関連する識別子、セッションの状態、およびリモートマシン３０が、ローカルマシン１０からメッセージを最後に受信したことを指示するタイムスタンプを含み得る。実施態様によっては、セッション維持サブシステム５１０は、セッション管理スレッドを含む。これらの実施態様の１つでは、セッション監視スレッドは、周期的なライセンスタイムアウト間隔で覚醒し、ライセンス関連データのリストを走査して、あるセッションのセッション状態を更新する。
【０３３１】
セッションが存在し得る第１状態は、ライセンスされたアクティブな状態である。一実施態様では、この状態では、ローカルマシン１０は、アプリケーションの実行を承認する有効ライセンスを維持していた。別の実施態様では、セッション管理サーバ５６２は、セッション関連のデータを維持する。実施態様によっては、セッション管理サーバ５６２は、セッション関連のデータを第２リモートマシン上に記憶する。一実施態様では、ローカルマシン１０が、アプリケーションを最初に実行する時、ローカルマシンのセッションは、ライセンスされたアクティブな状態にある。
【０３３２】
セッションが存在し得る第２状態は、ライセンスされないアクティブな状態である。一実施態様では、セッションは、ローカルマシン１０が、心拍メッセージを伝送しない場合にこの状態にあり、ローカルマシン１０に対するライセンスは失効している。別の実施態様では、セッションがこの状態にあり、ライセンスが失効している場合、セッションが失効するのに経過した時間は不十分であり、セッションはアクティブであると考えられる。実施態様によっては、セッションがこの状態にある間、リモートマシン３０またはセッション管理サーバ５６２は、ローカルマシン１０のためにセッション関連のデータを記憶し得る。他の実施態様では、ローカルマシン１０が、セッションの失効前に心拍メッセージを伝送する場合、セッション関連のデータは、ライセンスとともにローカルマシン１０に伝送され、セッションは、ライセンスされたアクティブな状態に戻る。一実施態様では、リモートマシン３０は、セッション識別子、およびローカルマシンに関連する識別子を使用して、セッションが失効していないことを検証し、ローカルマシンに適切なセッション関連のデータを提供する。
【０３３３】
セッションが存在し得る第３の状態は、切断された存在しない状態である。セッションが失効すると、セッション関連のデータは削除される。
【０３３４】
セッションが存在し得る第４の状態は、再接続されたライセンスされない状態である。一実施態様では、ローカルマシン１０上のセッションが失効すると、セッション関連のデータは削除される。別の実施態様では、ローカルマシン１０が、新しい心拍メッセージを伝送する場合、新しいセッションおよびローカルマシン識別子が、ローカルマシン１０に対して生成される。実施態様によっては、ローカルマシン１０は、リモートマシン３０に対して再度認証し、新しいライセンスを受信して、ライセンスされたアクティブな状態になる。
【０３３５】
表３は、あるセッションに関連し得る状態をまとめるものである。
【０３３６】
【化３】
2009536377.tif 000007
実施態様によっては、パッケージ機構は、アプリケーションプログラムに関連する複数のアプリケーションファイルの作成を可能にする。これらの実施態様の１つでは、パッケージ機構は、複数のアプリケーションファイルの識別表示を可能にする。これらとは別の実施態様では、パッケージ機構は、個々のアプリケーションファイルを複数のアプリケーションファイルに群化することを可能にする。これらとはさらに別の実施態様では、パッケージ機構は、ファイルサーバまたはアプリケーションサーバなど、リモートマシン上の複数のアプリケーションファイルをホストすることを可能にする。
【０３３７】
一実施態様では、パッケージ機構は、「ステージングマシン」として記述されたリモートマシン上で実行する。別の実施態様では、パッケージ機構は、「クリーンマシン」上で実行する。クリーンマシンは、オペレーティングシステムのみがインストールされたリモートマシンであり、追加のソフトウェア、ドライバ、レジストリエントリ、またはその他のファイルは存在しない。さらに別の実施態様では、パッケージマシンはリモートマシン上で実行し、このリモートマシンは、アプリケーションプログラムが実行し得るローカルマシンに類似している。実施態様によっては、パッケージ機構が上で実行するリモートマシンは、リモートマシン自体がクリーンマシンではない場合でも、アプリケーションをインストールし得るクリーンマシン環境を提供する隔離環境を含む。
【０３３８】
一実施態様では、複数のアプリケーションファイルは、「パッケージ」と呼ばれる。別の実施態様では、パッケージは、複数のアプリケーションファイルを記憶するアーカイブファイルでよい。さらに別の実施態様では、パッケージは、複数のアプリケーションファイルを記憶するアーカイブファイル、および複数のアプリケーションファイル内の複数のアプリケーションファイル内の１つまたは複数のファイルに関連するメタデータを含むファイルでよい。実施態様によっては、パッケージは、アプリケーションプログラムから成る複数のアプリケーションファイルを含む。他の実施態様では、パッケージは、１組のアプリケーションプログラムから成る複数のアプリケーションファイルを含む。さらに他の実施態様では、パッケージは、アプリケーションプログラム、およびアプリケーションプログラムの実行のために必要な前提条件から成る複数のアプリケーションファイルを含む。
【０３３９】
一実施態様では、パッケージ機構は、パッケージ機構は、隔離環境内でインストールプログラムの実行を開始する。別の実施態様では、パッケージ機構は、インストールプログラムによって生成された隔離環境の変更を監視する。さらに別の実施態様では、パッケージ機構は、隔離環境内のファイルのインストールプログラムによる生成を監視する。さらに別の実施態様では、パッケージ機構は、隔離環境内のファイルのインストールプログラムによる修正を監視する。実施態様によっては、複数のアプリケーションファイルは、インストールプログラムによって作成または修正されたファイルを含む。他の実施態様では、パッケージ機構は、隔離環境を監視するために、ファイルシステムフィルタドライバ５６４をインプリメントする。
【０３４０】
実施態様によっては、パッケージ機構は、各々が、異なるターゲット環境内で実行するために構成されるアプリケーションプログラムの異なるバージョンを含む複数のアプリケーションファイルを生成し得る。これらの実施態様の１つでは、複数のアプリケーションファイルは、特定のオペレーティングシステム、リビジョンレベル、言語構成およびマスタードライブを有するローカルマシン上で実行するように構成される（たとえば、ある複数のアプリケーションファイルは、リビジョンレベルＳＰ２以上のＷｉｎｄｏｗｓ（登録商標）  ＸＰプロフェッショナルオペレーティングシステムを有し、英語を使用し、マスタードライブＤｒｉｖｅ  Ｃ：＼を有するローカルマシン上で実行するように構成し得る）。これらとは別の実施態様では、複数の複数のアプリケーションファイルは、単一アーカイブファイル内で組み合わせることができる。これらとはさらに別の実施態様では、各々の複数のアプリケーションファイルは、「ターゲット」と呼ぶことができる。これらとはさらに別の実施態様では、１つまたは複数のアプリケーションファイルを含むアーカイブファイルは、「パッケージ」と呼ぶことができる。
【０３４１】
次に、図１９を参照すると、ブロック図は、各々のターゲットが、１つのアプリケーションを含む複数のアプリケーションファイルから成る２つのターゲットを含むパッケージを示す。図１９では、アプリケーションプログラム「Ｆｏｏ」は、２つのターゲット内にパッケージされる。２つのターゲット間の違いは、「ターゲット言語」である。具体的には、ターゲット１は「英語」をサポートし、ターゲット２は「ドイツ語」をサポートする。一実施態様では、使用可能なアプリケーションプログラムの一覧は、アプリケーションプログラム「Ｆｏｏ」をリストし得る。別の実施態様では、適切な複数のファイルが、アプリケーションプログラムにアクセスすることを要求するローカルマシンに伝送される。さらに別の実施態様では、ローカルマシンの評価に応じて、特定のターゲットをローカルマシンに伝送するという決定が行われる。さらに別の実施態様では、パッケージに関連するファイルは、パッケージ内のターゲットに関連するとともに、ローカルマシンの実行に必要な少なくとも１つの特性を識別する。
【０３４２】
実施態様によっては、パッケージ機構５３０は、アプリケーションプログラムに関連するインストールプログラムを実行することによって、ストリーミングのためのアプリケーションプログラムを作成する。これらの実施態様の１つでは、パッケージ機構は、パッケージ機構が上で実行するリモートマシン３０上に隔離環境を生成する。これらとは別の実施態様では、パッケージ機構は、アプリケーションプログラムを隔離環境内で実行する。これらとはさらに別の実施態様では、パッケージ機構は、インストールプログラムによって生成または修正された複数のアプリケーションファイルを識別する。これらとはさらに別の実施態様では、パッケージ機構は、複数のアプリケーションファイルを含むアーカイブファイルを生成する。これらの実施態様の１つでは、パッケージ機構は、複数のアプリケーションファイルを含む．ＣＡＢファイルを作成する。これらとは別の実施態様では、パッケージ機構はディレクトリを作成し、複数のアプリケーションファイルをディレクトリに記憶する。実施態様によっては、パッケージ機構は、複数のアプリケーションファイルをファイルサーバまたはその他のリモートマシン３０上に記憶する。他の実施態様では、パッケージ機構は、複数のアプリケーションファイルを複数のリモートマシン上に記憶する
。
【０３４３】
次に、図２０を参照すると、フロー図は、オペレーティングシステムをリブートすることなく、アプリケーションプログラムを効果的にインストールするための、ポリシーベースの方法で行われるステップの一実施態様を示す。簡潔に説明すると、パッケージ機構は、隔離環境内でインストーラプログラムを実行し、このインストーラプログラムは、第２アプリケーションに関連する少なくとも１つのアプリケーションファイルを隔離環境内にインストールする（ステップ２００２）。少なくとも１つのアプリケーションプログラミングインターフェース（ＡＰＩ）に対するインストーラプログラムによるコールが傍受され、このコールは、オペレーティングシステムのリブート後に動作を実行することを要求する（ステップ２００４）。傍受された少なくとも１つのコールの動作は、オペレーティングシステムをリブートすることなく実行される（ステップ２００６）。少なくとも１つのアプリケーションファイルのファイルタイプの識別表示が受信される（ステップ２００８）。少なくとも１つの実行方法は、識別されたファイルタイプに応じて、インストールされた少なくとも１つのアプリケーションファイルに関連付けられる（ステップ２０１０）。インストールされた少なくとも１つのアプリケーションファイルは、少なくとも１つのサーバ上に記憶される（ステップ２０１２）。第２アプリケーション、インストールされた少なくとも１つのアプリケーションファイル、少なくとも１つのサーバのロケーション、および少なくとも１つの実行方法について、一覧が生成される（ステップ２０１４）。
【０３４４】
次に、図２０をより詳細に参照すると、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、第２アプリケーションに関連する少なくとも１つのアプリケーションファイルを隔離環境内にインストールする（ステップ２００２）。一実施態様では、隔離環境内でインストーラプログラムを実行することにより、パッケージ機構は、インストーラプログラムが、ローカルマシン上のファイルまたはレジストリに行った変更を隔離する。別の実施態様では、パッケージ機構は、インストーラプログラムによって要求された変更を傍受し、変更を隔離環境にリダイレクトして、ローカルマシン上で変更が行われるのを防止する。さらに別の実施態様では、パッケージ機構は、隔離環境内の第２インストーラプログラムを実行し、第２アプリケーションは、第３アプリケーションに関連する少なくとも１つのアプリケーションファイルを隔離環境にインストールする。
【０３４５】
実施態様によっては、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、隔離環境内のアプリケーションに関連する少なくとも１つの実行可能なアプリケーションを実行する。インストーラがアプリケーションを実行する一実施態様では、アプリケーションの実行は、第２アプリケーションのインストールを可能にする。
【０３４６】
これらとは別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、少なくとも１つの実行可能なアプリケーションの実行を必要とする。これらとはさらに別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、Ｉｎｔｅｒｎｅｔブラウザアプリケーションの実行を必要とする。実施態様によっては、インストーラプログラムは、プログラムをインストールするために実行され、インストーラプログラムの実行は、プログラムをインストールするために必要な第２プログラムの実行を含む。これらの実施態様の１つでは、プログラムは、プラグインである。これらとは別の実施態様では、プログラムは、アクティブＸコンポーネントである。これらとはさらに別の実施態様では、プログラムは、Ｆｌａｓｈコンポーネントである。これらとはさらに別の実施態様では、プログラムは、Ｙａｈｏｏ！またはＧｏｏｇｌｅなど、カスタマイズされたツールバーである。他の実施態様では、プログラムは、第２プログラム内にインストールされるコンポーネントであり、第２プログラムに関係なく実行されない。
【０３４７】
少なくとも１つのアプリケーションプログラミングインターフェース（ＡＰＩ）に対するインストーラプログラムによるコールが傍受され、このコールは、オペレーティングシステムのリブート後の動作の実行を要求する（ステップ２００４）。傍受された少なくとも１つのコの−ル動作は、オペレーティングシステムをリブートしないで実行される（ステップ２００６）。実施態様によっては、動作の実行は、インストール時に修正されたレジストリのエントリの動作を実行することを含む。オペレーティングシステムをリブートしないで、傍受された少なくとも１つのコールを実行することに関連するさらに他の詳細は、図２５に関連して以下に記載する。
【０３４８】
少なくとも１つのアプリケーションファイルのファイルタイプの識別表示が受信される（ステップ２００８）。少なくとも１つの実行方法は、識別されたファイルタイプに応じて、インストールされた少なくとも１つのアプリケーションファイルに関連付けられる（ステップ２０１０）。一実施態様では、少なくとも１つの実行方法は、少なくとも１つのアプリケーションファイルをクライアントにストリーミングすることを可能にする。別の実施態様では、少なくとも１つの実行方法は、インストールされた少なくとも１つのアプリケーションファイルをクライアント上で実行することを可能にする。さらに別の実施態様では、少なくとも１つの実行方法は、インストールされた少なくとも１つのアプリケーションファイルをサーバ上で実行することを可能にする。さらに別の実施態様では、少なくとも１つの実行方法は、少なくとも１つのアプリケーションファイルをサーバにストリーミングすることを可能にする。
【０３４９】
インストールされた少なくとも１つのアプリケーションファイルは、少なくとも１つのサーバ上に記憶される（ステップ２０１２）。実施態様によっては、インストールされたアプリケーションプログラムは、インストールされた少なくとも１つのアプリケーションファイルを少なくとも１つのサーバ上に記憶する前に、隔離環境内で実行される。これらの実施態様の１つでは、追加のアプリケーションファイルは、インストールされたアプリケーションプログラムの実行に応じて生成される。これらとは別の実施態様では、データファイルが生成される。これらとはさらに別の実施態様では、インストールされたアプリケーションプログラムは、インストールを完了するために情報を要求し、この情報は、最初のインストールプロセス後に要求される。これらとはさらに別の実施態様では、ソフトウェア製品の識別子、ライセンス識別子、またはその他の信任状などの情報が要求される。
【０３５０】
実施態様によっては、インストールされた少なくとも１つのアプリケーションファイルのロケーションを少なくとも１つのサーバ上で識別する識別子が提供される。これらの実施態様の１つでは、識別子は、汎用命名規則（ＵＮＣ）に準拠する。他の実施態様では、インストールされた少なくとも１つのアプリケーションファイルは、．ＣＡＢファイルなどのアーカイブファイル内に配置される。これらの実施態様の１つでは、複数のアプリケーションファイルはアーカイブファイル内に記憶され、アーカイブファイルは少なくとも１つのサーバ内に記憶される。これらとはさらに別の実施態様では、インストールされた少なくとも１つのアプリケーションファイルは、複数のサーバ上に記憶される。さらに他の実施態様では、少なくとも１つのアプリケーションファイルは、アプリケーションファイルを記憶するディレクトリ内に配置される。
【０３５１】
第２アプリケーション、インストールされた少なくとも１つのアプリケーションファイル、少なくとも１つのサーバのロケーション、および少なくとも１つの実行方法の一覧が生成される（ステップ２０１４）。実施態様によっては、一覧はファイル内に記憶される。他の実施態様では、一覧は、マニフェストファイル内に記憶される。さらに他の実施態様では、一覧はＸＭＬファイル内に記憶される。
【０３５２】
一実施態様では、多数のアプリケーション、多数のアプリケーションの各々に関連する、インストールされた複数のアプリケーションファイル、およびインストールされた複数のアプリケーションファイルを記憶する少なくとも１つのサーバのロケーションの一覧が生成される。別の実施態様では、第２アプリケーションと、インストールされた複数のアプリケーションファイルとの関連性を含む一覧が生成される。さらに別の実施態様では、第２アプリケーション、インストールされた少なくとも１つのアプリケーションファイルを含む圧縮ファイルとの関連性を含む一覧が生成される。
【０３５３】
次に、図２１を参照すると、フロー図は、オペレーティングシステムをリブートすることなく、アプリケーションプログラムをインストールするためのポリシーベースの方法で行われるステップの一実施態様を示す。簡潔に説明すると、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、第２アプリケーションに関連する少なくとも１つのアプリケーションファイルを隔離環境内にインストールする（ステップ２１０２）。アプリケーションプログラミングインターフェース（ＡＰＩ）に対するインストーラプログラムによるコールは傍受され、このコールは、オペレーティングシステムのリブート後に動作を実行することを要求する（２１０４）。傍受された少なくとも１つのコールの動作は、オペレーティングシステムをリブートしないで実行される（ステップ２１０６）。少なくとも１つのアプリケーションファイルの特性の識別表示が受信される（ステップ２１０８）。少なくとも１つの実行前提条件は、識別された特性に応じて、インストールされた少なくとも１つのアプリケーションファイルに関連付けられる（ステップ２１１０）。インストールされた少なくとも１つのアプリケーションファイルは、少なくとも１つのサーバ上に記憶される（ステップ２１１２）。第２アプリケーション、インストールされた少なくとも１つのアプリケーションファイル、少なくとも１つのサーバのロケーション、および少なくとも１つの実行前提条件の一覧が生成される（ステップ２１１４）。
【０３５４】
次に、図２１をさらに詳細に参照すると、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、第２アプリケーションに関連する少なくとも１つのアプリケーションファイルを間隔内にインストールする（ステップ２１０２）。一実施態様では、隔離環境内のインストーラプログラムを実行することによって、パッケージ機構は、ローカルマシン上のファイルまたはレジストリに対して、インストーラプログラムにより行われる変更を隔離することができる。別の実施態様では、パッケージ機構は、インストーラプログラムによって要求された変更を傍受し、隔離環境に対する変更をリダイレクトして、ローカルマシン上で変更が行われるのを防止する。さらに別の実施態様では、パッケージ機構は、隔離環境内の第２インストーラプログラムを実行し、第２アプリケーションは、第３アプリケーションに関連する少なくとも１つのアプリケーションファイルを隔離環境内にインストールする。
【０３５５】
実施態様によっては、パッケージ機構は、隔離環境内のインストーラプログラムを実行し、このインストーラプログラムは、隔離環境内のアプリケーションに関連する少なくとも１つの実行可能アプリケーションを実行する。インストーラがアプリケーションを実行する一実施態様では、アプリケーションの実行により、第２アプリケーションのインストールが可能になる。これらとは別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、少なくとも１つの実行可能アプリケーションの実行を必要とする。これらとはさらに別の実施態様では、アプリケーションのインストールは、インストーラプログラムの実行のほかに、Ｉｎｔｅｒｎｅｔブラウザアプリケーションの実行を必要とする。
【０３５６】
さらに図２３を参照すると、ブロック図は、インストーラプログラム２３５０を隔離環境５３２内に実行するパッケージ機構５３０、ならびにパッケージ機構５３０および隔離環境５３２に関連するファイルシステムフィルタドライバ５３４を備えるシステムを示す。
【０３５７】
一実施態様では、パッケージ機構５３０は、アプリケーションプログラムを隔離環境５３２にインストールすることによって、パッケージを生成する（図２１に関連して上記で説明したとおり）。別の実施態様では、パッケージ機構５３０は、インストーラプログラム２３５０を実行することによって、アプリケーションプログラムを隔離環境５３２内にインストールする。実施態様によっては、パッケージ機構５３０は、グラフィカルユーザインターフェースを含む。これらの実施態様の１つでは、グラフィカルユーザインターフェースは、パッケージ機構５３０のユーザが、パッケージ機構５３０によるパッケージの生成をカスタマイズすることを可能にする。これらとは別の実施態様では、パッケージ機構５３０は、アクセス制御スート５２０上のグラフィカルユーザインターフェースと通信士、アクセス制御スート５２０のユーザが、パッケージ機構５３０によるパッケージの生成をカスタマイズすることを可能にする。
【０３５８】
実施態様によっては、ファイルシステムフィルタドライバ５３２は、アプリケーションプログラムを隔離環境５３２内にインストールすることを可能にする。これらの実施態様の１つでは、ファイルシステムフィルタドライバ５３２は、インストーラプログラム２３５０による要求を傍受する。これらとは別の実施態様では、ファイルシステムフィルタドライバ５３２は、インストーラプログラム２３５０による要求を隔離環境５３２にリダイレクトする。これらとはさらに別の実施態様では、ファイルシステムフィルタドライバ５３２は、インストーラプログラム２３５０によって行われる要求の記録を記憶する。これらとはさらに別の実施態様では、ファイルシステムフィルタドライバ５３２は、インストーラプログラム２３５０によって作成または修正されたファイルのコピーを記憶する。実施態様によっては、ファイルシステムフィルタドライバ５３２によって生成され、記憶される記録は、アプリケーションプログラムを含む複数のアプリケーションファイルとして一緒に記憶される。他の実施態様では、複数のアプリケーションファイルは、ファイルサーバ５４０上に記憶される。
【０３５９】
再度図２１を参照すると、インストーラプログラムにより、少なくとも１つのアプリケーションプログラミングインターフェース（ＡＰＩ）に対して行われるコールは傍受され、このコールは、オペレーティングシステムのリブート後に、動作を実行することを要求する（ステップ２１０４）。傍受された少なくとも１つのコールの動作は、オペレーティングシステムをリブートしないで実行される（ステップ２１０６）。実施態様によっては、この動作の実行は、コンピュータシステムのブート後に開始されるように構成されたドライバのインストールを含む。他の実施態様では、この動作の実行は、インストールの際に修正されたレジストリエントリの動作を実行することを含む。
【０３６０】
少なくとも１つのアプリケーションファイルの特性の識別表示はが受信される（ステップ２１０８）。実施態様によっては、オペレーティングシステムタイプの識別表示が受信される。他の実施態様では、オペレーティングシステムが使用する言語の識別表示が受信される。さらに他の実施態様では、第２アプリケーションのバージョンの識別表示が受信される。
【０３６１】
少なくとも１つの実行前提条件は、識別された特性に応じて、インストールされた少なくとも１つのアプリケーションファイルに関連付けられる（ステップ２１１０）。一実施態様では、少なくとも１つの実行前提条件は、特性に対するポリシーの適用に応じて、インストールされた少なくとも１つのアプリケーションファイルに関連付けられる。別の実施態様では、スクリプトは、インストールされた少なくとも１つのアプリケーションファイルに関連付けられる。図２２を参照すると、画面ショットは、ローカルマシン上で実行されるスクリプトの一覧表の一実施態様を示す。スクリプトのタイプ２２０２は、スクリプトを実行するべき時、たとえばアプリケーションの実行前、またはアプリケーションの実行が終了した後を示す。隔離指標２４は、ローカルマシン１０上の隔離環境内でスクリプトを実行するべきかどうかを指示する。図２２に示すように、実施態様によっては、スクリプトは、複数のアプリケーションファイルが一緒にパッケージされ、複数のアプリケーションファイルをホストするリモートマシン３０’上に記憶された時点で、アプリケーションプログラムに関連付けられた。
【０３６２】
実施態様によっては、少なくとも１つの実行前提条件は、インストールされた少なくとも１つのアプリケーションファイルを実行するシステム上に、あるバージョンのオペレーティングシステムをインストールすることを要求する。他の実施態様では、少なくとも１つの実行前提条件は、インストールされた少なくとも１つのアプリケーションファイルを実行するシステム上に、あるバージョンの第２アプリケーションをインストールすることを要求する。さらに他の実施態様では、インストラクションは、インストールされた少なくとも１つのアプリケーションファイルに関連付けられ、このインストラクションは、少なくとも１つの実行前提条件を満たさないクライアントによって使用される、インストールされた第２のアプリケーションファイルを指示する。さらに他の実施態様では、インストラクションは、インストールされた少なくとも１つのアプリケーションファイルに関連付けられ、このインストラクションは、少なくとも１つの実行前提条件を満たさないクライアント上で、インストールされた少なくとも１つのアプリケーションファイルを実行するための第２の実行方法を指示する。これらの実施態様の１つでは、実行方法は、インストールされた少なくとも１つのアプリケーションファイルに関連付けられ、この実行方法は、第２アプリケーションを含む複数のアプリケーションファイルをローカルマシンにストリーミングし、ローカルマシン上で実行することを承認する。これらとは別の実施態様では、ローカルマシンの評価は、ローカルマシン上に含まれないインストールされた少なくとも１つのアプリケーションファイルに関連付けられる少なくとも１つの特性を識別する。これらとはさらに別の実施態様では、複数のアプリケーションファイルを実行するための承認は無効にされる。これらとはさらに別の実施態様では、第２の実行方法は、複数のアプリケーションファイルを実行するために提供され、この第２の実行方法は、リモートマシン上で複数のアプリケーションファイルを実行し、アプリケーション出力データをリモートマシンからローカルマシンに伝送することを可能にする。
【０３６３】
インストールされた少なくとも１つのアプリケーションファイルは、少なくとも１つのサーバ上に記憶される（ステップ２１１２）。実施態様によっては、インストールされたアプリケーションプログラムは、インストールされた少なくとも１つのアプリケーションファイルを少なくとも１つのサーバ上に記憶する前に、隔離環境内で実行される。これらの実施態様の１つでは、追加のアプリケーションファイルは、インストールされたアプリケーションプログラムの実行に応じて生成される。これらとは別の実施態様では、データファイルが生成される。これらとはさらに別の実施態様では、インストールされたアプリケーションプログラムは、インストールを完了するための情報を要求し、この情報は、最初のインストールプロセス後に要求される。これらとはさらに別の実施態様では、ソフトウェア製品識別子、ライセンス識別子、またはその他の信任状などの情報が要求される。
【０３６４】
実施態様によっては、少なくとも１つのサーバ上で、インストールされた少なくとも１つのアプリケーションファイルのロケーションを識別する識別子が提供される。これらの実施態様の１つでは、識別子は、汎用命名規則（ＵＮＣ）に準拠している。他の実施態様では、インストールされた少なくとも１つのアプリケーションファイルは、．ＣＡＢファイルなどのアーカイブファイル内に配置される。これらの実施態様の１つでは、複数のアプリケーションファイルはアーカイブファイル内に記憶され、アーカイブファイルは、少なくとも１つのサーバ上に記憶される。これらとはさらに別の実施態様では、インストールされた少なくとも１つのアプリケーションファイルは、複数のサーバ上に記憶される。さらに他の実施態様では、インストールされた少なくとも１つのアプリケーションファイルは、アプリケーションファイルを記憶するディレクトリ内に配置される。
【０３６５】
第２アプリケーション、インストールされた少なくとも１つのアプリケーションファイル、少なくとも１つのサーバのロケーション、および少なくとも１つの実行前提条件の一覧が生成される（ステップ２１１４）。実施態様によっては、一覧はファイル内に記憶される。他の実施態様では、一覧はマニフェストファイル内に記憶される。さらに他の実施態様では、一覧はＸＭＬファイル内に記憶される。
【０３６６】
一実施態様では、複数のアプリケーション、多数のアプリケーションの各々に関連する、インストールされた複数のアプリケーションファイル、およびインストールされた複数のアプリケーションファイルを記憶する少なくとも１つのサーバのロケーションの一覧が生成される。別の実施態様では、第２アプリケーションと、インストールされた複数のアプリケーションファイルとの関連性を含む一覧が生成される。さらに別の実施態様では、第２アプリケーションと、インストールされた少なくとも１つのアプリケーションファイルを含む圧縮ファイルとの関連性を含む一覧が生成される。
【０３６７】
傍受された少なくとも１つのコールの動作が、オペレーティングシステムをリブートしないで実行されるステップ２１０６を再度参照すると、実施態様によっては、仮想化されたインストールおよび実行環境が提供され、インストールされるアプリケーションを実行する前に、システムをリブートする要件は排除される。
【０３６８】
次に、図２４を参照すると、フローチャートは、インストーラプログラムの実行が、インストーラプログラムが上で実行されるローカルマシン上でオペレーティングシステムをリブートする必要がある一実施態様を示す。従来のアプリケーションインストーラは、アプリケーションがインストールされるリモートマシン上にファイルをコピーする（ステップ２４０２）。実施態様によっては、ファイルをコピーすることによって、リモートマシンのリブートを行うことができる。アプリケーションインストーラは、少なくとも１つのファイルを、ロックしたファイルにコピーしようとする（ステップ２４０４）。一実施態様では、ロックしたファイルは、オペレーティングシステムが実行される（または「リブートされる」）時にのみ書き込むことができる。ＭＯＶＥ＿ＦＩＬＥ＿ＤＥＬＡＹ＿ＵＮＴＩＬ＿リブートオプションは、ＭｏｖｅＦｉｌｅＥｘ（  ）Ｗｉｎ３２  ＡＰＩで設定され（ステップ２４０６）、アプリケーションインストーラは、システム停止／リブート機能をコールする（ステップ２４０８）。リブート後、最初にロックしたファイルは、次にリブート後にインストールされる（ステップ２４１０）。
【０３６９】
次に、図２５を参照すると、ブロック図は、パッケージ機構がアプリケーションプログラムを上にインストールするリモートマシン３０の一実施態様を示す。リモートマシン３０は、システムリソース２５０２、システムＡＰＩ２５０４、およびアプリケーションをインストールするためのアプリケーションインストーラ２５０６を備える。リモートマシン３０は、機能フッキング機構２５０８、インストール後プロセッサモジュール２５１０、およびアプリケーション隔離環境２５１２も備える。実施態様によっては、アプリケーションプログラムを隔離環境２５１２内にインストールすることにより、リモートマシン３０をリブートせずにインストールすることができる。これらの実施態様の１つでは、隔離環境２５１２内で仮想化されるシステムリソース２５０２に行われる変更は、リモートマシン３０上の対応するシステムリソース２５０２を変更しない。リモートマシン３０上のシステムリソースは変更されないため、システムリソースの不適切な変更を防止するために、マシンをリブートする必要はない。
【０３７０】
次に、図２５をさらに詳細に参照すると、システムリソース２５０２は、レジストリエントリ、システムＤＬＬ、およびリモートマシン３０が実行されている間に、オペレーティングシステムが書き込まれるのを防止するその他のロックしたファイルを含むことができる。システムＡＰＩ２５０４は、システムをリブートするために使用されるＡＰＩであって、リモートマシン３０のリブートを防止するために、アプリケーションインストーラ２５０６によってコールされ、機能フッキング機構２５０８によってフックされるＡＰＩを含む。
【０３７１】
アプリケーション隔離環境２５１２は、アプリケーションインストーラ２５０６に対し、オペレーティングシステムリソースのビューを含む環境を提供する。一実施態様では、アプリケーション隔離環境２５１２は隔離環境５５６である。実施態様によっては、アプリケーション隔離環境２５１２は、ファイルシステム、レジストリ、および命名されたオブジェクトなどのオペレーティングシステムのリソースの仮想化を提供する。一実施態様では、アプリケーションインストーラ２５０６は、アプリケーション隔離環境２５１２内で実行される。別の実施態様では、アプリケーションインストーラ２５０６は、アプリケーションプログラムをアプリケーション隔離環境２５１２内にインストールする。さらに別の実施態様では、アプリケーションインストーラ２５０６は、アプリケーション隔離環境２５１２の外部で実行され、アプリケーションプログラムをアプリケーション隔離環境２５１２内部にインストールする。
【０３７２】
実施態様によっては、アプリケーション隔離環境２５１２は、アプリケーションインストーラ２５０６が、アプリケーションをアプリケーション隔離環境２５１２内にインストールする時に、リモートマシン３０をリブートするための要件を回避する。一実施態様では、アプリケーション隔離環境２５１２は、アプリケーションファイルをロックしたファイルにコピーする要求を傍受する。別の実施態様では、アプリケーション隔離環境２５１２は、アプリケーションファイルをロックしていないファイルにコピーする要求をリダイレクトする。さらに別の実施態様では、アプリケーション隔離環境２５１２は、アプリケーションファイルを仮想化ファイルにコピーする要求をリダイレクトする。さらに別の実施態様では、アプリケーションファイルをコピーする要求をリダイレクトすることによって、リモートマシン３０のリブートを要求しなくても、アプリケーションファイルのインストールが可能になる。一例として、アプリケーションインストーラ２５０６は、ｃ：「ｗｉｎｄｏｗｓ＼ｓｙｓｔｅｍ３２＼ｍｆｃ４０．ｄｌｌなどのロックしたファイルに書き込もうとする場合、アプリケーション隔離環境２５１２は要求を傍受し、別の（６）されていないロケーションにファイルをリダイレクトする。ロックしたファイルを回避するこの機能は、ＭｏｖｅＦｉｌｅＥｘ（  ）ＡＰＩおよびＭＯＶＥ＿ＦＩＬＥ＿ＤＥＬＡＹ＿ＵＮＴＩＬ＿リブートフラグを使用しなくても、ファイルをインストールすることができることを意味する。この機能は、リモートマシン３０のリブートの必要性をなくす。
【０３７３】
一実施態様では、機能フッキング機構２５０８はファイルシステムフィルタドライバ５６４である。別の実施態様では、ファイルシステムフィルタドライバ５６４は、機能フッキング機構２５０８を備える。さらに別の実施態様では、機能フッキング機構２５０８は、アプリケーションインストーラ２５０６からの要求を傍受して、リモートマシン３０を再始動させる。実施態様によっては、アプリケーション隔離環境２５１２は、ロックしていないファイルに対するアプリケーションファイルのコピーに備えている。しかし、アプリケーション隔離環境２５１２は、リモートマシン３０をリブートするために、アプリケーションインストーラ２５０６による要求をアドレス指定する。機能フッキング機構２５０８は、リブート要求を傍受し、アプリケーションインストーラ２５０６に応答する。
【０３７４】
アプリケーション隔離環境２５１２は、アプリケーションファイルを、ロックしていないファイルにコピーすることを可能にする。しかし、実施態様によっては、アプリケーションをインストールするために、その他の動作が必要であり、これらの動作はリブート後に行われる場合がある。リブートを防止することは、インストールプロセスでこれらの動作を完了する必要性を防止することではない。機能フッキング機構２５０８は、アプリケーションのインストールに関連する動作を実施する機能を提供し得る。
【０３７５】
たとえば、アプリケーションのインストール中、ＨＫＬＭ＼ＳＹＳＴＥＭ＼ＣｕｒｒｅｎｔＣｏｎｔｒｏｌＳｅｔ＼Ｃｏｎｔｒｏｌ＼Ｓｅｓｓｉｏｎ＿Ｍａｎａｇｅｒ＼Ｐｅｎｄｉｎｇ−ＦｉｌｅＲｅｎａｍｅＯｐｅｒａｔｉｏｎｓなどのレジストリエントリを書き込むことができる。その他のアプリケーションは、マシンのブート後に始動する必要があるサービスまたはドライバをインストールし得る。インストール後プロセッサモジュール２５１０は、インストール時に修正されたアプリケーションファイルを識別し、アプリケーションファイルに関連する動作を実行する。
【０３７６】
次に、図２６を参照すると、フロー図は、アプリケーション隔離環境２５１２内にアプリケーションをインストールするために行われるステップの一実施態様を示す。アプリケーション隔離環境２５１２は、サーバオペレーティングシステムの仮想化ビューをアプリケーションインストーラに提供する（ステップ２６０２）。システムリブートおよび停止に関連するサーバ上のＡＰＩは、アプリケーションインストーラ２５０６がリブートされるのを防止するためにフックされる（ステップ２６０４）。アプリケーションインストーラ２５０６は、ロックしたファイルに対するファイルコピー動作を要求し、この要求は傍受されて、矛盾しないロケーションにリダイレクトされる（ステップ２６０６）。アプリケーションインストーラ２５０６が、システムＡＰＩをコールことによってリブートを試みると、要求が傍受され、リブートが防止される（ステップ２６０８）。インストール後プロセッサモジュール２５１０は、通常、リブート後に行われる動作を実行し（ステップ２６１０）、次に、アプリケーションは、リモートマシン３０をリブートしないで、アプリケーション隔離環境２５１２内で実行することができる（ステップ２６１２）。
【０３７７】
実施態様によっては、アプリケーションプログラムをアプリケーション隔離環境２５１２内にインストールした後、パッケージ機構は、アプリケーションプログラムのインストール時に作成または修正された複数のアプリケーションファイルを識別する。これらの実施態様の１つでは、複数のアプリケーションファイルは、リモートマシン上に記憶される。これらとは別の実施態様では、複数のアプリケーションファイルを検索するローカルマシンは、アプリケーションプログラムを実行し得る。
【０３７８】
実施態様によっては、パッケージ機構５３０は、隔離環境５３２およびファイルシステムフィルタドライバ５３４を備えるリモートマシン上で実行され、アプリケーションプログラムを隔離環境５３２内にインストールする。これらの実施態様の１つでは、リモートマシンは、「クリーンマシン」または「ステージングマシン」と呼ばれる。これらとは別の実施態様では、隔離環境５３２は、クリーンマシン上でオペレーティングシステムによって提供されるネイティブリソースの修正可能な仮想化インスタンスを提供するアプリケーション隔離スコープを備える。これらとはさらに別の実施態様では、隔離環境５３２は、ネイティブリソースの読取り専用ビューを提供するシステム隔離スコープを備える。これらとはさらに別の実施態様では、ネイティブリソースの読取り専用ビューは、クリーンマシン上に存在するファイルシステムおよびレジストリのスナップショットを含む。
【０３７９】
一実施態様では、リダイレクタは、ネイティブリソースを変更するための要求を傍受する。実施態様によっては、リダイレクタは、ファイルシステムフィルタドライバ５３４である。別の実施態様では、パッケージ機構５３０によって実行されるインストーラプログラムが、変更の要求を行う。さらに別の実施態様では、ネイティブリソースに対する変更は、アプリケーションプログラムをクリーンマシン上にインストールすることを必要とする。さらに別の実施態様では、リダイレクタは、この要求を隔離環境５３２にリダイレクトする。
【０３８０】
実施態様によっては、ネイティブリソースを変更するための要求を隔離環境５３２リダイレクトすることによって、アプリケーションプログラムのインストールに関連する変更が隔離される。他の実施態様では、ネイティブリソースを変更する要求が変更され、記憶素子内に記憶される。これらの実施態様の１つでは、アプリケーションプログラムのインストールに関連するの変更は、記憶素子内に存在する。これらとは別の実施態様では、ローカルマシン５５２が記憶素子の内容を検索し、ローカルマシン５５２上の隔離環境５５６内に存在するネイティブリソースの変更をインプリメントすると、アプリケーションプログラムがローカルマシン５５２上にインストールされる。
【０３８１】
実施態様によっては、ローカルマシン１０の起動前の分析が必要な場合がある。これらの実施態様の１つでは、ローカルマシン１０は、少なくとも１つの特性がローカルマシン１０内に含まれていることを検証する。これらとは別の実施態様では、少なくとも１つの特性は、起動前の分析で、ローカルマシン１０に少なくとも１つの特性がないことが決定された後に、ローカルマシン１０に追加される。これらとはさらに別の実施態様では、少なくとも１つの特性は、アプリケーションプログラムをホストするリモートマシン内に含まれ、ローカルマシンが少なくとも１つの特性を含まない場合、アプリケーションプログラムの実行が妨げられるであろう。さらに別の実施態様では、アプリケーションプログラムは、実行のために、ローカルマシン上に少なくとも１つの特性が存在することを必要とする。
【０３８２】
実施態様によっては、パッケージ機構は、少なくとも１つの特性の識別表示をローカルマシン上の起動前の分析で使用することを可能にする。他の実施態様では、パッケージ機構は、少なくとも１つの特性をアプリケーションプログラムと関連付けて、ローカルマシン上で実行するために使用することを可能にする。さらに他の実施態様では、パッケージ機構は、実行可能なスクリプトをアプリケーションプログラムと関連付けることを可能にし、ローカルマシンが、実行可能なスクリプトを実行して、起動前の分析を完了することを可能にする。さらに他の実施態様では、アプリケーションプログラムの実行後、少なくとも１つの特性がローカルマシン上に存在する必要がある。
【０３８３】
パッケージ機構は、複数のアプリケーションファイルに署名するための機能を提供する。一実施態様では、複数のアプリケーションファイルに署名することによって、ローカルマシンは、複数のアプリケーションファイルの完全性を検証することが可能になる。別の実施態様では、複数のアプリケーションファイルに署名することによって、ローカルマシンが、破損したアプリケーションプログラムを実行するのを防止する。実施態様によっては、複数のアプリケーションファイル内のファイルのＭＤ４、ＭＤ５ハッシュ、またはＳＨＡ−１ハッシュなどの暗号チェックサムが計算される。
【０３８４】
他の実施態様では、すべての複数のアプリケーションファイル内のファイルの暗号チェックサムが計算される。これらの実施態様の１つでは、暗号チェックサムは第２ファイル内に記憶される。これらとは別の実施態様では、第２ファイルは、複数のアプリケーションファイルに関連付けられる。実施態様によっては、第２ファイルは、複数のアプリケーションファイルに追加される。他の実施態様では、第２ファイルは、Ｘ．５０９証明書などの証明書を使用して署名される。さらに他の実施態様では、複数のアプリケーションファイルを検索するローカルマシンは、証明書の公共部分を使用して署名を検証する。さらに他の実施態様では、ローカルマシンは、証明書の公共部分、および証明書信頼リストの識別表示を受信して署名を検証する。これらの実施態様の１つでは、ローカルマシンは、証明書信頼リストの識別表示を含むレジストリキーを受信する。
【０３８５】
一実施態様では、パッケージ機構は、隔離環境をカスタマイズする機能を提供する。別の実施態様では、パッケージ機構は、隔離環境の定義を記憶するファイルを生成するための機能を提供する。さらに別の実施態様では、パッケージ機構は、アプリケーションプログラムを含む複数のアプリケーションファイルを有するファイルを含む。さらに別の実施態様では、ローカルマシンは、アクセス情報を含むファイルをリモートマシンから受信する。
【０３８６】
実施態様によっては、複数のアプリケーションファイルは、アーカイブファイル内に記憶される。これらの実施態様の１つでは、アーカイブファイルはＣＡＢファイル形式である。これらとは別の実施態様では、アーカイブファイル形式は、ファイルの短いファイル名のアプリケーションプログラムによる仕様をサポートしない。これらとはさらに別の実施態様では、ＷＩＮＤＯＷＳ（登録商標）  ２０００などのオペレーティングシステムは、ファイルの短いファイル名のアプリケーションプログラムによる仕様をサポートしない場合がある。他の実施態様では、ＷＩＮＤＯＷＳ（登録商標）  ＸＰなどのオペレーティングシステムは、ファイルの短いファイル名のアプリケーションプログラムによる仕様をサポートする。これらの実施態様の１つでは、ファイルを実行する要求は、ファイルの正確な短いファイル名を含まなければならない。
【０３８７】
一実施態様では、マッピングは、複数のアプリケーションファイル内のファイルの長いファイル名と、ファイルの省略名とを関連付けるために生成し得る。別の実施態様では、マッピングは、複数のアプリケーションファイル内のファイル内に記憶される。さらに別の実施態様では、ファイルは、ファイルの長いファイル名が１２文字より長い場合にのみ、短いファイル名を有する。実施態様によっては、短いファイル名は、ファイルに関連する仮想ファイル名である。これらの実施態様の１つでは、ファイルは、実行のためにローカルマシン１０に伝送され、長いファイル名とともにローカルマシン１０に記憶される。これらとは別の実施態様では、ローカルマシン１０上のアプリケーションファイルは、短いファイル名を使用するファイルの実行を要求する。これらとはさらに別の実施態様では、マッピングは、ファイルの実行を可能にするが、ファイルの実行のための要求は、ローカルマシン上のファイル名（長いファイル名）を使用しなかった。
【０３８８】
実施態様によっては、パッケージャ機構５３０は、マッピングを生成する。これらの実施態様の１つでは、パッケージャ機構５３０は、長いファイル名を有するファイルに短いファイル名を選択する。これらとは別の実施態様では、上でパッケージャ機構５３０が実行しているリモートマシン３０’上のオペレーティングシステムは、長いファイル名を有するファイルに短いファイル名を選択する。これらとはさらに別の実施態様では、一意の短いファイル名は、リモートマシン３０’上の第２の短いファイル名と矛盾しない名前が選択される。これらとはさらに別の実施態様では、パッケージャ機構５３０によって実行されたインストーラプログラムは、長いファイル名と短いファイル名との間のマッピングを含むファイルを生成する。他の実施態様では、マッピングは、ファイルを検索するローカルマシン１０に伝送される。これらの実施態様の１つでは、ローカルマシン１０は、ファイルを実行する時にファイルを参照する。
【０３８９】
以下の具体的な例は、上記の方法およびシステムが、アプリケーションプログラムを含む複数のファイルを選択し、ローカルマシンにストリーミングし、ローカルマシン上で実行するためにどのように使用することができるかを示す。これらの例は、具体的に説明するものであり、制限するものではない。
【実施例】
【０３９０】
（実施例１）
一実施態様では、ローカルマシン１０のユーザは、アプリケーションプログラムの一覧で識別されているワード処理プログラム、ウェブブラウジングアプリケーション、または表計算プログラムなどのアプリケーションプログラムにアクセスすることを要求する。この実施態様の一例では、ローカルマシン１０は、ローカルマシン１０が使用可能な圧力の一覧をリモートマシン３０から受信するｐｒｏｇｒａｍ  ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションを実行する。この実施態様の別の例では、ローカルマシン１０は、リモートマシン３０’’’などのウェブサーバと通信して、アプリケーションの一覧を受信する。ローカルマシン１０のユーザは、一覧表のアプリケーションプログラムを表すグラフ描写を選択することによって、一覧表のアプリケーションプログラムにアクセスすることを要求し得る。ローカルマシン１０のユーザは、ローカルマシン１０上に以前にインストールされていないアプリケーションプログラムにアクセスすることを要求し得る。
【０３９１】
ローカルマシン１０は、アプリケーションプログラムにアクセスする要求をリモートマシン３０に伝送する。ローカルマシン１０は、リモートマシン３０’’の識別表示を受信し、アプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供する。ローカルマシン１０は、アプリケーションプログラムの実行に必要な少なくとも１つの特性を識別する。この実施態様の一例では、ローカルマシン１０は、リモートマシン３０によってローカルマシン１０に伝送されたリモートマシン３０’’の識別表示を含む少なくとも１つの特性を受信する。この実施態様の別の例では、ローカルマシン１０は、リモートマシン３０’’の識別表示を受信後、少なくとも１つの特性をリモートマシン３０’’から検索する。ローカルマシン１０は、複数のアプリケーションファイルを検索するための承認を受信する前に、少なくとも１つの特性を含むように要求される場合がある。あるいは、ローカルマシン１０は、複数のアプリケーションファイルを実行する前に、少なくとも１つの特性を含むように要求される場合がある。この実施態様の一例では、ローカルマシン１０は、複数のアプリケーションファイルの実行全体で、少なくとも１つの特性を含むように要求される場合がある。
【０３９２】
ローカルマシン１０が少なくとも１つの特性を含むことが、ローカルマシン１０によって検証された後、ローカルマシン１０は、少なくとも１つのアプリケーションファイルを複数のアプリケーションファイル内で検索し、検索されたアプリケーションファイルを実行して、アプリケーションプログラムを実行する。
【０３９３】
（実施例２）
リモートマシン３０は、アプリケーションプログラムにアクセスする要求をローカルマシン１０から受信する。リモートマシン３０は、ローカルマシン１０を認証する。この実施態様の一例では、リモートマシン３０は、ユーザ名およびパスワードなどの信任状をローカルマシン１０から要求する。この実施態様の別の例では、リモートマシン３０は、収集エージェント４０４をローカルマシン１０に伝送する。収集エージェント４０４は、ローカルマシン１０に関する情報を収集して、ローカルマシン１０を認証する際に使用するために、その情報をリモートマシン３０に伝送する。この実施態様のさらに別の例では、リモートマシン３０は、ローカルマシン１０の認証のために、ローカルマシン１０に関する情報をポリシーエンジン４０６に提供する。リモートマシン３０は、ポリシーエンジン４０６を含むことができる。あるいは、リモートマシン３０は、ポリシーエンジン４０６を含むリモートマシン３０’と通信することができる。
【０３９４】
リモートマシン３０は、アプリケーションプログラムを実行する方法を選択する。リモートマシン３０は、ローカルマシン１０の認証に応じて選択を行うことができる。この実施態様の一例では、リモートマシン３０は、ローカルマシン１０に関して収集された情報にポリシーを適用する。この実施態様の別の例では、リモートマシン３０は、アプリケーションプログラムに適用されるポリシーに応じて選択を行う。この実施態様のさらに別の例では、リモートマシン３０は、アプリケーションプログラムに関連するファイルタイプに適用されるポリシーに応じて選択を行う。リモートマシン３０は、アプリケーションプログラムの実行方法の選択を行うために、ファイルを調査することができる。
【０３９５】
リモートマシン３０は、ローカルマシン１０が、リモートマシン３０’上でアプリケーションプログラムを実行することによって生成されたアプリケーション出力データを受信することが可能であるように、アプリケーションプログラムの実行方法を選択し得る。リモートマシン３０は、ローカルマシン１０が、アプリケーションプログラムを含む複数のアプリケーションファイルを検索した後、アプリケーションプログラムをローカルに実行することが可能であるように、アプリケーションプログラムの実行方法を選択し得る。
【０３９６】
一実施態様では、リモートマシン３０は、ローカルマシン１０が、アプリケーションストリーミングセッション全体で、アプリケーションプログラムを含む複数のアプリケーションファイルを検索しながら、ローカルにアプリケーションプログラムを実行することが可能であるように、アプリケーションプログラムの実行方法を選択する。この実施態様の一例では、ローカルマシン１０は、複数のアプリケーションファイルをホストするリモートマシンとのアプリケーションストリーミングセッションを確立し、ローカルマシン１０は、アプリケーションストリーミングセッション全体で複数のアプリケーションファイルの検索を開始し、検索された複数のアプリケーションファイル内の第１アプリケーションファイルを実行し、同時に複数のアプリケーションファイル内で第２アプリケーションファイルを検索する。この実施態様の別の例では、ローカルマシン１０は、複数のアプリケーションファイル内の第１アプリケーションファイルを実行し、第２アプリケーションファイルにアクセスするための要求を第１アプリケーションファイルから受信後、複数のアプリケーション内の第２アプリケーションファイルを検索する。
【０３９７】
選択した実行方法によって、ローカルマシン１０が、アプリケーションプログラムを含む複数のアプリケーションファイル内の少なくとも１つのアプリケーションファイルを検索することが可能になる実施態様では、リモートマシン３０は、ローカルマシン１０がアクセスするために使用可能なアプリケーションプログラムをホストするリモートマシン３０’’を識別する。リモートマシン３０’’は、アプリケーションプログラムを含む複数のアプリケーションファイルをホストする。リモートマシン３０’’は、様々なアプリケーションプログラムを含む複数の複数のアプリケーションファイルをホストし得る。この実施態様の一例では、リモートマシン３０’’は、いくつかの異なるバージョンのアプリケーションプログラムの各々に関する複数のアプリケーションファイルをホストする。
【０３９８】
リモートマシン３０’’は、特定のアプリケーションプログラムを含む複数のアプリケーションファイルをアプリケーションプログラムの記述に関連付ける。ファイルは、複数のアプリケーションファイルをマシンに伝送する前に、マシン上で識別されるべき１つまたは複数の実行前提条件も識別し得る。ファイルは、リモートマシン３０’’のネットワーク上のロケーションの識別表示をさらに含み得る。この実施態様の一例では、リモートマシン３０は、リモートマシン３０’’のネットワーク上のロケーションを識別するために、ファイルを調査する。
【０３９９】
リモートマシン３０は、リモートマシン３０’’を選択する。リモートマシン３０は、ローカルマシン１０にアクセス可能なネットワーク上のロケーションを有するリモートマシン３０’’を選択し得る。リモートマシン３０は、ローカルマシン１０に適合するアプリケーションプログラムのバージョンをホストするリモートマシン３０’’を選択し得る。リモートマシン３０は、アプリケーションプログラムの選択された実行方法の識別表示、およびリモートマシン３０’’の識別表示を、アプリケーションプログラムに対するアクセス要求の受信に応じてローカルマシン１０に伝送する。リモートマシン３０は、リモートマシン３０は、ファイルをローカルマシン１０に伝送し得る。
【０４００】
（実施例３）
一実施態様では、ローカルマシン１０は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン３０’’の識別表示を受信する。ローカルマシン１０は、アプリケーションプログラムに対するアクセスの承認を検証する。この実施態様の一例では、ローカルマシン１０は、起動前の分析を自発的に実行する。ローカルマシン１０は、ローカルマシン１０上で少なくとも１つの特性を識別し、その少なくとも１つの特性の存在を検証する。少なくとも１つの特性は、アプリケーションプログラムにアクセスして実行するための承認を維持する前提条件でよい。ローカルマシン１０上の少なくとも１つの特性の存在を検証することは、ローカルマシン１０の特性と、アプリケーションプログラムのシステム要件との間の互換性を保証することができ、セキュリティ方針またはライセンス契約の遵守をさらに保障することができる。
【０４０１】
起動前の分析が正常に完了すると、ローカルマシン１０は、リモートマシン３０’’とのアプリケーションストリーミングセッションを確立し、複数のアプリケーションファイルに対するアクセスを提供する。アプリケーションストリーミングセッションは、ローカルマシン１０が、接続を通して複数のアプリケーションファイル内のファイルを要求し、受信することができる任意の接続でよい。アプリケーションストリーミングセッションの確立は、ローカルマシン１０が、複数のアプリケーションファイル内のすべてのファイルを検索する前に、複数のアプリケーションファイル内の第１アプリケーションファイルを実行することを可能にし得る。ローカルマシン１０は、アプリケーションプログラムの実行を開始すると同時に、複数のアプリケーションファイル内の追加のアプリケーションファイルの検索を継続することができる。あるいは、ローカルマシン１０は、アーカイブファイル内の複数のアプリケーションファイルを検索し、抽出された第１アプリケーションを実行すると同時に、第２アプリケーションファイルをアーカイブファイルから抽出する。
【０４０２】
（実施例４）
一実施態様では、ローカルマシン１０上のアプリケーションストリーミングクライアント５５２は、複数のアプリケーションファイルをリモートマシン３０から検索する。アプリケーションストリーミングクライアントは、ストリーミングサービス５５４、隔離環境５５６、およびファイルシステムフィルタドライバ５６４を含む。ストリーミングサービス５５４は、複数のアプリケーションファイルを要求および検索するために、リモートマシン３０とのアプリケーションストリーミングセッションを確立する。ストリーミングサービス５５４は、隔離環境５５６内のアプリケーションファイルを実行する。ファイルシステムフィルタドライバ５６４は、実行アプリケーションファイルからの要求を傍受し、要求を隔離環境５５６にリダイレクトすることによって、隔離環境５５６内のアプリケーションファイルを実行することを可能にする。
【０４０３】
この実施態様の一例では、ストリーミングサービス５５４は、アプリケーションプログラムを有する複数のアプリケーションファイルを含むアーカイブファイルを検索する。ストリーミングサービス５５４は、アーカイブファイルから、複数のアプリケーションファイルからの第１アプリケーションファイルを抽出する。第１アプリケーションファイルは、実行可能ファイルでよい。ストリーミングサービス５５４は、隔離環境５５６内の第１アプリケーションファイルを実行し得る。第１アプリケーションファイルの実行は、アプリケーションプログラムの実行を開始し得る。
【０４０４】
別の実施態様では、隔離環境５５６内で実行している第１アプリケーションファイルは、ローカルマシン１０から、複数のアプリケーションファイルの一覧を要求する。ファイルシステムフィルタドライバ５６４は、一覧に対する要求を傍受し、要求をストリーミングサービス５５４にリダイレクトする。ストリーミングサービス５５４が、複数のアプリケーションファイルを検索した実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルの一覧を生成し得る。ストリーミングサービス５５４が、複数のアプリケーションファイルを含むアーカイブファイルを検索した実施態様では、ストリーミングサービス５５４は、検索されたアーカイブファイルに含まれていた一覧に応じて、複数のアプリケーションファイルの一覧を生成し得る。他の実施態様では、ストリーミングサービス５５４は、複数のアプリケーションファイルの一覧のみを検索するが、複数のアプリケーションファイル内の少なくとも１つのアプリケーションファイルはリモートマシン３０上に存在し、ストリーミングサービス５５４は、未だローカルマシン１０まで検索していない。これらの実施態様では、ストリーミングサービス５５４は、検索された一覧に応じて、複数のアプリケーションファイルの一覧を生成し得る。これらの実施態様の一例では、ストリーミングサービス５５４は、複数のアプリケーションファイルがローカルマシン１０上に存在するが、一覧のみがローカルマシン１０に存在することを第１アプリケーションファイルに指示する。
【０４０５】
（実施例５）
一実施態様では、隔離環境５５６内で実行している第１アプリケーションファイルは、複数のアプリケーションファイルの一覧によって識別されたファイルに対するアクセスを、ローカルマシン１０から要求する。要求されたファイルが、第１アプリケーションファイルがアクセス可能な隔離環境５５６内のユーザスコープに存在する場合、第１アプリケーションファイルは、要求されたファイルにアクセスする。
【０４０６】
要求されたファイルが、ユーザスコープ内、または隔離環境５５６内に存在しない場合、ファイルシステムフィルタドライバ５６４は、要求を傍受し、要求をストリーミングサービス５５４にリダイレクトする。要求されたファイルが、複数のアプリケーションファイルを含むアーカイブファイル内のファイルである場合、ストリーミングサービス５５４は要求されたファイルを抽出し、要求されたファイルをローカルマシン１０上に記憶する。ストリーミングサービス５５４は、ファイルを隔離環境５５６内に記憶し得る。ファイルに対する要求は、ファイルが隔離環境５５６内に記憶されている時に履行される。
【０４０７】
要求されたファイルが、隔離環境５５６内、または複数のアプリケーションファイルを含むアーカイブファイル内に存在しない場合、ストリーミングサービス５５４は、リモートマシン３０からファイルを要求する。ストリーミングサービス５５４は、アプリケーションストリーミングセッション全体で、ファイルをリモートマシン３０から受信することができる。ストリーミングサービス５５４は、受信したファイルを隔離環境５５６内に記憶する。ファイルに対する要求は、ファイルが隔離環境５５６内に記憶されている時に履行される。
【０４０８】
この実施態様の一例では、第２アプリケーションファイルは、隔離環境５５６内の第２ユーザスコープを実行する。第２アプリケーションファイルは、第１アプリケーションファイルによって最初に要求されたファイルに対するアクセスを要求する。要求されたファイルのコピーが、第２ユーザスコープ内に存在しない場合、隔離環境５５６内に記憶された要求されたファイルのコピーは、アプリケーションファイルに対する要求に応じるために使用される。
【０４０９】
（実施例６）
一実施態様では、ローカルマシン１０は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン３０’の識別表示をリモートマシン３０から受信する。ローカルマシン１０は、ローカルマシン１０の起動前の分析を正常に完了する。ローカルマシン１０は、アプリケーションプログラムの実行を承認するライセンスをリモートマシン３０から受信する。この実施態様の一例では、ライセンスは、ローカルマシン１０に対して、心拍メッセージをセッション管理サーバ５６２に伝送し、アプリケーションプログラムを実行するための承認を維持するように要求する。心拍メッセージは、アプリケーションプログラムの実行の開始、アプリケーションプログラムの実行の終了を指示するメッセージ、アプリケーションプログラムの実行全体で周期的に送信されるメッセージを含み得る。心拍メッセージは、ローカルマシン１０がネットワークに接続する場合、またはローカルマシン１０が、ネットワークに対する接続を終了する場合、ローカルマシン１０の状態に関するメッセージも含み得る。この実施態様の別の例では、ライセンスは、ローカルマシン１０が、アプリケーションプログラムを実行するための承認を有する予め決められる期間を指定する。
【０４１０】
ローカルマシン１０は、リモートマシン３０’とのアプリケーションストリーミングセッションを確立し、複数のアプリケーションファイル内の少なくとも１つのアプリケーションファイルを検索する。少なくとも１つのアプリケーションファイルの実行時、受信したライセンスが、心拍メッセージの伝送を要求する実施態様では、ローカルマシン１０は、心拍メッセージをセッション管理サーバ５６２に送信し、少なくとも１つのアプリケーションファイルを実行するための承認を維持する。
【０４１１】
（実施例７）
一実施態様では、ローカルマシン１０は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン３０’の識別表示を受信する。ローカルマシン１０は、ローカルマシン１０の起動前の分析を正常に完了する。ローカルマシン１０は、ローカルマシン１０が、アプリケーションプログラムを実行するための承認を有する予め決められる期間を指定するライセンスを受信する。
【０４１２】
ローカルマシン１０は、リモートマシン３０’とのアプリケーションストリーミングセッションを確立し、複数のアプリケーションファイル内の少なくとも１つのアプリケーションファイルを検索する。この実施態様の一例では、ローカルマシン１０は、複数のアプリケーションファイルのサブセットを検索し、このサブセットは、ローカルマシン１０がネットワークに接続されていない時に、アプリケーションプログラムを実行するのに必要な各々のファイルを含む。ローカルマシン１０は、サブセットをローカルマシン１０上のキャッシュ内に記憶する。
【０４１３】
予め決められた期間内のある時点で、ローカルマシン１０は、ネットワークから切断され、アプリケーションプログラムにアクセスするための要求をローカルマシン１０のユーザから受信する。この実施態様の一例では、ローカルマシン１０は、ラップトップなどのデバイスであり、ローカルマシン１０のユーザは、航空機など、ネットワークに対する接続を禁止する環境に存在する。要求をユーザから受信後、ローカルマシン１０は、複数のアプリケーションファイルからのアプリケーションファイルをキャッシュから検索し、アプリケーションプログラムを実行する。
【０４１４】
（実施例８）
別の実施態様では、ローカルマシン１０は、アプリケーションプログラムの選択された実行方法の識別表示、およびアプリケーションプログラムを含む複数のアプリケーションファイルに対するアクセスを提供するリモートマシン３０の識別表示を受信する。ローカルマシン１０は、実行のためにローカルマシン１０上に存在する第１クライアントエージェントの識別表示を受信し、アプリケーションストリーミングクライアントなどの複数のアプリケーションファイルを検索し得る。
【０４１５】
この実施態様の一例では、ローカルマシン１０は、起動前の分析を自発的に正常に完了することができない。ローカルマシン１０には、特定のデバイスドライバ、またはオペレーティングシステムなど、アプリケーションプログラムの要件に適合する必要がある特性がない場合がある。ローカルマシン１０には、セキュリティポリシーに適合する必要がある特性、たとえば、特定のアクティブディレクトリ内のメンバーシップ、またはプライベートネットワークにアクセスするための承認をがない場合がある。ローカルマシン１０は、アプリケーションプログラムの要件と矛盾するマシンのタイプ、たとえば計算集約的なアプリケーションプログラムにアクセスしようとするパーソナルデジタルアシスタント、またはプライベートネットワーク上のリモートマシンによりホストされる安全なアプリケーションを実行しようとするキオスクにある公共マシンなどである場合がある。
【０４１６】
ローカルマシン１０は、ローカルマシン１０には、アプリケーションプログラムにアクセスするために必要な少なくとも１つの特性がないという決定に応じて、アプリケーションストリーミングセッション全体で複数のアプリケーションファイルを検索しないことを決定する。ローカルマシン１０は、識別された第１クライアントエージェントを実行するのではなく、ローカルマシン１０上に存在する第２クライアントエージェントを実行する。この実施態様の一例では、ローカルマシン１０は、第２クライアントエージェントの識別表示を受信し、起動前の分析を正常に完了しない場合に実行する。ローカルマシン１０は、リモートマシン３０’’上のアプリケーションプログラムの実行を要求する。第２クライアントエージェントは、リモートマシン３０’’上のアプリケーションプログラムの実行により生成されるアプリケーション出力データを受信する。第２クライアントエージェントは、アプリケーション出力データをローカルマシン１０上に表示する。
【０４１７】
（実施例９）
一実施態様では、ネットワークの管理者は、ローカルマシン１０のユーザに対し、アプリケーションプログラムに対するアクセスを提供する。管理者は、アプリケーションをリモートマシン３０’上で実行し、アプリケーションプログラムを含む複数のアプリケーションファイルを生成する。アプリケーションは、グラフィカルユーザインターフェースを含み得る。管理者は、グラフィカルユーザインターフェースを使用して、アプリケーションプログラム、およびアプリケーションプログラムに関連するインストーラプログラムを識別し、アプリケーションプログラムに対するアクセスを承認する際に適用されるポリシーを画定し、提供されるアクセスのタイプに関する特性、たとえばアプリケーションプログラムにアクセスするか、またはアプリケーションプログラムを実行しようとするローカルマシン１０が履行するべき要件を指定することができる。管理者は、全体のアプリケーションプログラム、またはアプリケーションプログラムの一部分、たとえばアップグレードもしくはパッチなどをインストールするインストーラプログラムを指定し得る。
【０４１８】
この実施態様の一例では、リモートマシン３０はパッケージ機構５３０を含む。パッケージ機構５３０は、隔離環境５３２内のインストーラプログラムをリモートマシン３０上で実行する。インストーラプログラムの実行によって、アプリケーションプログラムに関連する少なくとも１つのアプリケーションファイルが、隔離環境５３２内にインストールされる。リモートマシン３０は、ファイルシステムフィルタドライバ５３４を含むことができ、ファイルシステムフィルタドライバ５３４は、インストーラプログラムにより要求を傍受し、アプリケーションファイルをローカルマシン１０上にインストールし、要求を隔離環境５３２にリダイレクトすることによって、アプリケーションファイルを隔離環境５３２内にインストールすることを保証する。パッケージ機構５３０は、ファイルシステムフィルタドライバ５３４を使用して、隔離環境５３２内にインストールされた各々のアプリケーションファイルの記録を維持する。
【０４１９】
インストーラプログラムは、複数のアプリケーションファイルを隔離環境５３２内にインストールし得る。パッケージ機構５３０は、複数のアプリケーションファイル内のアプリケーションファイルの一覧を含むファイルを生成する。このファイルは、複数のアプリケーションファイルに関連する情報、たとえば、複数のアプリケーションファイルが構成するアプリケーションプログラムのタイプ、アプリケーションプログラムのバージョン、アプリケーションプログラムに関連する実行前提条件、およびポリシー要件、たとえば特定のアプリケーションプログラムに必要な実行方法を含み得る。パッケージ機構５３０は、複数のアプリケーションファイルおよびファイルをリモートマシン３０’上に記憶する。
【０４２０】
一実施態様では、ネットワークの管理者は、既存のアプリケーションプログラム、またはアプリケーションプログラムを含む複数のアプリケーションファイル内のアプリケーションファイルのアップデートバージョンを含むアプリケーションプログラムを識別する。
【０４２１】
Ｃ．クライアント−サーバ通信を加速するためのシステムおよび方法
本発明の一実施態様は、クライアント−サーバ通信を加速するためのシステムおよび方法を目的とする。これらのシステムおよび方法は、単独で、または組み合わせて使用することができる、上記のコンピューティング環境を提供する任意のシステムおよび方法に関連して使用することができる。特に、加速技術の４つの一般的なカテゴリについて説明する。
【０４２２】
１．動的に生成されたオブジェクトのキャッシング：実施態様によっては、クライアント−サーバ通信は、データ通信ネットワーク内の動的に生成されたオブジェクトのキャッシングを行うアプライアンス１２５０によって加速される。
【０４２３】
２．接続プーリング：実施態様によっては、クライアント−サーバ通信は、接続プーリング技術を実行するアプライアンス１２５０によって加速される。
【０４２４】
３．統合キャッシング：別の実施態様では、クライアント−サーバ通信は、複数の加速技術と統合されたキャッシングを実行するアプライアンス１２５０によって加速される。
【０４２５】
４．クライアント側の加速：さらに別の実施態様では、クライアント−サーバ通信は、１つまたは複数の加速技術を実行するクライアント１０上で実行するプログラムによって加速される。
【０４２６】
１．動的に生成されたオブジェクトのキャッシング
本明細書でより詳細に説明するように、一実施態様では、アプライアンス１２５０は、オペレーティングシステムのカーネルレベルにおけるキャッシングの機能を、１つまたは複数のその他の処理タスクと統合することができ、その他の処理タスクとしては、解読、解凍、または認証および／または承認を含むが、これらだけに限らない。こうした一例のアーキテクチャについて、図２７に関連して本明細書で説明するが、本明細書で説明する動作を実践する際に、その他のアーキテクチャを使用してよい。
【０４２７】
図２７は、アプライアンス１２５０の一例のアーキテクチャ３２００を示す。上記のとおり、アーキテクチャ３２００は、単に具体的に示すために記載するのであって、制限する意図はない。図２に示すように、一例のアーキテクチャ３２００は、ハードウェア層３２０６、並びにユーザ空間３２０２およびカーネル空間３２０４に分割されたソフトウェア層から成る。
【０４２８】
ハードウェア層３２０６は、カーネル空間３２０４およびユーザ空間３２０２内のプログラムおよびサービスが上で実行されるハードウェア要素を提供する。ハードウェア層３２０６は、カーネル空間３２０４およびユーザ空間３２０２内のプログラムおよびサービスが、内部および外部でアプライアンス１２５０に関連するデータを通信することを可能にする構造および要素も提供する。図２７に示すように、ハードウェア層３２０６は、ソフトウェアプログラムおよびサービスを実行するための処理ユニット３２６２、ソフトウェアおよびデータを記憶するためのメモリ３２６４、ネットワークを通してデータを伝送および受信するためのネットワークポート３２６６、並びにネットワークを通して伝送および受信されたデータのセキュアソケットレイヤー処理に関連する機能を実行する暗号化プロセッサ３２６０を含む。実施態様によっては、中央処理ユニット３２６２は、単一プロセッサ内で暗号化プロセッサ３２６０の機能を実行し得る。さらに、ハードウェア層３２０６は、処理ユニット３２６２および暗号化プロセッサ３２６０の各々に複数のプロセッサを備えることができる。アプライアンス１２５０のハードウェア層３２０６は、一般に暗号化プロセッサ３２６０で示されているが、プロセッサ３２６０は、セキュアソケット層（ＳＳＬ）、またはトランスポート層セキュリティ（ＴＬＳ）プロトコルなどの任意の暗号化プロトコルに関連する機能を実行するプロセッサでよい。実施態様によっては、プロセッサ３２６０は汎用プロセッサ（ＧＰＰ）でよく、さらに他の実施態様では、任意のセキュリティ関連プロトコルの処理を実行するために実行可能なインストラクションを有する場合がある。
【０４２９】
アプライアンス１２５０のハードウェア層３２０６は、図２７に特定の要素で示されているが、アプライアンス１２５０のハードウェア部分または構成要素は、本明細書の図１Ｃおよび１Ｄに関連して図示および説明されているコンピューティングデバイス１３５などのコンピューティングデバイスの任意のタイプもしくは形式の要素、ハードウェア、またはソフトウェアを含むことができる。実施態様によっては、アプライアンス１２５０は、サーバ、ゲートウェイ、スイッチ、ブリッジ、またはその他のタイプの計算またはネットワークデバイスを備え、これらに関連する任意のハードウェアおよび／またはソフトウェア要素を有することができる。
【０４３０】
アプライアンス１２５０のオペレーティングシステムは、使用可能なシステムメモリをカーネル空間３２０４およびユーザ空間３２０４に割り当て、管理するか、あるいは分離する。一例のソフトウェアアーキテクチャ３２００では、オペレーティングシステムは、任意のタイプおよび／または形式のＵｎｉｘ（登録商標）オペレーティングシステムでよい。したがって、アプライアンス１２５０は、任意のオペレーティングシステム、たとえば、任意のバージョンのＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）  オペレーティングシステム、Ｍａｃｉｎｔｏｓｈコンピュータ用の任意のバージョンのＭａｃ  ＯＳ（登録商標）、任意の埋め込みオペレーティングシステム、任意のネットワークオペレーティングシステム、任意のリアルタイムオペレーティングシステム、任意のオープンソースオペレーティングシステム、任意の独自オペレーティングシステム、モバイルコンピューティングデバイスまたはネットワークデバイス用の任意のオペレーティングシステム、アプライアンス１２５０上で実行可能か、または本明細書に記載する動作を実行する任意のその他のオペレーティングシステムを実行している可能性がある。
【０４３１】
カーネル空間３２０４は、任意のデバイスドライバ、カーネル拡張、またはその他のカーネル関連ソフトウェアを含むカーネル３２３０を実行するために予約されている。当業者は周知しているように、カーネル３２３０は、オペレーティングシステムのコアであり、アプリケーション１２５０のハードウェアリソースおよびハードウェア関連要素に対するアクセス、これらの制御および管理を提供する。一実施態様によると、カーネル空間３２０４は、キャッシュマネジャー３２３２に関連して動作するある数のネットワークサービスまたはプロセスも含み、統合キャッシュと呼ばれることもあり、その利点は、本明細書でさらに詳細に説明する。さらに、カーネル３２３０の実施態様は、デバイス１２５０によってインストール、構成、あるいは使用されるオペレーティングシステムの実施態様によって決まるであろう。
【０４３２】
一実施態様では、デバイス１２５０は、クライアント１０および／またはサーバ３０と通信するため、１つのネットワークスタック３２６７、たとえばＴＣＰ／ＩＰベースのスタックを含む。一実施態様では、ネットワークスタック３２６７は、第１ネットワーク、たとえばネットワーク４０、および第２ネットワーク４０と通信するために使用される。実施態様によっては、デバイス１２５０は、クライアント１０のＴＣＰ接続などの第１トランスポート層接続を終端させて、クライアント１０によって使用されるサーバ３０に対する第２トランスポート層接続を確立し、たとえば、第２トランスポート層接続は、アプライアンス１２５０およびサーバ３０で終端する。第１および第２トランスポート層接続は、単一ネットワークスタック３２６７を介して確立することができる。他の実施態様では、デバイス１２５０は、複数のネットワークスタック、たとえば３２６７および３２６７’を含むことができ、第１トランスポート層接続は、１つのネットワークスタック３２６７で確立または終端し、第２トランスポート層接続は、第２ネットワークスタック３２６７’で確立または終端し得る。たとえば、１つのネットワークスタックは、第１ネットワーク上でネットワークパケットを受信および伝送し、第２ネットワークスタックは、第２ネットワーク上でネットワークパケットを受信および伝送し得る。一実施態様では、ネットワークスタック３２６７は、アプライアンス１２５０によって伝送される１つまたは複数のネットワークパケットを待ち行列に入れるためのバッファ３２４３を含む。
【０４３３】
図２７に示すように、カーネル空間３２０４は、キャッシュマネジャー３２３２、高速層２〜７統合パケットエンジン３２４０、暗号化エンジン３２３４、ポリシーエンジン３２３６、およびマルチプロトコル圧縮論理３２３８を含む。これらの構成要素、またはプロセス３２３２、３２４０、３２３４、３２３６、および３２３８を、ユーザ空間３２０２ではなくカーネル空間３２０４またはカーネルモードで実行すると、これらの構成要素の各々の性能が単独で、または組み合わせて改善される。カーネル動作は、これらの構成要素またはプロセス３２３２、３２４０、３２３４、３２３６、および３２３８が、デバイス１２５０のオペレーティングシステムのコアアドレス空間で実行されることを意味する。たとえば、カーネルモード内の暗号化エンジン３２３４は、暗号化および解読動作をカーネルに移動することによって暗号化性能を改善し、それによって、カーネルモードのメモリ空間またはカーネルスレッドと、ユーザモードのメモリ空間またはスレッドとの間のトランザクションの数を減少させる。たとえば、カーネルモード内で取得したデータは、ユーザモードで実行されるプロセスまたはスレッドに、たとえばカーネルレベルデータ構造からユーザレベルデータ構造に渡すか、またはコピーする必要はない場合がある。別の態様では、カーネルモードとユーザモードとの間のコンテキストスイッチの数も減少する。さらに、任意の構成要素またはプロセス３２３２、３２４０、３２３５、３２３６、および３２３８の同期化、またはこれらの間の通信は、カーネル空間３２０４でより効率的に実行することができる。
【０４３４】
実施態様によっては、構成要素３２３２、３２４０、３２３４、３２３６、および３２３８の任意の部分は、カーネル空間３２０４内で実行または動作することができ、構成要素３２３２、３２４０、３２３４、３２３６、および３２３８の他の部分は、ユーザ空間３２０２で実行または動作することができる。一実施態様では、カーネルレベルデータ構造は、１つまたは複数のネットワークパケットの任意の部分、たとえば、クライアント１０からの要求、またはサーバ３０からの応答を含むネットワークパケットに対するアクセスを提供するために使用される。実施態様によっては、カーネルレベルデータ構造は、ネットワークスタック３２６７に対するトランスポート層ドライバインターフェースまたはフィルタを介して、パケットエンジン３２４０によって取得され得る。カーネルレベルデータ構造は、ネットワークスタック３２６７、ネットワークスタック３２６７によって受信または送信されるネットワークトラフィックまたはパケットに関連するカーネル空間３２０４を介してアクセス可能な任意のインターフェースおよび／またはデータを含み得る。他の実施態様では、カーネルレベルデータ構造は、構成要素またはプロセスの所望の動作を実行するために、任意の構成要素またはプロセス３２３２、３２４０、３２３４、３２３６、および３２３８によって使用され得る。一実施態様では、構成要素３２３２、３２４０、３２３４、３２３６、および３２３８は、カーネルレベルデータ構造を使用する場合、カーネルモード３２０４で動作し、別の実施態様では、構成要素３２３２、３２４０、３２３４、３２３６、および３２３８は、カーネルレベルデータ構造を使用する場合、ユーザモードで動作する。実施態様によっては、カーネルレベルデータ構造は、第２カーネルレベルデータ構造、または所望の任意のユーザレベルデータ構造にコピーするか、または渡すことができる。
【０４３５】
キャッシュマネジャー３２３２は、任意のタイプおよび形式のコンテンツ、たとえばオブジェクト、または起源サーバ３０によって供給され、動的に生成されるオブジェクトなどのキャッシュアクセス、制御、および管理を提供するために、ソフトウェア、ハードウェア、またはソフトウェアとハードウェアとの任意の組合せを含み得る。キャッシュマネジャー３２３２によって処理および記憶されるデータ、オブジェクト、またはコンテンツは、任意の形式のデータ、たとえばマークアップ言語を含むか、または任意のプロトコルを介して通信し得る。実施態様によっては、キャッシュマネジャー３２３２は、どこかに記憶されている最初のデータ、または以前に計算、生成、または伝送されたデータを複製し、この場合、最初のデータは、キャッシュメモリ要素の解釈に関連してフェッチ、計算、あるいは取得するために、より長いアクセス時間を必要とする場合がある。データが、キャッシュメモリ要素内に記憶されると、最初のデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスすることによって、その後使用することができる。実施態様によっては、キャッシュメモリ要素は、デバイス１２５０のメモリ３２６４内にデータオブジェクトを含む。他の実施態様では、キャッシュメモリ要素は、メモリ３２６４より高速のアクセス時間を有するメモリを含み得る。別の実施態様では、キャッシュメモリ要素は、デバイス１２５０の任意のタイプおよび形式の記憶素子、たとえばハードディスクの一部分を含み得る。実施態様によっては、処理ユニット３２６２は、キャッシュマネジャー３２３２によって使用されるキャッシュメモリを提供し得る。さらに他の実施態様では、キャッシュマネジャー３２３２は、キャッシングデータ、オブジェクト、およびその他のコンテンツのためのメモリ、記憶装置、または処理ユニットの任意の一部分、またはこれらの組合せを使用し得る。
【０４３６】
さらに、キャッシュマネジャー３２３２は、本明細書に記載する技術の任意の実施態様を履行するための任意の論理、機能、規則、または動作を含む。たとえば、キャッシュマネジャー３２３２は、無効期間の満了に基づいて、つまり、クライアント１０またはサーバ３０から無効コマンドを受信後、オブジェクトを無効にする論理または機能を含む。実施態様によっては、キャッシュマネジャー３２３２は、カーネル空間３２０４、および他の実施態様では、ユーザ空間３２０２で実行するプログラム、サービス、プロセス、またはタスクとして動作し得る。一実施態様では、キャッシュマネジャー３２３２の第１部分はユーザ空間３２０２内で実行され、第２部分はカーネル空間３２０４内で実行される。実施態様によっては、キャッシュマネジャー３２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、または任意のその他のタイプの集積回路、たとえばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブルロジックデバイス（ＰＬＤ）、またはアプリケーション固有集積回路（ＡＳＩＣ）を含み得る。
【０４３７】
ポリシーエンジン３２３６は、たとえば知的統計エンジン、またはその他のプログラマブルアプリケーションを含み得る。一実施態様では、ポリシーエンジン３２３６は、ユーザが、キャッシングポリシーを識別し、指定、画定、または構成することを可能にする構成機構を提供する。ポリシーエンジン３２３６は、実施態様によっては、ユーザが選択するキャッシングポリシーの決定を可能にするため、ルックアップテーブルまたはハッシュテーブルなどのデータ構造をサポートするためのメモリに対するアクセスも有する。他の実施態様では、ポリシーエンジン３２３６は、セキュリティ、ネットワークトラフィック、ネットワークアクセス、圧縮、またはアプライアンス１２５０によって行われる任意のその他の機能もしくは動作のほかに、アプライアンス１２５０によってキャッシュされるオブジェクト、データ、またはコンテンツに対するアクセス、これらの制御、および管理を決定および提供するための任意の論理、規則、機能、または動作を含み得る。実施態様によっては、ポリシーエンジン３２３６は、ポリシーエンジン４０６の機能と統合され得る。一実施態様では、ポリシーエンジン３２３６は、収集エージェント４０４によって提供される情報に基づくキャッシングポリシー決定を決定し得る。実施態様によっては、ポリシーエンジン３２３６は、アプリケーションの実行に基づくキャッシングポリシー決定を決定し得る。一実施態様では、ポリシーエンジンは、アプリケーションがクライアント１０にストリーミングされるかどうかに基づいて、キャッシングポリシー決定を決定し得る。特定のキャッシングポリシーのさらに他の例は、本明細書でさらに詳細に説明する。
【０４３８】
暗号化エンジン３２３４は、任意のセキュリティ関連のプロトコル、たとえばＳＳＬもしくはＴＬＳ、またはこれらに関連する任意の機能の処理を取り扱うための任意の論理、ビジネス規則、機能を含む。たとえば、暗号化エンジン３２３４は、アプライアンス１２５０を介して通信されるネットワークパケット、またはその任意の部分を暗号化または解読する。暗号化エンジン３２３４は、クライアント１０、サーバ３０、またはアプライアンス１２５０のために、ＳＳＬまたはＴＬＳ接続も設定または確立し得る。したがって、暗号化エンジン３２３４は、ＳＳＬ処理のオフロードおよび加速を提供する。一実施態様では、暗号化エンジン３２３４は、クライアント１０とサーバ３０との間に仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。実施態様によっては、暗号化エンジン３２３４は、暗号化プロセッサ３２６０と通信する。他の実施態様では、暗号化エンジン３２３４は、暗号化プロセッサ３２６０上で実行される実行可能なインストラクションを含む。
【０４３９】
マルチプロトコル圧縮エンジン３２３８は、ネットワークパケットの１つまたは複数のプロトコル、たとえば、デバイス１２５０のネットワークスタック３２６７によって使用される任意のプロトコルを圧縮するための任意の論理、ビジネス規則、機能、または動作を含む。一実施態様では、マルチプロトコル圧縮エンジン３２３８は、クライアント１０とサーバ３０との間で双方向に、メッセージングアプリケーションプログラミングインターフェース（ＭＰＡＩ）（電子メール）を含む任意のＴＣＰ／ＩＰベースのプロトコル、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立計算アーキテクチャ（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバＩＰ（ＶｏＩＰ）プロトコルを圧縮する。他の実施態様では、マルチプロトコル圧縮エンジン３２３８は、プロトコルに基づくハイパーテキストマークアップ言語（ＨＴＭＬ）の圧縮を提供し、実施態様によっては、拡張可能マークアップ言語（ＸＭＬ）など、任意のマークアップ言語を提供する。一実施態様では、マルチプロトコル圧縮エンジン３２３８は、アプライアンス１２５０通信のために、アプライアンス１２５０用に設計された任意のプロトコルなど、任意の高性能プロトコルの圧縮を提供する。別の実施態様では、マルチプロトコル圧縮エンジン３２３８は、修正トランスポート制御プロトコル、たとえばトランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択承認を含むＴＣＰ（ＴＣＰ−ＳＡＣＫ）、ＴＣＰラージウィンドウ、混雑予測プロトコル、たとえばＴＣＰ−Ｖｅｇａｓプロトコル、およびＴＣＰスプーフィングプロトコルを使用して、任意のロードまたは任意の通信を圧縮する。
【０４４０】
したがって、マルチプロトコル圧縮エンジン３２３８は、ユーザが、デスクトップクライアント、たとえばＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋおよび非ウェブシンクライアント、たとえばＯｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌなどの一般的な企業アプリケーション、さらにポケットＰＣなどのモバイルクライアントを介してアプリケーションにアクセスするための動作を加速する。実施態様によっては、マルチプロトコル圧縮エンジン３２３８は、カーネルモード３２０４で実行し、ネットワークスタック３２６７にアクセスするパケット処理エンジン３２４０と統合することによって、任意のアプリケーション層プロトコルなどのＴＣＰ／ＩＰプロトコルによって行われる任意のプロトコルを圧縮することができる。
【０４４１】
一般にパケット処理エンジンまたはパケットエンジンとも呼ばれる高速層２〜７統合パケットエンジン３２４０は、ネットワークポート３２６６を通してアプライアンス１２５０を介して受信および伝送されるパケットのカーネルレベル処理の管理に関与する。高速層２〜７統合パケットエンジン３２４０は、ネットワークパケットの受信、またはネットワークパッカーなどの受信などの処理時に、１つまたは複数のネットワークパケットを待ち行列に入れるためのバッファを備えることができる。さらに、高速層２〜７統合パケットエンジン３２４０は、１つまたは複数のネットワークスタック３２６７と通信し、ネットワークポート３２６６を介して、ネットワークパケットを送信および受信する。高速層２〜７統合パケットエンジン３２４０は、暗号化エンジン３２３４、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、およびマルチプロトコル圧縮論理３２３８に関連して動作する。特に、暗号化エンジン３２３４は、パケットのＳＳＬ処理を実行するように構成され、ポリシーエンジン３２３６は、要求レベルのコンテンツの切り替え、および要求レベルのキャッシュのリダイレクトなど、トラフィック管理に関連する機能を実行するように構成され、マルチプロトコル圧縮論理３２３８は、データの圧縮および解凍に関連する機能を実行するように構成される。
【０４４２】
高速層２〜７統合パケットエンジン２４０は、パケット処理タイマー３２４２を含む。一実施態様では、パケット処理タイマー３２４２は、着信、つまり受信、または送出、つまり伝送されるネットワークパケットの処理をトリガするため、１つまたは複数の時間間隔を提供する。実施態様によっては、高速層２〜７統合パケットエンジン３２４０は、タイマー３２４２に応じてネットワークパケットを処理する。パケット処理タイマー３２４２は、イベント、間隔、または発生を通知、トリガ、または通信するため、任意のタイプおよび形式の信号をパケットエンジン３２４０に提供する。多くの実施態様では、パケット処理タイマー３２４２は、たとえば１００ミリ秒、５０ミリ秒、または２５ミリ秒など、ミリ秒台で動作する。たとえば、実施態様によっては、パケット処理タイマー３２４２は、時間間隔を提供するか、あるいは、ネットワークパケットが、高速層２〜７統合パケットエンジン３２４０によって、１０ミリ秒の時間間隔で、他の実施態様では５ミリ秒の時間間隔、さらに他の実施態様では、３、２、または１ミリ秒の時間間隔で処理されるようにする。高速層２〜７統合パケットエンジン３２４０は、動作時に暗号化エンジン３２３４、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、およびマルチプロトコル圧縮エンジン３２３８とインターフェースするか、統合されるか、または通信し得る。したがって、暗号化エンジン３２３４、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、およびマルチプロトコル圧縮論理３２３８の任意の論理、機能、または動作は、パケット処理タイマー３２４２および／またはパケットエンジン３２４０に応じて実行することができる。したがって、暗号化エンジン３２３４、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、およびマルチプロトコル圧縮論理３２３８の任意の論理、機能、または動作は、パケット処理タイマー３２４２を介して提供される時間間隔の粒度で、たとえば１０ミリ秒以下の時間間隔で実行することができる。たとえば、一実施態様では、キャッシュマネジャー３２３２は、高速層２〜７統合パケットエンジン３２４０および／またはパケット処理タイマー３２４２に応じて、キャッシュされた任意のオブジェクトの無効化を実行し得る。別の実施態様では、キャッシュされたオブジェクトの満了または無効化時間は、１０ミリ秒など、パケット処理タイマー３２４２の時間間隔と同じ粒度台に設定することができる。
【０４４３】
ユーザ空間３２０２は、カーネル空間３２０４と違って、ユーザモードアプリケーションまたはプログラムによって使用されるか、あるいはユーザモードで実行しているオペレーティングシステムのメモリ空間または一部である。ユーザモードアプリケーションは、カーネルサービスにアクセスするために、カーネル空間３２０４に直接アクセスして、サービスコールを使用することはできない。図２７に示すように、アプライアンス１２５０のユーザ空間３２０２は、グラフィカルユーザインターフェース（ＧＵＩ）３２１０、コマンドラインインターフェース（ＣＬＩ）３２１２、シェルサービス３２１４、健全性監視プログラム３２１６、およびデーモンサービス３２１８を含む。ＧＵＩ２１０およびＣＬＩ３２１２は、システム管理者またはその他のユーザが、アプライアンス１２５０の動作と相互作用し、この動作を制御することを可能にする手段を提供する。ＧＵＩ２１０およびＣＬＩ３２１２は、システム管理者またはその他のユーザが、アプライアンス１２５０のオペレーティングシステムを介して、ユーザ空間３２０２またはカーネル空間３２０４で、アプライアンス１２５０の動作と相互作用し、これを制御することを可能にする手段を提供する。ＧＵＩ３２１０は、任意のタイプおよび形式のグラフィカルユーザインターフェースでよく、テキスト、グラフィックを介して、あるいは任意のタイプのプログラムまたはアプリケーション、たとえばブラウザを介して提示され得る。ＣＬＩ３２１２は、任意のタイプおよび形式のコマンドラインまたはテキストベースのインターフェース、たとえばオペレーティングシステムによって提供されるコマンドラインでよい。たとえば、ＣＬＩ３２１２は、ユーザがオペレーティングシステムと相互作用することを可能にするツールであるシェルを含み得る。実施態様によっては、ＣＬＩ３２１２は、ｂａｓｈ、ｃｓｈ、ｔｃｓｈ、またはｋｓｈタイプのシェルを介して提供され得るシェルサービス３２１４は、ユーザが、ＧＵＩ３２１０および／またはＣＬＩ３２１２を介して、アプライアンス１２５０との相互作用をサポートするためのプログラム、サービス、タスク、プロセス、または実行可能なインストラクションを含む。
【０４４４】
健全性監視プログラム３２１６は、ネットワークシステムが適切に機能しており、ユーザが、要求したコンテンツをネットワークを通して受信していることを監視、チェック、報告、および保証するために使用される。健全性監視プログラム３２１６は、アプライアンス１２５０の任意の活動を監視するための論理、規則、機能、または動作を提供するための１つまたは複数のプログラム、サービス、タスク、プロセス、または実行可能なインストラクションを含む。実施態様によっては、健全性監視プログラム３２１６は、アプライアンス１２５０を介して渡される任意のネットワークトラフィックを傍受し、検査する。他の実施態様では、健全性監視プログラム３２１６は、任意の適切な手段および／または機構により、以下の１つまたは複数とインターフェースする：暗号化エンジン３２３４、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、マルチプロトコル圧縮論理３２３８、パケットエンジン３２４０、デーモンサービス３２１８、およびシェルサービス３２１４。したがって、健全性監視プログラム３２１６は、アプライアンス１２５０の健全性を決定するために、任意のアプリケーションプログラミングインターフェース（ＡＰＩ）をコールし得る。たとえば、健全性監視プログラム３２１６は、プログラム、プロセス、サービス、またはタスクがアクティブであり、現在実行されているかどうかをチェックするために、ステータス照会を定期的にピングまたは送信し得る。別の例では、健全性監視プログラム３２１６は、アプライアンス１２５０の任意の部分で任意の状況、ステータス、またはエラーを決定するために、任意のプログラム、プロセス、サービス、またはタスクによって提供される任意のステータス、エラー、または履歴ログをチェックし得る。
【０４４５】
デーモンサービス３２１８は、連続的またはバックグラウンドで実行され、アプライアンス１２５０によって受信される定期的なサービス要求を処理するプログラムである。実施態様によっては、デーモンサービスは、必要に応じて、他のプログラムまたはプロセス、たとえば別のデーモンサービス３２１８などに要求を回送し得る。当業者は周知しているように、デーモンサービス３２１８は、操作者が存在しなくても、連続的または定期的にシステム全体の機能、たとえばネットワーク制御を実行するか、または任意の所望のタスクを実行するために動作し得る。実施態様によっては、１つまたは複数のデーモンサービス３２１８はユーザ空間３２０２で実行され、他の実施態様では、１つまたは複数のデーモンサービス３２１８はカーネル空間で実行される。
【０４４６】
１つまたは複数の動的に生成されるオブジェクトなどの動的コンテンツは、図１Ａに示すように、１つまたは複数のクライアント１０、ローカル、またはリモートからのオブジェクト要求を処理するアプリケーション、もしくは起源サーバ３０と呼ばれるサーバ、および／またはバックエンドデータベースによって生成され得る。これらのアプリケーションまたはデータベースは、クライアントから受信する入力に関連するデータを含むデータを処理するため、これらのデータベースおよびアプリケーションによって供給される応答オブジェクトは変化し得る。起源サーバ内のこれらのアプリケーションまたはデータベースによって生成された以前のオブジェクトは、もはやフレッシュではなくなり、したがって、もはやキャッシュによって記憶されない。たとえば、一連の入力が同じであると仮定すると、第１インスタンスの動的に生成されたオブジェクトは、第２インスタンスの動的に生成されたオブジェクトとは異なる場合がある。別の例では、同じオブジェクトは、一連の異なる入力で動的に生成され、その結果、オブジェクトの第１インスタンスは、オブジェクトの第２インスタンスとは別に生成される。
【０４４７】
ネットワーク性能を改善するために、アプライアンス１２５０は、以下で詳細に説明するように、様々な方法により、動的に生成されたコンテンツをキャッシュする際に生じる問題に対処するうように設計および構成される。本明細書に記載するいくつかの実施態様では、アプライアンス１２５０は、動的に生成されるとともにキャッシュ内に記憶されたコンテンツを、より効率的かつ効果的に無効化するための１つまたは複数の一連の技術を含む。さらに、アプライアンスは、フラッシュクラウドのための制御およびキャッシングを実行する技術を組み込むことができる。キャッシュメモリは、一般に、オブジェクトに関する要求に対するすべての応答が、キャッシュ不能とマークされていない限り、これらのオブジェクトを記憶する。本明細書に記載されいてるとおり、動的に生成されたコンテンツの効果的なキャッシングには、起源サーバで変更されたキャッシュメモリ内のオブジェクトを適時無効化することを可能にする技術を要する。適時に無効化することによって、キャッシュは、古いコンテンツを供給するのを防止し、これは、特にコンテンツに対する変更が不規則に行われる場合、動的に生成されたコンテンツの特に問題になるタスクである。動的に生成されたコンテンツを確実に適時無効化するために、ある数の技術を以下に記載する。
【０４４８】
ａ．統合機能
一態様では、動的に生成されたオブジェクトのキャッシングは、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン３２３８の機能、論理、または動作を、パケット処理タイマー３２４２に応じて、高速層２〜７を統合されたパケットエンジン３２４０のパケット処理動作と統合する技術に関連する。たとえば、キャッシュマネジャー３２３２の動作は、ネットワークパケットの受信または伝送など、パケット処理動作に使用されるパケット処理タイマー３２４２の時間間隔内で実行することができる。一実施態様では、パケット処理動作を統合するか、および／またはパケット処理タイマーを使用することにより、キャッシュマネジャー３２３２は、以下でさらに詳細に説明するとおり、満了時間を非常に小さい時間間隔に短縮して、オブジェクトをキャッシュすることができる。他の実施態様では、キャッシュマネジャー３２３２は、パケット処理タイマー３２４２に応じて、オブジェクトキャッシュする非常に短い期間内で、オブジェクトを無効化するための無効化コマンドを受信すること可能である。
【０４４９】
図２８Ａに示す方法３３００は、高速層２〜７を統合されたパケットエンジンまたはパケット処理エンジン３２４０を処理する際に、またはこうした処理のための時間間隔に関連して、ある動作を実行するように、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン３２３８に要求するための技術の一実施態様を示す。簡潔に説明すると、方法３３００のステップでは、デバイス１２５０はネットワークパケットを受信し、あるいはネットワークパケットを伝送するように要求される。ステップ３３１５では、デバイス３１２５０は、パケット処理タイマー３２４２に応じて、ネットワークパケットを処理するようにパケット処理エンジン３２４０に要求する。パケット処理動作の一部として、またはパケット処理動作に関連して、ステップ３３２０では、パケット処理エンジン２４０は、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン３２３８に対し、キャッシュされたオブジェクトに関する動作を実行するように要求する。ステップ３３２５では、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン２３４、および／またはマルチプロトコル圧縮エンジン３２３８は、要求された動作を実行し、この動作には、本明細書に記載する技術の任意の１つまたは組合せを含み得る。一実施態様では、キャッシュマネジャー３２３２は、キャッシュされたオブジェクトの無効化を決定し、キャッシュされた無効なオブジェクトをマークする。実施態様によっては、キャッシュマネジャー３２３２は、パケット処理エンジン３２４０による要求に応じて、無効なオブジェクトをフラッシュする。キャッシュマネジャー３２３２は、これらの動作をパケット処理タイマー３２４２に応じて実行しているため、オブジェクトの無効化は、ミリ秒台の期間内に行うことができ、オブジェクトは、１０ミリ秒など、パケット処理タイマー３２４２によって提供される時間間隔台で満了する。
【０４５０】
さらに詳細な方法３３００の場合、ステップ３３１０では、アプライアンス１２５０は、１つまたは複数のネットワークパケットを受信し、および／または１つまたは複数のネットワークパケットを伝送する。実施態様によっては、アプライアンス１２５０は、ネットワーク４０またはネットワーク４０または４０’を通して、１つまたは複数のネットワークパケットを伝送することを要求する。別の実施態様では、アプライアンス１２５０は、１つのポート３２６６を通してネットワークパケットを受信し、同じポート３２６６または異なるポート３２６６’を通してネットワークパケットを伝送する。実施態様によっては、アプライアンス１２５０のパケットエンジン３２４０は、１つまたは複数のネットワークパケットを伝送するか、または伝送することを要求する。一実施態様では、アプライアンス１２５０は、第１ネットワーク４０を通してパケットを受信または伝送し、別の実施態様では、アプライアンス１２５０は、第２ネットワーク４０’を通してパケットを受信または伝送する。他の実施態様では、アプライアンス１２５０は、同じネットワーク４０を通してパケットを受信および伝送する。実施態様によっては、アプライアンス１２５０は、ネットワークパケットを受信し、および／または１つまたは複数のクライアント１０に伝送する。他の実施態様では、アプライアンス１２５０は、ネットワークパケットを受信し、および／または１つまたは複数のサーバ３０を通して伝送する。
【０４５１】
ステップ３３１５では、デバイス１２５０は、デバイス１２５０のネットワークポート３２６６でネットワークパケットを受信後、ネットワークパケットをデバイス１２５０から伝送する要求の後、あるいは１つまたは複数のネットワークパケットの受信および／または伝送の任意の組合せの後、パケット処理エンジン３２４０のパケット処理動作を要求またはトリガし得る。実施態様によっては、パケット処理エンジン３２４０のパケット処理動作は、パケット処理タイマー３２４２によって提供される信号を介してトリガされる。一実施態様では、パケット処理タイマー３２４２は、１つまたは複数のネットワークパケットの受信および／または伝送に関連する割り込み駆動またはイベント駆動タイマーの機能を提供し得る。実施態様によっては、パケット処理タイマー３２４２は、デバイス１２５０を介してネットワークパケットの受信および／または伝送の速度で、あるいは各々のパケットまたはパケットのバッチが処理される速度で駆動される。したがって、パケット処理タイマー３２４２は、１つまたは複数のパケット処理動作の各々のセットの後、トリガおよびリセットされ得る。別の実施態様では、パケット処理タイマー３２４２は、パケット処理エンジン３２４０をトリガするか、起動するか、またはパケット処理エンジン３２４０に信号で通知して、受信されたパケットを処理するか、または提示されたパケットを伝送するための時間間隔、等しいかまたは可変の時間間隔を提供する。図２７のデバイス１２５０に関連して上記で説明したとおり、パケット処理タイマー３２４２は、ミリ秒台で動作し、１０ミリ秒以下の間隔で時間間隔を生じ、あるいはパケット処理動作をトリガすることができる。パケット処理タイマーの粒度タイマーの機能は、様々な方法で提供し、パケット処理エンジン３２４０のパケット処理動作を実行する際に使用することができる。
【０４５２】
方法３３００のステップ３３２０では、パケット処理エンジン３２４０は、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン３２３８の１つまたは複数に対し、動作を実行するように要求する。一実施態様では、パケット処理エンジン３２４０、またはパケット処理タイマー３２４２は、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン３２３８の１つまたは複数に対する１つまたは複数の信号を生成する。パケット処理エンジン３２４０は、ネットワークパケット、あるいは１つまたは複数のパケットのパケット処理動作前、動作中、あるいは動作後の任意の時点で、動作を要求するか、あるいは信号で通知することができる。一実施態様では、パケット処理エンジン２４０は、パケット処理タイマー３２４２のトリガ後、パケット処理タイマー３２４２によって提供された時間間隔の満了後、またはパケット処理動作をネットワークパケット上で実行する前に要求を行う。別の実施態様では、１つまたは複数のパケット処理動作を実行する過程で、パケット処理エンジン３２４０は要求を行う。たとえば、関数コール内など、ある動作の実行時に、パケット処理エンジン２４０は、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン２３８の１つに対して、アプリケーションプログラミングインターフェース（ＡＰＩ）コールを行うことができる。他の実施態様では、パケット処理エンジン３２４０は、ネットワークパケット処理動作の完了後に要求を行う。
【０４５３】
ステップ３３２５では、要求された動作は、キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン３２３８の１つまたは複数によって実行される。実施態様によっては、カーネル３２０４を介して提供される任意の機能または動作は、たとえばカーネルアプリケーションプログラミングインターフェース（ＡＰＩ）を介して、実行するように要求され得る。したがって、デバイス１２５０の任意の機能は、パケット処理タイマー３２３２を介して、パケット処理のタイミングまたはタイミング間隔に関連して実行することができる。実施態様によっては、要求された動作は、パケット処理エンジン３２４０のパケット処理動作と同時に、この動作に関連して実行される。たとえば、パケット処理動作は、要求された動作の完了、または要求された動作からの応答を待ち、その後に継続する。他の実施態様では、予期された動作は、パケット処理動作と同時に実行される。たとえば、パケット処理エンジン３２４０は、動作を実行する要求を送信するが、動作からの応答を受信することを妨げるか、または待たない。図２８Ｂに示す方法３３５０に関連してさらに詳細に説明するように、パケット処理エンジン３２４０は、キャッシュマネジャー３２３２に対して、任意のキャッシュ管理機能を実行するか、たとえばオブジェクトの満了または無効化をチェックする、オブジェクトを無効とマークする、または無効か、または満了したオブジェクトをフラッシュするように要求することができる。
【０４５４】
実施態様によっては、パケット処理エンジン３２４０は、ステップ３３２０で、キャッシュマネジャー２３２に対する第１要求、および暗号化エンジン３２３４に対する第２要求など、複数の要求を送信する。他の実施態様では、パケット処理エンジン３２４０は、ステップ３３２０で、デバイス１２５０によって分配される複数の要求を含む１つの要求を、たとえばカーネル３２３０を介して、デバイス１２５０の意図された構成要素に送信する。一実施態様では、この要求は、その後互いに通信される。別の実施態様では、要求は、前の要求のステータス、結果、成功、または完了によって決まる場合がある。たとえば、ポリシーエンジン３２３６に対する第１の要求は、ネットワークパケットに関連する別のデバイスまたはユーザからのネットワークパケットを処理するためのポリシーを決定するために使用し得る。ポリシーエンジン３２３６のポリシーに基づいて、キャッシュに対する第２要求は、第１要求の結果に応じて行われるか、あるいは行われない場合がある。キャッシュマネジャー３２３２、ポリシーエンジン３２３６、暗号化エンジン３２３４、および／またはマルチプロトコル圧縮エンジン３２３８が、パケット処理エンジン３２４０を含むデバイス１２５０のカーネル空間２０４内に組み込まれると、本明細書で説明するようにデバイス１２５０の様々な動作があり、これらの動作は、パケット処理動作によってトリガするか、またはパケット処理動作と統合することができる。
【０４５５】
ｂ．無効化粒度
別の態様では、動的に生成されたオブジェクトのキャッシングは、パケット処理タイマーによって提供される時間間隔の粒度など、微細粒度の時間間隔に関連し、キャッシュによって記憶されたオブジェクトの満了時間を構成する能力をこうした微細粒度の時間間隔に組み込む。この特性は、「無効化粒度」と呼ばれる。したがって、一実施態様では、満了時間が非常に小さい時間的間隔まで減少したオブジェクトはキャッシュすることができる。他の実施態様では、パケット処理タイマーに応答するキャッシュマネジャーは、オブジェクトをキャッシュする非常に短期間の範囲内で、オブジェクトを無効化する無効化コマンドも受信する。この微細粒度を満了時間に提供することによって、キャッシュは、頻繁に、時には１秒以内に何度も変化するオブジェクトをキャッシュし、供給することができる。１つの手法は、ミリ秒台の時間増分で動作することが可能な一実施態様のデバイスによって使用されるパケット処理タイマーを強化し、１０ミリ秒以下の無効化または満了粒度を可能にすることである。対照的に、従来のキャッシュは、一般に、１秒未満の満了または無効化粒度を設定しない。
【０４５６】
次に、図２８Ｂを参照すると、パケット処理タイマー３２４２および／またはパケット処理エンジン３２４０に応じて、キャッシュされたオブジェクトを無効化または失効させる方法３３５０の一実施態様が示されている。したがって、実施態様によっては、キャッシュされたオブジェクトは、１０ミリ秒以下など、ミリ秒台で無効化または失効させることができる。概観では、方法３３５０のステップ３３５５では、キャッシュマネジャー３２３２は、パケット処理タイマー３２４２に応じて、パケット処理エンジン３２４０を介して動作を実行ための信号または要求を受信する。ステップ３３６０では、キャッシュマネジャー３２３２は、キャッシュされたオブジェクト、たとえば動的に生成されたオブジェクトは無効であるか、あるいは失効している。ステップ３３６５では、オブジェクトが無効である場合、キャッシュマネジャー３２３２は、オブジェクトを無効とマークし、ステップ３３７０では、無効なオブジェクトをキャッシュマネジャー３２３２からフラッシュする。
【０４５７】
ステップ３３５５のさらに他の詳細では、実施態様によっては、キャッシュマネジャー３２３２は、ネットワークパケット処理時の任意の時点の動作に関連して、キャッシュを実行するように信号で通知されるか、または要求され得る。一実施態様では、ステップ３３５５で、キャッシュマネジャー３２３２は、デバイス１２５０によって受信されるか、または伝送されるネットワークパケットを処理する前に、動作要求を受信する。別の実施態様では、キャッシュマネジャー３２３２は、ネットワークパケットの処理の完了後に動作要求を受信する。たとえば、パケット処理エンジン３２４０は、ネットワークパケットの処理を完了し、タイマー３２４２の次の時間間隔を待つ前、あるいは次のパケットを処理する前に、キャッシュに動作を事故するように要求する。他の実施態様では、パケット処理の動作時に、パケット処理エンジン３２４０は、動作要求をキャッシュマネジャー３２３２に連絡する。別の実施態様では、キャッシュマネジャー３２３２は、たとえばパケット処理エンジン３２４０またはパケット処理タイマー３２４２から、キャッシュマネジャー３２３２をトリガして動作を実行するという信号を受信する。実施態様によっては、この信号は、キャッシュされたオブジェクトを無効化するか、またはキャッシュされたオブジェクトの有効期限を満了させることを指示する。
【０４５８】
実施態様によっては、キャッシュマネジャー３２３２は、キャッシュマネジャー３２３２の外部の実態からキャッシュ動作を実行する要求、たとえばサーバ３０によって連絡され、パケット処理エンジン３２４０によって処理されるオブジェクトを無効化する要求を受信する場合がある。一実施態様では、キャッシュマネジャー３２３２は、オブジェクトをキャッシュしてから１０ミリ秒以内に、別の実施態様では、５ミリ秒、２ミリ秒、または１ミリ秒という短時間で無効化要求を受信し得る。他の実施態様では、キャッシュマネジャー３２３２は、キャッシュマネジャー３２３２の動作または機能、たとえばオブジェクトを無効化させるタイマーの満了に応じて、あるいは任意のキャッシュコマンドの処理時にキャッシュ動作を実行し得る。他の実施態様では、キャッシュマネジャー３２３２は、デバイス１２５０のパケット処理タイマー３２４２を使用して、キャッシュ動作をトリガする。たとえば、タイマー２３４２は、タイマー３２４２が設定可能な任意の時間間隔で、キャッシュされたオブジェクトの無効化または失効をチェックするために、キャッシュをトリガするか、または信号を送信し得る。一実施態様では、タイマー３２４２は、設定後１０ミリ秒以内に、別の実施態様では５ミリ秒、２ミリ秒、１ミリ秒という短時間でキャッシュをトリガするか、または信号を送信する。実施態様によっては、起源サーバ３０は、オブジェクトの失効時間を設定し得る。他の実施態様では、アプライアンス１２５０またはクライアント１０は、オブジェクトの失効を設定することができる。
【０４５９】
ステップ３３６０では、キャッシュマネジャー３２３２は、キャッシュ内に記憶されたオブジェクトの無効化または失効を決定する。実施態様によっては、キャッシュ内のオブジェクトは、タイマーの満了に基づいて無効化される。一実施態様では、キャッシュマネジャー３２３２は、タイマーの満了に基づいて、無効化コマンドを発行し得る。別の実施態様では、キャッシュ内に記憶されたオブジェクトは、パケット処理タイマー３２４２で設定されたタイマーなど、タイマーの満了に応じて、キャッシュマネジャー３２３２より自動的に無効化される。実施態様によっては、キャッシュマネジャー３２３２は、パケット処理タイマー３２４２に応答して、キャッシュされたオブジェクトの任意のタイマーの満了をチェックする。一実施態様では、キャッシュマネジャー３２３２は、オブジェクトタイマーが満了したと決定し、別の実施態様では、キャッシュマネジャー３２３２は、オブジェクトタイマーが満了していないと決定する。さらに他の実施態様では、キャッシュマネジャー３２３２は、さらに他の実施態様では、キャッシュマネジャー３２３２は、パケット処理タイマー３２４２の第２トリガまたは第２タイマー間隔に応じて、前にチェックしたオブジェクトタイマーが満了している場合、第２の時間をチェックするであろう。
【０４６０】
実施態様によっては、キャッシュマネジャー３２３２は、無効化コマンドまたは要求に関して構文解析、解釈、アクセス、読み取り、あるいは処理を行うか、またはキャッシュ内で無効化するオブジェクトを識別するように要求する。一実施態様では、キャッシュマネジャー３２３２の外部の実態は、キャッシュマネジャー３２３２に対して、オブジェクト無効化する無効化コマンドを発行する。別の実施態様では、外部の実態は、パケット処理タイマー３２４２に応答して無効化コマンドを発行し得る。オブジェクトが有効であるか、および／または無効化されていない場合、キャッシュマネジャー３２３２は、要求に応じてオブジェクトを無効化する。実施態様によっては、キャッシュマネジャー３２３２よって処理される無効化要求は、要求を処理するパケット処理エンジン３２４０のパケット処理動作に応答し、その結果、パケット処理タイマー３２４２にも応答し得る。
【０４６１】
ステップ３３６５では、キャッシュマネジャー３２３２は、オブジェクトを無効としてマークする。キャッシュマネジャー３２３２は、任意の適切または望ましい方法で、各々のオブジェクトを無効とマークする。一実施態様では、オブジェクトは、記憶されたオブジェクトのフラグ、属性、または特性を設定することにより無効とマークされる。たとえば、フラグは、キャッシュマネジャー３２３２に従ってオブジェクトが無効であることを識別する任意の値に設定することができる。別の実施態様では、オブジェクトは、無効なオブジェクトを記憶するためのキャッシュの領域または部分にオブジェクトを移動させることによって、無効とマークすることができる。他の実施態様では、キャッシュマネジャー３２３２は、データベース、またはリンクされたリスト、もしくは任意のタイプおよび形式のデータ構造によって、記憶されたオブジェクトの無効および／または有効状態を識別または追跡し得る。実施態様によっては、キャッシュマネジャー３２３２は、１つまたは複数のオブジェクトを使用して、キャッシュ内に記憶された１つまたは複数のオブジェクトの有効性または無効性を識別または追跡する。別の実施態様では、オブジェクトは、記憶されたオブジェクトを変更、修正、または改変する、たとえばオブジェクトの一部を削除または除去することによって使用できないようにするか、あるいはオブジェクトの名前を変更またはマングルすることによって、無効とマークされる。
【０４６２】
ステップ３３７０では、キャッシュマネジャー３２３２は、実施態様によっては、無効とマークされたオブジェクトをキャッシュからフラッシュする。別の実施態様では、キャッシュマネジャー３２３２は、たとえばクライアント１０によるオブジェクトに対する要求の後、キャッシュから無効なオブジェクトをフラッシュする。実施態様によっては、キャッシュマネジャー３２３２は、オブジェクトの無効化または失効後に受信したオブジェクトの更新されたコピーまたはバージョンを、無効なオブジェクトに上書きする。別の実施態様では、キャッシュマネジャー３２３２は、キャッシュメモリの同じ部分に別の部分を記憶することによって、無効なオブジェクトが占有していたキャッシュメモリを再利用する。さらに別の実施態様では、キャッシュマネジャー３２３２は、無効とマークされたオブジェクトをフラッシュせず、オブジェクトをキャッシュのメモリまたは記憶装置に記憶した状態を保つ。
【０４６３】
方法３３５０は、無効化粒度を提供するために、パケット処理タイマーに応答するか、および／またはパケット処理動作に関連するキャッシュされたオブジェクトの無効化およびフラッシュについて説明しているが、本明細書に記載されているデバイス１２５０のキャッシュの任意の動作、およびキャッシュ管理の任意の技術、およびその他の任意の動作は、パケット処理タイマーによって提供される微細劉殿時間間隔で実行することができる。実施態様によっては、キャッシュされたオブジェクトの無効化または失効は、１００ミリ秒という短い時間間隔で生じるが、別の実施態様では、５０ミリ秒という短い時間間隔で生じる。実施態様によっては、キャッシュされたオブジェクトの無効化または失効は、２５ミリ秒という短い時間間隔で生じ、他の実施態様では、１０ミリ秒という短い時間間隔で生じる可能性がある。他の実施態様では、キャッシュされたオブジェクトの無効化または失効は、５ミリ秒という短い時間間隔で生じ、さらに他の実施態様では、３、２、あるいは１ミリ秒という短い時間間隔で生じる可能性がある。
【０４６４】
上記の図２８Ａおよび２８Ｂに関連する方法３３００および３３５０に記載されているように、非常に短い時間増分の経過後、オブジェクトを無効化する能力を組み込むことによって、動的に生成されたコンテンツのキャッシングを改善することが可能になる。動的コンテンツによっては、実際上、キャッシュに短期間保存し、キャッシュから供給するのに適する。しかし、このようなコンテンツを正常にキャッシュするには、一実施態様による方法は、オブジェクトが無効化され、キャッシュメモリからフラッシュされる前の非常に短期間にわたってオブジェクトを提供する。たとえば動的に生成された一定のオブジェクトは、１秒間キャッシュ可能であり得るが、常に変化しているコンテンツの場合は、それ以上アクセスできない場合が多い。一実施態様では、この方法には、１秒の一部分の後、キャッシュされたコンテンツを無効化または失効させることが含まれた。一例として、アプリケーションが、動的応答の生成に１００ミリ秒要する場合、キャッシュは、データのフレッシュさの点で妥協することなく、１００ミリ秒間以下の期間にわたって当該応答を記憶および供給することができる。その１００ミリ秒間は、新しいオブジェクトを生成するのに要する時間より短いため、１００ミリ秒間で生成される新しいオブジェクトは存在しない。したがって、アプライアンス１２５０は、前のオブジェクトを当該期間で供給するようにセットアップすることができる。アプライアンス１２５０が、非常に短い時間増分まで無効化する能力は、データトランザクションの隔離レベルが、反復可能読取りまたは連続読取りを可能にするように設定されているアプリケーション環境に非常に有用である場合が多い。
【０４６５】
ｃ．無効化コマンド
従来のキャッシング技術は、コンテンツの予め決められた満了時間に基づいて、記憶されたコンテンツを無効化し、この満了時間は、一般に管理者によって構成されるか、あるいはオブジェクトを供給したサーバから受信される。動的に生成されたコンテンツをより効率的にキャッシュするために、コンテンツを無効化するためのもう１つの技術を以下で説明する。１つの技術は、キャッシュ内に無効としてリアルタイムで以前に記憶された１つまたは複数のオブジェクトを識別する無効化コマンドをアプライアンス１２５０で受信する機能を含む。たとえば、無効化コマンドは、クライアントに伝送されたネットワークパケット、またはサーバによって行われるアプリケーションプログラミングインターフェース（ＡＰＩ）のコールを介して、アプライアンスに通信することができる。これは、サーバが単に、オブジェクトが供給される時点でオブジェクトヘッダに含んでいるキャッシュ満了時間を設定する従来の方法とは異なる。
【０４６６】
１つの技術を図２９Ａおよび図２９Ｂにより詳細に示す。図２９Ａは、コンピュータメモリのキャッシュなどのキャッシュを維持する方法を示すフローチャートである。簡潔に説明すると、ステップ３４１０により、動的に生成され、起源サーバ３０から以前に供給されたオブジェクトはキャッシュ内に記憶される。たとえば、動的に生成されたオブジェクトは、キャッシュ可能として識別することはできないか、あるいは任意のキャッシュ、またはキャッシュ制御情報を含む。ステップ３４２０では、無効化コマンドは、キャッシュまたはキャッシュマネジャー３２３２で受信される。無効化コマンドは、以前に供給された１つまたは複数のオブジェクトを無効として識別する。ステップ３４３０では、キャッシュは、無効化コマンドに応答して、識別されたオブジェクトを無効とマークする。
【０４６７】
さらに詳細にステップ３４１０で、キャッシュマネジャー３２３２は、任意のソースから受信、取得、または伝達され、動的に生成されたオブジェクトをキャッシュメモリ要素内に記憶する。実施態様によっては、動的に生成されたオブジェクトは、サーバ３０から生成され、供給され得る。他の実施態様では、動的に生成されたオブジェクトは、クライアント１０によって生成され、伝達され得る。実施態様によっては、アプライアンス１２５０の別の部分、構成要素、またはプロセスは、オブジェクトを生成し、オブジェクトをキャッシュ内に記憶する。さらに他の実施態様では、動的に生成されたオブジェクトは、ネットワーク上の別のアプライアンス１２５０、または別のコンピューティングデバイスによって生成され、アプライアンス１２５０に伝送または伝達され得る。実施態様によっては、動的に生成されたオブジェクトは、キャッシュ可能と識別されないか、あるいはキャッシュ不能と識別される。他の実施態様では、動的に生成されたオブジェクトは、キャッシュ可能と識別されるか、またはキャッシュ制御下にある。
【０４６８】
ステップ３４２０では、キャッシュマネジャー３２３２は、動的に生成され、キャッシュ内に記憶されたオブジェクトなど、無効化するオブジェクトを識別する無効化コマンドを受信する。一実施態様では、無効化コマンドは、オブジェクトが無効であるか、あるいは古いかもしれないことをキャッシュに指示する任意のタイプの指示またはインストラクションを含み得る。実施態様によっては、無効化コマンドはオブジェクトを識別し、オブジェクトが無効である時点、およびオブジェクトのどの部分が無効であるかもしれないかも識別することができる。一実施態様では、キャッシュマネジャー３２３２は、起源サーバ３０によってリモートに呼び出し得るアプリケーションプログラミングインターフェース（ＡＰＩ）を提供する。実施態様によっては、キャッシュマネジャー３２３２は、１つまたは複数のネットワークパケットを介してコマンドを受信するとともに、コマンドに応答するための任意の任意のタイプおよび形式のプロトコルを提供し得る。一実施態様では、キャッシュマネジャー３２３２またはデバイス１２５０は、無効化コマンドを受信および処理する拡張可能マークアップ言語（ＸＭＬ）ＡＰＩインターフェースを提供する。たとえば、キャッシュマネジャー３２３２は、ウェブサービスインターフェースを提供し得る。実施態様によっては、キャッシュマネジャー３２３２は、承認、ステータス、またはその他の応答を起源サーバ３０に送信することによって、無効化コマンドに応答する。他の実施態様では、キャッシュマネジャー３２３２は、無効化コマンドに応答しない。一実施態様では、オブジェクトは、起源サーバ３０で実行しているアプリケーションが、たとえばオブジェクトの新しいバージョンまたは更新バージョンを生成することによって、記憶されたオブジェクトが古くなる動作を実行した場合、無効とマークされる。これは、たとえば、新しいエディタが、高速に展開するニュースストーリに変更を加え、したがって、確実にストーリの一番最近のバージョンがクライアントに供給されることを望む場合に生じる可能性がある。
【０４６９】
無効化コマンドは、別のサーバ３０、または別のアプライアンス１２５０によってオブジェクトを生成したアプリケーションによって起源サーバから発行され得る。一実施態様では、起源サーバ３０は、起源サーバ３０上で動的に生成されたオブジェクトの変更に応じて、無効化コマンドをキャッシュ３２３２に自動的に発行または伝達する。無効化コマンドは、サーバ３０およびアプライアンス１２５０の外部または外側の管理コントロールによって生成することも可能である。たとえば、管理コントロールは、ネットワーク上で実行されているとともに、管理者のコンソールなどのアプライアンス１２５０と通信する任意のタイプおよび形式プログラムまたはアプリケーションでよい。さらに、クライアント１０は、無効化コマンドをアプライアンス１２５０またはキャッシュマネジャー３２３２に発行または伝達することが可能である。たとえば、起源サーバにおいて、要求されたオブジェクトに対する変更が行われるとクライアントが認識する動作が行われる場合、クライアントは、無効化コマンドを伝達する。キャッシュ内に記憶された任意のオブジェクトは、キャッシュでローカルに実行されるか、あるいはＸＭＬ  ＡＰＩ基盤を使用してリモートに呼び出されるユーザコマンドをキャッシュに伝送することによって無効化することができる。
【０４７０】
ステップ３４３０によると、キャッシュ内に記憶されたオブジェクト、たとえば、動的に生成され、以前に供給され、無効と識別されたオブジェクトは、無効化コマンドに応じてそのようにマークされる。無効なオブジェクトは、要求クライアントに対してキャッシュから提供されるのではなく、起源サーバから直接供給されるであろう。キャッシュマネジャー３２３２は、任意の適切または所望の方法で、各々のオブジェクトを無効とマークし得る。一実施態様では、オブジェクトは、記憶されたオブジェクトのフラグ、属性、または特性を設定することにより無効とマークされる。たとえば、フラグは、キャッシュマネジャー３２３２に対して、オブジェクトが無効であることを識別する任意の値に設定し得る。別の実施態様では、オブジェクトは、無効なオブジェクトを記憶するためのキャッシュの領域または部分にオブジェクトを移動させることによって無効とマークすることができる。他の実施態様では、キャッシュマネジャー３２３２は、データベース、またはリンクされたリスト、もしくは任意のタイプおよび形式のデータ構造によって、記憶されたオブジェクトの無効および／または有効状態を識別または追跡し得る。実施態様によっては、キャッシュマネジャー３２３２は、１つまたは複数のオブジェクトを使用して、キャッシュ内に記憶された１つまたは複数のオブジェクトの有効性または無効性を識別または追跡する。別の実施態様では、オブジェクトは、記憶されたオブジェクトを変更、修正、または改変する、たとえばオブジェクトの一部を削除または除去することによって使用できないようにするか、あるいはオブジェクトの名前を変更またはマングルすることによって、無効とマークされる。
【０４７１】
実施態様によっては、アプライアンス１２５０は、その後、無効とマークされたオブジェクトをキャッシュからフラッシュする。別の実施態様では、アプライアンス１２５０は、たとえばクライアント１０によるオブジェクトに対する要求の後、無効なオブジェクトをキャッシュからフラッシュする。実施態様によっては、アプライアンス１２５０は、無効なオブジェクトにオブジェクトの更新されたコピーまたはバージョンを上書きする。別の実施態様では、アプライアンス１２５０は、キャッシュメモリの同じ部分に、動的に生成された別のオブジェクトを記憶することによって、無効なオブジェクトが占有していたキャッシュメモリを再利用する。
【０４７２】
アプライアンス１２５０と通信する任意のコンピューティングデバイスまたはユーザは、キャッシュマネジャー３２３２のコマンド無効化ＡＰＩを使用して、キャッシュ内に記憶されたオブジェクト、たとえば動的に生成されたオブジェクトを無効化するように要求し得る。したがって、キャッシュ内に記憶されたオブジェクトの無効化は、予め決められた構成失効または無効化期間を使用するのではなく、リアルタイムで制御することができる。したがって、これらの技術を使用すると、キャッシュされたオブジェクトの寿命は、外部のアプリケーション処理ノード、たとえばデータベースまたは起源アプリケーションサーバから制御することができる。たとえば、アプライアンス１２５０は、データベースと連動して、データベースに変更を加えると、データベース（またはアプリケーション）から無効化コマンドを自動的にトリガして、特定の１つまたは複数のオブジェクトをフラッシュするように構成することができる。
【０４７３】
ｄ．無効化コマンドを使用する、群の無効化
さらに他の実施態様では、アプライアンス１２５０は、キャッシュによって記憶されたオブジェクト群を同時に識別および無効化する。従来のキャッシュメモリ内に記憶されたオブジェクトは各々、オブジェクトが古いかどうかを決定する際に、キャッシュによって個々に、別個に処理される。各々のオブジェクトがその指定された失効時間（一般に、サーバによって設定され、キャッシュによってテーブル内に記憶される）に達すると、そのアイテムはキャッシュメモリからフラッシュされる。しかし、従来の方法は、動的に生成されたコンテンツをキャッシュしようとする時に生じる問題に満足に対処するには非効率的であり、最終的に非効率的である。
【０４７４】
図２９Ｂは、コンピュータメモリのキャッシュなどのキャッシュを維持する方法の別の実施態様であって、アプライアンス１２５０が、以前に起源サーバ３０から供給された関連オブジェクトの群を作成、記憶、および無効化する機能を有する実施態様を示す。簡潔に説明すると、ステップ３４１０では、動的に生成され、起源サーバ３０から供給されたオブジェクトなどのオブジェクトは、キャッシュ内に記憶される。ステップ３４１２では、キャッシュマネジャー３２３２は、以前に供給され、キャッシュ内に記憶されたオブジェクトの群を形成する。一実施態様では、以下でさらに詳細に説明するとおり、１つまたは複数のオブジェクト決定要因に関連付けるか、または識別することができる。ステップ３４１４では、キャッシュマネジャー３２３２は、オブジェクト群の記録を維持する。ステップ３４２２では、キャッシュマネジャー３２３２は、オブジェクト群を無効化するための無効化コマンドを受信する。ステップ３４２３２では、キャッシュマネジャー３２３２は、無効化コマンドに応じて、オブジェクト群を無効とマークする。
【０４７５】
ステップ３４１０は、図２９Ａと同じであり、動的に生成され、以前に起源サーバ３０から供給されたオブジェクトなどのオブジェクトは、アプライアンス１２５０のキャッシュ内に記憶される。実施態様によっては、１つまたは複数のオブジェクトは、キャッシュ可能であると識別されない場合があるか、あるいはキャッシュまたはキャッシュ制御情報を何も持たない場合がある。たとえば、サーバ３０は、動的に生成されたオブジェクトがキャッシュされないであろうと仮定する場合がある。
【０４７６】
ステップ３４１２によると、アプライアンス１２５０は、以前に起源サーバ３０から供給され、キャッシュ内に記憶されたオブジェクトのセットから１つの群を形成する。適切であるか、または望ましい任意のオブジェクトのセットは互いに関連付けられ、１つの群を形成し得る。たとえば、ウェブページのために生成されるか、ウェブページに関連付けられ、ウェブページに供給される動的に生成されたオブジェクトは、１つの群を形成し得る。実施態様によっては、オブジェクトは、複数の群に関連し得る。他の実施態様では、オブジェクトの１つの群は、別のオブジェクト群のサブセットを形成し得る。実施態様によっては、形成されたオブジェクト群は、同じサーバ３０から供給されたオブジェクトを有し、他の実施態様では、形成されたオブジェクト群は、異なるサーバ３０から供給されたオブジェクトを有する。さらに他の実施態様では、形成されたオブジェクト群は、クライアント１０からのオブジェクト、サーバ３０からのオブジェクト、クライアント１０およびサーバ３０の両方によって生成されたか、または供給されたオブジェクトを含み得る。一実施態様では、群内のあるオブジェクトは静的に生成され、郡内の別のオブジェクトは動的に生成される。場合によっては、群内のあるオブジェクトはキャッシュ可能と識別されず、群内の別のオブジェクトはキャッシュ可能と識別される。他の場合には、群内のオブジェクトは、サーバ３０によって提供される機能またはアプリケーションに従って論理的に関連付けることができる。別の場合には、群内のオブジェクトは、同じクライアント１０または同じユーザに関連しているように関連付けることができる。
【０４７７】
ステップ３４１４では、オブジェクト群の記録が維持される。オブジェクト群の記録を記録および維持するか、あるいはオブジェクトを関連付ける様々な技術は、本明細書で説明する動作のいくつかの実施態様を実践する際に使用し得る。一実施態様では、記録は、たとえば、直接ルックアップテーブル内に維持し得る。別の実施態様では、記録は、ハッシュテーブル形式で表現することができる。実施態様によっては、キャッシュマネジャー３２３２は、データベース内のオブジェクト、またはメモリ内のデータ構造もしくはオブジェクトの関連性を維持する。さらに他の実施態様では、群内の各々のオブジェクトのフラグ、特性、または属性は、群を識別する値、たとえば、群のオブジェクト決定要因など、群の名前または識別子に等しい値、こうした名前または識別子を識別するか、または参照する値に割り当てられるか、または設定され、オブジェクト決定要因については、以下でさらに詳細に説明する。実施態様によっては、オブジェクト群は、群を保持するとして識別されるキャッシュメモリの一部分内に配列、配置、または位置される。
【０４７８】
ステップ３４２２では、無効化コマンドは、アプライアンス１２５０またはキャッシュマネジャー３２３２で受信される。図２９Ｂに記載されている実施態様によると、無効化コマンドは、１つまたは複数のオブジェクトが無効であるか、あるいは古いことを識別する。実施態様によっては、無効化コマンドは、オブジェクト群の名前または識別子を引用、識別、または指定する。一実施態様では、無効化コマンドは、群内のすべてのオブジェクトを無効化するために、１つの無効化要求を含む。別の実施態様では、無効化コマンドは、無効化する群内の１つのオブジェクトを識別する。他の実施態様では、無効化コマンドは、群内の複数のオブジェクトを無効化するために、複数の無効化要求を含む。
【０４７９】
ステップ３４３２では、無効化コマンドが、群のあるオブジェクトを無効、群内の各々のオブジェクトを無効、または群を無効として引用、識別、または指定する場合、以前に供給されたオブジェクト群は無効とマークされる。実施態様によっては、無効化コマンドが、群内のあるオブジェクトを無効と識別する場合、キャッシュマネジャー３２３２は、そのオブジェクトを無効と識別する。他の実施態様では、無効化コマンドが、群内のあるオブジェクトを無効と識別する場合、キャッシュマネジャー３２３２は、そのオブジェクト群を無効、またはその群内の各々のオブジェクトを無効とマークする。さらに他の実施態様では、キャッシュマネジャー３２３２は、複数のオブジェクトが、１つまたは複数の無効化コマンドを介して無効と識別される場合にのみ、オブジェクト群を無効化し得る。別の実施態様では、無効化コマンドは、群の名前または識別子を指定することができ、キャッシュマネジャー３２３２は、群を無効とマークするか、または群内の各々のオブジェクトを無効とマークする。
【０４８０】
一実施態様では、アプライアンス１２５０またはキャッシュマネジャー３２３２は、無効とマークされたオブジェクト群をキャッシュメモリからフラッシュする。実施態様によっては、群内のオブジェクトは、群内の各々のオブジェクトが無効とマークされる場合にのみ、キャッシュメモリからフラッシュし得る。他の実施態様では、群のあるオブジェクトが、無効とマークされた場合、その群全体がフラッシュされる。別の実施態様では、無効とマークされたオブジェクト群、または群内の任意のオブジェクトは、オブジェクト群、群内の任意のオブジェクトに対する要求を受信後に、クライアント１０によってフラッシュし得る。他の実施態様では、無効とマークされたオブジェクト群、または群内の任意のオブジェクトは、群内の１つまたは複数の新しいオブジェクトを提供するサーバ３０から応答を受信後にフラッシュされ得る。
【０４８１】
上記の実施態様の一例は、次のとおりである。顧客リソース管理（「ＣＲＭ」）アプリケーションは、リソース管理のすべての態様を追跡および評価するために、多くの企業によって使用される。多くの場合、ＣＲＭアプリケーションは、Ｉｎｔｅｒｎｅｔを含むプライベートおよびパブリックネットワークを通してインプリメントされ、アクセスされる。したがって、これらのアプリケーションは、頻繁にアクセスされる多量のデータに対するアクセスを提供し、こうしたアプリケーションによって生成されたデータのキャッシングから利益を得る。たとえば、営業報告は頻繁に作成され、リモートに接続されたユーザに供給される。これらの営業報告は、このようなアプリケーションサーバおよび／またはその下にあるデータベースにポストされる営業情報からデータを編集することによって、関連アプリケーションにより構成される。多くのユーザが、キャッシュせずに、同じ文書（つまり、特定の営業報告）を要求するため、アプリケーションサーバは、各々の要求ごとにオブジェクトを再生しなければならない。しかし、このようなオブジェクトをキャッシュ内に記憶することができれば、キャッシュは、要求するクライアントにより近く配置されるため、潜在的に価値のある帯域幅を含め、アプリケーションおよびデータベース処理は保存される。
【０４８２】
こうしたオブジェクトをキャッシュする際の問題は、新しい売上げが、起源サーバで動作しているアプリケーション（またはその下にあるデータベース）にポストされるごとに、営業報告内の情報を更新する必要があるために生じる。その結果、これらのアプリケーションサーバをサポートする任意のキャッシュ内に記憶されているかもしれないすべての営業報告を無効化し、コンテンツをキャッシュメモリからフラッシュしなければならない。しかし、キャッシングの従来の方法は、下にあるデータベース、またはアプリケーションの変更が、いつ行われようとしているかを正確に決定する方法がないため、動的コンテンツのフレッシュさを合理的に評価することができない。データベース、アプリケーション、または起源サーバ内で変更が生じるごとに、キャッシュは、変更が行われたこと、その変更の結果、どのオブジェクト群を無効化するべきかを識別できなければならない。以前に供給されたオブジェクト群にリンクされるオブジェクト決定要因を含む無効化コマンドの生成は、上記のとおり、この必要性を満たす。
【０４８３】
関連するオブジェクトの複数の群は、単一階層レベルで形成することができる。あるいは、下位オブジェクト群を形成して、複数の階層レベルを作成することができる。一実施態様では、オブジェクト群または下位オブジェクト群は、ユーザが予め指定することができる。別の実施態様では、ユーザは、アプライアンス１２５０が関連オブジェクト群を自動的に形成し、オブジェクト決定要因をこれらのオブジェクト群と関連付ける規則を確立することができる。
【０４８４】
ｅ．クライアントの要求または回答におけるオブジェクト決定要因の識別表示
ある実施態様は、オブジェクトの群化を生成し、およびパラメータ化された無効化をインプリメントすることによって、起源アプリケーションサーバ３０（および／または下にあるデータベース）における状態の変化によって影響を受けるすべてのオブジェクトを識別することが可能である必要性にも対処する。この実施態様では、任意のオブジェクト、または予め画定されたオブジェクト群は、キャッシュが、オブジェクト決定要因を識別するために構文解析するという、たとえばクライアントから傍受されたＨＴＴＰ要求によって無効化することができる。「オブジェクト決定要因」という用語は、一意に、または他の方法で１つのオブジェクト、または一連のオブジェクトを引用、識別、または特定する任意の情報、データ、データ構造、パラメータ、値、データパターン、要求、応答、またはコマンドを意味する。実施態様によっては、オブジェクトの決定は、オブジェクトに関連付けられるか、あるいは、通信がオブジェクトに関連しているか、または引用していることを一意に識別するために使用することができる、通信内のあるパターンのバイトまたは文字である。一実施態様では、オブジェクト決定要因は、起源サーバ内で変化が生じたか、あるいは今後生じるかどうかを、以前に供給され、オブジェクト決定要因が関連付けられているキャッシュマネジャー３２３２内に記憶されたオブジェクト群に指示する。実施態様によっては、オブジェクト群内のオブジェクトは、少なくとも１つのオブジェクト決定要因に関連するように関連付けられる。オブジェクト決定要因の特定の非制限的な例、およびこれらの使用法の実例は、以下でより完全に説明する。
【０４８５】
この実施態様のいくつかの実施態様では、オブジェクト決定要因は、クライアントの要求または応答に含まれるか、または埋め込まれる、特定の予め画定されたパラメータまたはデータ構造である。他の実施態様では、クライアント１０、サーバ３０、またはアプライアンス１２５０は、１つまたは複数のオブジェクト決定要因、たとえば、オブジェクト決定要因を表現する予め確定された文字列または一連の文字を通信中に埋め込む。オブジェクト決定要因は、このような要求が、起源サーバ３０、または起源サーバ３０にリンクするデータベース内に記憶されたオブジェクトの状態を変化させる影響を有するかどうかを指示する。一実施態様では、要求中にオブジェクト決定要因が存在することは、オブジェクトが変更されたか、あるいはオブジェクトに変更が生じるかを指示する。別の実施態様では、オブジェクト決定要因の構文、構造、パラメータ、または値が、オブジェクトが変更されたか、あるいはオブジェクトに変更が生じるかどうかを指示する。一実施態様では、キャッシュは、クライアント１０からのオブジェクト要求を受信する。この要求は、キャッシュが、起源サーバまたはアプリケーションサーバの状態が変化し、その結果、このような起源サーバまたはアプリケーションサーバ３０によって以前に生成され、キャッシュマネジャー３２３２によって記憶されている特定の関連オブジェクトが古くなると認識する特定のパラメータまたは値（オブジェクト決定要因）を含み得る。ユーザが設定する無効化ポリシーに応じて、パラメータ（オブジェクト決定要因）は、起源サーバによって以前に供給され、キャッシュによって記憶されている１つまたは複数のオブジェクトまたはオブジェクト群の無効化を要求し得る。キャッシュは、この状態の変化による影響を受ける関連オブジェクト（つまり、オブジェクト決定要因にリンクされているオブジェクトまたはオブジェクト群）を識別し、各々のオブジェクトを無効にするか、および／またはこのようなオブジェクトをキャッシュメモリからフラッシュする方法を介して、これらのオブジェクトを無効化するように構成される。
【０４８６】
上記の技術は、図２９Ｃに示す。本明細書に記載する他の実施態様と同様、ステップ３４１０は、動的に生成され、起源サーバから以前に供給されたオブジェクトなどのオブジェクトをキャッシュ内に記憶するステップを含む。本明細書に記載する他の実施態様と同様、ステップ３４１０は、動的に生成され、以前に起源サーバから供給されたオブジェクトなどのオブジェクトをキャッシュ内に記憶するステップを含む。このオブジェクトは、起源サーバ３０上で実行しているアプリケーションによって生成されるか、あるいは、たとえば起源サーバ３０によってアクセスされるデータベースから取り出すことができる。実施態様によっては、動的に生成されたオブジェクトは、キャッシュ可能ではないと識別されるか、あるいはキャッシュ可能として識別されない。
【０４８７】
ステップ３４２１によると、キャッシュは、クライアントおよびサーバ間の通信、たとえばクライアントからの要求、またはサーバからの応答を傍受するか、あるいは受信する。実施態様によっては、要求は、特定のオブジェクト、たとえば以前に供給され、キャッシュ内に記憶されたオブジェクトが対象である。別の実施態様では、通信は、要求されたオブジェクトを有するサーバからの応答を含む。一実施態様では、このような受信または傍受は、確立されたキャッシングプロトコルおよび通信規格に従って行われる。キャッシュマネジャー３２３２またはアプライアンス１２５０は、一般に、要求、応答、または通信を受信する時に、このような要求、応答、または通信を受信すると記述されるが、キャッシュ３２３２またはアプライアンス１２５０は、キャッシュに直接または明確に伝達されない場合でも、任意の適切な手段および／または機構によって、要求、応答、または通信を傍受または取得し得る。
【０４８８】
ステップ３４２３では、オブジェクト決定要因は、傍受された通信内で識別される。キャッシュマネジャー３２３２は、傍受した通信を抽出し、解釈し、構文解析し、アクセスし、読み取り、あるいは処理して、通信内の１つまたは複数のオブジェクト決定要因を決定または識別し得る。通信の１つまたは複数の文字の任意のパラメータ、値、構文、データ、構造、または集合は、オブジェクト決定要因を識別するために使用し得る。一実施態様では、キャッシュマネジャー３２３２は、クライアントがオブジェクトを要求する、クライアント１０からサーバ３０への要求内のオブジェクトの名前または識別子を識別することができる。別の実施態様では、キャッシュマネジャー３２３２は、クライアント１０の要求内の第１オブジェクトの名前または識別子、またはキャッシュ内に記憶されている第２オブジェクトに対して変更が行われたか、あるいは変更が行われることを指示するサーバ３０からの応答の名前または識別子を識別し得る。他の実施態様では、キャッシュマネジャー３２３２は、要求内の任意のパターンの文字が、キャッシュ内のオブジェクトまたはオブジェクト群に関連する任意のオブジェクト決定要因と適合するかどうかを決定する。実施態様によっては、オブジェクト決定要因は、現在キャッシュ内に記憶されていないオブジェクトに関して決定することができる。他の実施態様では、オブジェクト決定要因は、現在無効とマークされているオブジェクトに関して決定することができる。他の実施態様では、要求されたオブジェクトのオブジェクト決定要因は、キャッシュされたオブジェクトのオブジェクト決定要因に関連すると決定される。さらに別の実施態様では、通信内のオブジェクトに関する最初の参照、要求、または応答の後、キャッシュマネジャー３２３２は、識別されたオブジェクト決定要因を、オブジェクトに対するオブジェクト決定要因として確立する。
【０４８９】
クライアントの要求またはサーバの応答などの通信を受信し、構文解析して、オブジェクト決定要因を識別することによって、キャッシュマネジャー３２３２またはアプライアンス１２５０は、識別されたオブジェクト決定要因に関連している、キャッシュされたオブジェクトを無効とマークするかどうかを効果的に決定し得る。したがって、ステップ３４２５により、オブジェクト決定要因が、キャッシュされたオブジェクトの変更を指示するかどうかが決定される。実施態様によっては、識別されたオブジェクト決定要因は、オブジェクトを改変、修正、または生成しない通信の一部であり得る。他の実施態様では、識別されたオブジェクト決定要因は、オブジェクト決定要因に関連するオブジェクトに対して変更が行われたか、あるいは行われることを指示する通信の一部である。たとえば、通信は、動的に生成されたオブジェクトに対するＧＥＴ要求であるか、または１つまたは複数の動的に生成されたオブジェクトに使用されるデータを変更する提示要求であり得る。実施態様によっては、通信内のオブジェクト決定要因の存在は、１つまたは複数のオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。別の実施態様では、通信内のコマンド、指令、またはインストラクションのタイプまたは名前は、オブジェクト決定要因とともに、１つまたは複数のオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。さらに他の実施態様では、コマンド、指令、またはインストラクションのパラメータまたは変数の存在、値、または設定は、オブジェクト決定要因に関連する１つまたは複数のオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。
【０４９０】
他の実施態様では、キャッシュマネジャー３２３２は、傍受した通信またはオブジェクト決定要因に関するハッシュ関数、アルゴリズム、または動作を実行して、オブジェクトに変更が行われたかどうかを決定する。実施態様によっては、ハッシュ値は、当該オブジェクトについて以前に記憶されたハッシュ値と比較され、異なる場合、キャッシュマネジャー３２３２は、オブジェクトが変更されたことを認識する。さらに別の実施態様では、オブジェクトのハッシュ値は、通信またはオブジェクト決定要因に含み得る。一実施態様では、通信は、ブーリアンフラグを使用するなど、パラメータの値または設定によってオブジェクトが変更されたことを指示する。他の実施態様では、以下でより詳細に説明するように、エンティティタグコントロールおよび無効化機構を使用して、オブジェクトを識別し、オブジェクトが変更されたかどうかを決定することができる。
【０４９１】
次に、ステップ３４３１で変更が指示された場合、オブジェクト決定要因に関連するか、またはオブジェクト決定要因によって識別されるオブジェクトは、無効とマークされる。実施態様によっては、傍受された通信によって要求されたオブジェクトは、ステップ３４３１に従って無効とマークされ、ステップ３４４０に従って起源サーバ３０から検索される。あるいは、他の実施態様では、要求されたオブジェクトは、ステップ３４５０に従ってキャッシュから検索される。一実施態様では、無効とマークされた任意のオブジェクトは、キャッシュからフラッシュされるであろう。
【０４９２】
ｆ．オブジェクト決定要因に基づくオブジェクト群の無効化
上記の実施態様は、クライアント要求内のオブジェクト決定要因の識別表示にに基づいて、キャッシュマネジャー３２３２内の以前に供給されたオブジェクトを無効化する事例を説明する。この一般的なコンセプトは、別の実施態様では、１つまたは複数のオブジェクト決定要因が関連していたオブジェクト群を識別し、無効化するために使用することもできる。この実施態様は、図２９Ｄに示す。
【０４９３】
図２９Ｄに記載する方法は、図２９Ｃの方法と同じ様式で開始する。ステップ３４１０は、動的に生成され、以前に起源サーバから供給されたオブジェクトをキャッシュ内に記憶するステップを含む。実施態様によっては、１つまたは複数のオブジェクトは、キャッシュ可能として識別されない。ステップ３４１２によると、図２９Ｂと同様に、以前に供給されたオブジェクトは群として形成される。一実施態様では、オブジェクト決定要因技術により、オブジェクト群は、少なくとも１つのオブジェクト決定要因に関連するか、あるいは少なくとも１つのオブジェクト決定要因によって識別される。以下で完全に説明するように、実施態様によっては、群オブジェクト決定要因との関連性は、ユーザのキャッシングポリシー、たとえば、ポリシーエンジン３２３６によって画定、制御、または使用されるポリシーの性質および詳細によって決まる。その他の実施態様では、群の１つまたは複数のオブジェクト決定要因は、群内のオブジェクトの１つまたは複数のオブジェクト決定要因を含む。別の実施態様では、群のオブジェクト決定要因は、群内のオブジェクトのオブジェクト決定要因の組合せを含む。
【０４９４】
ステップ３４１４によると、群の記録は、群に関連するオブジェクト決定要因があれば、そのオブジェクト決定要因とともに維持される。このステップは、図２９Ｂに示されているステップ３４１４に類似する。一実施態様では、群の記録、および／または任意のオブジェクト決定要因は、ルックアップテーブル内に維持される。他の実施態様では、群の記録、および／または任意のオブジェクト決定要因は、ハッシュテーブル形式で維持され得る。ハッシュテーブルは、英数字のシーケンスに広い隙間を有することができる不連続キーを効率的に記憶するように設計され得る。別の実施態様では、索引システムをハッシュテーブルの上に構成することができる。実施態様によっては、キャッシュマネジャー２３２は、データベース内に１つまたは複数のオブジェクト決定要因を有する群、あるいはメモリ内のデータ構造またはオブジェクトとして、オブジェクトの関連性を維持する。さらに他の実施態様では、群内の各々のオブジェクトのフラグ、特性、または属性は、群を識別する値、たとえば群の名前または識別子に等しいか、群の名前または識別子、あるいは群のオブジェクト決定要因を識別するか、あるいは引用する値に割り当てられるか、あるいは設定される。実施態様によっては、オブジェクト群は、群を保持すると識別されたキャッシュメモリの一部分に配列、配置、または位置される。別の実施態様では、１つまたは複数のオブジェクト決定要因は、オブジェクト群と関連して記憶される。
【０４９５】
ステップ３４２１および３４２３は、図２９Ｃに示すステップ３４２１および３４２３に類似している。ステップ３４２１によると、キャッシュマネジャー３２３２またはアプライアンス１２５０は、クライアント１０およびサーバ３０間の通信、たとえば、以前に供給されキャッシュ内に記憶されたオブジェクトに対するクライアントからの要求を傍受、あるいは受信する。一実施態様では、キャッシュマネジャー３２３２は、クライアント１０からサーバ３０への要求を傍受する。実施態様によっては、要求は、キャッシュ内に記憶されたオブジェクトに対する要求である。他の実施態様では、要求は、キャッシュ内に記憶されたオブジェクトを変更させる、たとえばオブジェクトを動的に生成させる、サーバ３０に対するインストラクション、コマンド、または指令である。別の実施態様では、キャッシュマネジャー３２３２は、キャッシュ内に記憶されたオブジェクトを含むか、または識別する、サーバ３０からクライアント１０への要求を傍受する。
【０４９６】
ステップ３４２３では、オブジェクト決定要因は、傍受された通信内で識別される。上記のとおり、オブジェクト決定要因は、起源サーバ３０内において、要求されたオブジェクト内で変更が行われたか、あるいは変更が行われるかどうかを指示する。しかし、図２９Ｄの実施態様では、オブジェクト決定要因は、オブジェクト群に関連付けることができる。これは、キャッシュ内に記憶され、特定のオブジェクト決定要因によって影響され得るすべてのオブジェクトを効率的に無効化することを可能にする。実施態様によっては、群内のあるオブジェクトのオブジェクト決定要因が識別される。他の実施態様では、オブジェクト群のオブジェクト決定要因、たとえば群オブジェクト決定要因が識別される。別の実施態様では、群内の１つまたは複数のオブジェクトのオブジェクト決定要因の組合せが識別される。
【０４９７】
したがって、ステップ３４２７によると、オブジェクト決定要因が、以前に供給されたオブジェクトの群内の変化を指示するかどうかに関して決定が行われる。実施態様によっては、群のオブジェクト決定要因が傍受された通信内に存在することは、群内の１つまたは複数のオブジェクト、またはすべてのオブジェクトに変更が行われたか、あるいは変更が行われることを指示する。他の実施態様では、傍受された通信内のコマンド、指令、またはインストラクションの名前およびタイプは、こうした変化を指示する。さらに別の実施態様では、通信内のパラメータまたは変数の存在、値、または設定は、こうした変化も指示し得る。
【０４９８】
ステップ３４２７で、オブジェクト決定要因が、群内の変化を指示する場合、以前に供給されたオブジェクトの群は、ステップ３４３５に従ってキャッシュ内で無効とマークされる。実施態様によっては、群の１つまたは複数のオブジェクト、またはすべてのオブジェクトは、ステップ３４４０に従って、起源サーバ３０から要求され、検索される。ステップ３４２７で、オブジェクト決定要因が、群内の変化を指示しない場合、実施態様によっては、傍受された通信の一部として要求され、以前に供給されて、キャッシュ内に記憶された任意のオブジェクトは、ステップ３４５０に従ってキャッシュマネジャー３２３２から検索される。一実施態様では、無効とマークされた任意のオブジェクトまたはオブジェクト群は、キャッシュマネジャー３２３２よって、キャッシュからフラッシュし得る。
【０４９９】
ｇ．群の定義
キャッシュの管理者は、どのオブジェクトが特定の群に含まれるかを明確に指定し得る。あるオブジェクトがキャッシュ内に記憶されている時は常に、管理者はオブジェクトを、構成に応じて、構成されたか、あるいは潜在的な群の１つの構成員にすることができる。構成された群は、管理者が以前に確立した構成に基づくか、あるいはオブジェクトの無効化に関連するアプリケーションの挙動、およびその他のデータに基づく。あるオブジェクトは、そのオブジェクトの構成された群が動的である場合、潜在的な群の一部でもあり得る。潜在的な群内のオブジェクトは、重要な無効化パラメータの値ごとに群化される。
【０５００】
オブジェクトの非常に順応性のある群化を可能にすることによって、キャッシュは、動的に生成されたコンテンツを効果的にキャッシュするのに必要な無効化の際に、あるレベルの適応性および調整を達成することができる。キャッシュは、非常に特有のオブジェクト群を同時に無効化し、それによって、動的に生成されたコンテンツを無効化するというよくある必要性に対して、より対応性のあるキャッシュを構成する。キャッシュが、あるオブジェクトを群に割り当てる場合、その群は、１つまたは複数のオブジェクト決定要因をオブジェクトに関連付けるために、当該オブジェクトに関連するある数のもの、たとえば無効化パラメータおよびヒット決定要因を決定する。
【０５０１】
顧客リソース管理（「ＣＲＭ」）の例では、キャッシュ管理者は、各々の群化を予め指定することができる。たとえば、管理者は、各々の営業部を名前別に群化するためにキャッシュを構成する。したがって、管理者は、自動車部門、オートバイ部門などを指定することができ、オブジェクト決定要因が、キャッシュに到達する要求内で認識されるごとに、その結果、キャッシュは、オブジェクト決定要因を介して適切な部門にリンクされている指定の群内に記憶されたすべてのオブジェクトを無効化することができる。
【０５０２】
ｈ．規則に基づく群化
あるいは、キャッシュ管理者は、キャッシュアプライアンスが、どのオブジェクトを特定の１つまたは複数の群に含むことができるかを実行時に決定することを可能にする規則を確立することができる。このような規則に基づく群化は、キャッシュが、関連する群を形成するために使用する重要なオブジェクト決定要因にオブジェクトをリンクさせる確立された規則による群の指定に頼ることができる。この方法の一例は、キャッシュが、どのオブジェクトを各々の群に配置するかを認識するために使用する規則を使って、キャッシュを構成することを含むことができる。
【０５０３】
再びＣＲＭの例を参照すると、規則では、アプリケーションに設定されている販売部門の各々の下位部門は、それ自体の群化としてキャッシュによって認識されるべきであるとされている。このようにして、群化は、キャッシュ管理者が各々の群化を具体的に特定せずに形成することができ、キャッシュが、関連する規則に基づいて決定することを可能にする。この技術は、群化を指定するために、より適応性があり、多くの場合はそれほど労働集約的ではない方法を生じる。キャッシュ管理者は、販売のすべての下位部門（つまり、ｓａｌｅｓ＼ａｕｔｏ，ｓａｌｅｓ＼ｍｏｔｏｒｃｙｃｌｅなど）は、キャッシュによって新しい群化を生成されるべきであると定める規則を構成することができる。自動車販売部門からの要求は、アプリケーションによって、キャッシュを介して処理され、返されるため、キャッシュは、販売の各々の下位群化を認識し、そのために、予め構成された規則に基づいて自動的に群化を形成することができる。
【０５０４】
規則は、キャッシュが、報告／販売／自動車、または報告／販売／オートバイなどのタイプのオブジェクトに対する新しい要求を見るごとに、キャッシュによってインプリメントされ得る。次に、このプロセスは、オートバイ販売部門が、それが販売部門の下位群化であることを提示するように要求し、次に、自転車販売部門などが要求する時に繰り返すことができる。既知の無効化要求が、これらの群化の１つにリンクされるキャッシュに到達するか、あるいは関連するオブジェクト決定要因が、クライアント要求で識別される場合（たとえば、要求を構文解析する際に見られるオートバイ販売部門の販売／オートバイに対する営業報告のポスト）、キャッシュは、オートバイ販売部門の群化で、キャッシュされたすべてのオブジェクトを評価することを把握する。
【０５０５】
このようにして、キャッシュが、アプリケーションによって供給されたデータに変更が行われたか、あるいは変更が行われることを認識する場合（キャッシュが、キャッシュによって受信された要求の内容が、アプリケーションにおける変更をトリガすることを認識するため、あるいは多少外側で変化が生じるため）、上記の技術は、キャッシュが、迅速かつ単純に、どのオブジェクトが、群化のプロセスを通して無効化を要求するかを特定することを可能にする。このようにして、キャッシュは、アプリケーションまたはデータベースの状態の変化により、フレッシュではなくなった多くの動的に生成されたオブジェクトを無効化することができる。
【０５０６】
キャッシュが、そのキャッシュメモリから、動的に生成されたコンテンツを正常に記憶し、供給する機能は、要求および応答のトラフィックを検査して、殆どのキャッシングの利益を提供すると思われるオブジェクトの集合をある期間にわたって決定するため、知的エンジンによっても強化することができる。このエンジンは、キャッシュアプライアンス自体内に統合するか、あるいは別個のコンピュータで発見的に実行し、オブジェクトのいくつかのサブセットを選択して、動的キャッシングに対する適合性を決定するためにさらに調査することができる。
【０５０７】
ｉ．オブジェクト決定要因のさらに他の使用法
上記のとおり、オブジェクト決定要因は、オブジェクト決定要因が関連するキャッシュ内に記憶され、以前に供給されたオブジェクトの群に対して、起源サーバ内で変更が行われたか、あるいは変更が行われるかどうかを指示する任意のデータ構造でよい。オブジェクト決定要因は、要求に埋め込まれた、予め画定された文字列に基づいて設定することができる。たとえば、要求が、特定のＵＳＥＲＩＤとともに到着する場合、ＵＳＥＲＩＤは、ポストまたはその他の要求が特定のＵＳＥＲＩＤから到着するごとに、無効化するべきキャッシュメモリ内のオブジェクト群にリンクさせることができる。オブジェクト決定要因の潜在的な候補は、オブジェクトを最初に供給したサーバのサービス識別子を使用することも含むことができる。サービス識別子は、ＨＴＴＰ要求中に存在するサービスＩＰアドレス、ＴＣＰポート、およびサービス識別子を含む。
【０５０８】
要求中に存在するもう１つの潜在的なオブジェクト決定要因は、要求ユニフォームリソースロケータ（「ＵＲＬ」）である。静的オブジェクトのキャッシングの場合、要求ＵＲＬは、一般に、オブジェクトを一意に特定するのに十分である。しかし、動的に生成されたコンテンツの要求の場合、ＵＲＬ中に存在する情報は、キャッシュされたオブジェクトを特定するには十分ではない場合がある。したがって、キャッシュは、ＨＴＴＰヘッダ、クッキーヘッダ、またはその他のカスタムＨＴＴＰヘッダ中に含まれるオブジェクト決定要因を発見するために、要求中の他の情報を検査しなければならない。キャッシュは、クライアント要求中の他の様々な場所に、関連パラメータ情報のサブセットをさらに探すことができる：これらの場所としては、ＵＲＬ問合せ文字列、ＰＯＳＴ本体、クッキーヘッダ、またはその他の任意の要求、または応答ヘッダを含むが、これらだけに限らない。
【０５０９】
オブジェクト決定要因のＵＲＬを構文解析する際の問題は、ＵＲＬおよびその他のヘッダが、キャッシュの決定に関連する情報のほかに多くの情報を含み得るということである。したがって、キャッシュは、適切なオブジェクト決定要因を識別することができる非常に多くの情報を通して構文解析することができなければならない。さらに、ヘッダ内のデータは任意に配列されることが多く、これは、このようなデータをＨＴＴＰヘッダ内に配置する標準化された方法がなく、多くの場合、このような文字列内の関連オブジェクト決定要因を探すには、単純な比較では不十分であることを意味する。
【０５１０】
特定のオブジェクト決定要因を、キャッシュメモリ内に記憶された関連オブジェクトまたはオブジェクト群と適合させるための予め構成されたポリシーがない場合、キャッシュは、別の実施態様では、まだこのような決定を行い得る。たとえば、キャッシュは、要求の様々な態様を検査および構文解析して、他の任意のオブジェクト決定要因をこのような要求内で探して、キャッシュメモリに記憶され、無効化するべき特定のオブジェクトにその要求をリンクさせることができるかどうかを確認することができる。あるいは、キャッシュが予め画定された経験則に基づいて、特定のオブジェクトまたはオブジェクト群に有意にリンクさせることができると決定する特定のオブジェクト決定要因に対する要求を、キャッシュが検査することを可能にすることもできる。たとえば、要求が、特定のＵＳＥＲＩＤに関連するカレンダーの更新のためにキャッシュに到着する場合、一実施態様は、カレンダーを更新する要求のＵＳＥＲＩＤに等しいＵＳＥＲＩＤを含み、任意のある特定の日のユーザのカレンダーを含むキャッシュされたすべてのオブジェクトを無効化する必要があることを認識するように設定することができる。
【０５１１】
キャッシュは、オブジェクト決定要因が、名前＝値の群、または類似の対として、不特定の順序でＵＲＬステム内、ＵＲＬ内に存在する問合せ、ＰＯＳＴ本体内、またはクッキーヘッダ内に存在すると仮定することもできる。一実施態様では、問い合わせは、名前＝値の対のリストとしてフォーマットされると仮定される。したがって、ユーザは、どのパラメータ名が重要であるかを構成することができる。キャッシュされたすべてのオブジェクトは、最初にそのアクセスＵＲＬを使用してキーされる。このＵＲＬは、／ｓｉｔｅ／ａｐｐｌｉｃａｔｉｏｎ／ｓｐｅｃｉａｌ／ｆｉｌｅ．ｅｘｔ？ｐ１＝ｖ１＆ｐ２＝ｖ２＆ｐ３＝ｖ３のように見える。／ｓｉｔｅ／ａｐｐｌｉｃａｔｉｏｎ／ｓｐｅｃｉａｌ／ｆｉｌｅ．ｅｘｔ部分は、ＵＲＬステムである。ｐ１＝ｖ１＆ｐ２＝ｖ２＆ｐ３＝ｖ３部分はＵＲＬの問い合わせであり、パラメータ−値の対を含む。これらのパラメータ−値の対も、ＰＯＳＴ本体内またはクッキーヘッダ内に存在し得る。
【０５１２】
一実施態様では、ユーザまたは管理者は、ｐ１およびｐ２は無効化パラメータまたはオブジェクト決定要因とすると確立する。したがって、キャッシュは、ｐ１およびｐ２の値に一致したオブジェクトを自動的に群化するであろう。この群化をインプリメントする１つの方法は、ｐ１およびｐ２をデータベーステーブル内の一次キーに、つまり、キャッシュが、検証ステータスを決定するためにどのように参照するかを理解するテーブル内の一意に識別可能なオブジェクトにマッピングすることである。これらのデータベーステーブル内の何かを更新して、キャッシュ内のデータストアがもはや有効ではないという事実を反映するため、キャッシュは、ｐ１およびｐ２に新しい値を指定し、次にそれらのコンテンツを供給しようとする時に、この新しい値を認識すると、そのメモリ内に記憶され、リンクされているオブジェクトを無効化することを理解するであろう。キャッシュは、このような要求に遭遇し、この更新要求を見ると、一致するｐ１およびｐ２の値を含む群を無効化しなければならないことを理解する。つまり、キャッシュは、起源内のデータは変化しており、それによって、ｐ１およびｐ２オブジェクト決定要因に関連するすべてのオブジェクトに影響することを理解するからである。
【０５１３】
管理者が、要求内にオブジェクト決定要因として埋め込まれた特定のパラメータを予め構成していないというさらに複雑な事例に対処するには、キャッシュは、関連するオブジェクト決定要因を要求から抽出し、オブジェクトの群化をいつ無効化するかを識別する際に支援するように、ユーザが構成したポリシーを展開することができる。次に、決定要因文字列は、キャッシュ内に記憶されたオブジェクト群を探し、このようなオブジェクトを無効化するために使用される。これらのオブジェクト決定要因は、重要なパラメータ値のリストを作成するように、キャッシュを構成するために使用することができる。到着する書き込み要求が、この重要なパラメータに一致する値を有する場合、これらのパラメータ名に関連付けられているオブジェクトは無効化されるべきである。あるいは、ユーザは、オブジェクト決定要因文字列を要求から抽出することができるポリシーフレームワーク動作を指定することができる。オブジェクト決定要因文字列は、書き込み要求から抽出され、一致する決定要因文字列を含むすべてのオブジェクトは無効化される。この別の方法では、要求がキャッシュに到着し、キャッシュは、要求の文字列が検証ポリシーに一致するかどうかを決定する。無効化ポリシーは、コンテンツ群を無効化するべきオブジェクトを指定する。
【０５１４】
あるいは、キャッシュは、クライアント要求内に存在し得る任意のその他の情報を使用することができる。上記のとおり、認証および承認の統合によって、キャッシュは、ユーザ情報にアクセスすることができる。ＵＳＥＲＩＤまたはＧＲＯＵＰＩＤは、キャッシュされたオブジェクトの関連する群化が、ユーザまたはユーザ群にリンクされている場合に、決定要因の１つになり得る。ユーザ情報は、重要なオブジェクト決定要因であることが多いにも関わらず、ＨＴＴＰ要求内に存在しなくてもよい場合が多い。さらに他の実施態様では、動的キャッシング態様は、キャッシュを、特定の種類の認証、アクセス制御、および監査（ＡＡＡ）基盤を実行する機能を含む多様なその他のネットワーク構築要素と統合するためのシステムおよび方法と結合することができる。したがって、アプリケーションによって生成されたデータに適するセキュリティレベルは、代わりにキャッシュから供給されるデータに適用される。この技術によって、アプリケーションは、さもなければキャッシュすることができない敏感なアクセス制御情報をキャッシュすることができる。
【０５１５】
この方法は、キャッシュが、識別可能なユーザ情報をＨＴＴＰ要求に含まないが、統合キャッシング特許に記載されているＡＡＡ法を介して識別可能であり得るユーザを識別することを可能にする。このような方法は、キャッシュが、ＡＡＡ処理から分割することができる承認状態情報を検査することによって、特定の要求に関連するユーザを識別することを可能にする。さらに他の実施態様では、統合によって、キャッシュ内に記憶された情報にセキュリティポリシーを適用し、承認されないユーザが、キャッシュに記憶された情報にアクセスすることを防止することができる。
【０５１６】
この方法は、動的に生成されたデータの相当部分は、このようなデータを要求するクライアントが承認および認証された後、キャッシュは、クライアントからの関連する要求に応答することができるという事実によって課される問題にも対処する。キャッシュには、認証されたユーザによって行われる要求を承認する機能がなければならないため、アプリケーションは、キャッシュ制御オブジェクトをキャッシュすることができ、このような動的なキャッシング技術を認証および承認情報と統合することによって、このセキュリティを達成することができる。ＵＳＥＲＩＤまたはＧＲＯＵＰＩＤは、オブジェクトがユーザまたはユーザ群に個人化される場合、オブジェクト決定要因の１つであるだろう。したがって、アプリケーションによって生成されるデータに適するセキュリティレベルは、キャッシュされた情報にも適用される。この技術によって、アプリケーションは、さもなければキャッシュすることができない敏感なアクセス制御情報をキャッシュすることができる。
【０５１７】
最後に、時刻、起源におけるデータベースの状態などのその他の情報は、要求から構文解析して、キャッシュ内に記憶されたオブジェクトがまだ有効かどうかを決定するために、オブジェクト決定要因として使用することができる。キャッシュは、このような外部の変数に敏感であるように構成されるオブジェクトを群化する際に、適切な失効様式を構成することによって、この状況に対処し得る。
【０５１８】
動的コンテンツに対する要求は、キャッシングによって構文解析し、解釈しなければならないという事実によって生じる問題にさらに対処するため、一実施態様によるキャッシュは、どのパラメータがキャッシュに関連するオブジェクト決定要因であるとみなすかを制限することができる。このようにして、適用可能なアプリケーションサーバに要求を回送するのではなく、オブジェクトをキャッシュから供給する成功率を強化することができる。一例として、クライアントからの要求問い合わせは、ある都市および状態パラメータの両方を含み得る。しかし、キャッシュは、キャッシュが、クライアントから到着する要求であって、問い合わせの提示が、都市の値に関係のない特定の状態のすべてのクライアントから到着する要求に応答を供給することができることを認識するために、コンテンツを記憶しているアプリケーションの要件に適合するように構成することができる。このため、都市パラメータは関連性がなく、キャッシュは、この事実を認識することができる。別の実施態様は、状態パラメータに何がしていされているかに関係なく、都市パラメータだけが一致する場合、キャッシュから応答を供給することができるようにキャッシュを構成することを含む。
【０５１９】
要約すると、キャッシュは、パラメータ化された汎用オブジェクトの適合をインプリメントする。この方法では、キャッシュは、オブジェクト決定要因として有用な要求内の情報のサブセットであって、特定のオブジェクトにリンクされるサブセットを認識し、このようなオブジェクト決定要因が認識される時に、キャッシュが、オブジェクトまたはオブジェクト群が、フレッシュであり、キャッシュから供給できる状態を維持するかどうかを評価する際に、このような決定要因の存在（あるいは、逆に、このような決定要因の不在）を利用することができるように構成される。キャッシュは、要求が到着するごとに、構成されたパラメータを対照するために調査し、要求されたデータがフレッシュな状態を保ち、キャッシュが、関連データを、キャッシュメモリ内に記憶された適切なオブジェクトと一致させることも可能かどうかを決定するためのテーブルを維持する。
【０５２０】
ｊ．インカーネーション番号
さらに別の実施態様では、キャッシュは、インカーネーション番号を使用してオブジェクト群を無効化することができる。キャッシュが、起源の状態が変化したために、ある時点でオブジェクト群の各々の状態を変更する必要がある場合、インカーネーション番号は、この無効化を行うための単純な技術を提供する。各々のオブジェクトを識別し、状態を個々に変更することは、キャッシュ内に記憶されたデータのフレッシュさを確保するのに非効率的な方法だが、インカーネーション番号を使用すると、はるかに単純かつ効率的な方法で、オブジェクト群を無効化することができる。この実施態様は、各々のオブジェクトが、群を表すデータ構造をどのように指示し、したがって、サーバが、その群のデータ構造内の状態を変更するコマンドのみを送信すればよいかを説明する。キャッシュされたオブジェクトに関するその後の要求が、クライアントから到着する場合、キャッシュは、状態が変化したかどうかを理解しなければならない。そのために、キャッシュは、データ構造を検索し、その群の状態が変化したかどうかを参照する。
【０５２１】
データ構造を効率的にインプリメントするには、キャッシュは、状態の変化をルックアップするかどうかを決定することができなければならない。したがって、キャッシュは、キャッシュが、群内の状態の変化を既に確認したかどうかを決定することができなければならない。これは、インカーネーション番号が役立つ場合である。キャッシュは、動的に生成されたオブジェクトをコンテンツ群に関連付ける。これらのコンテンツ群の各々は、特定の索引値または「インカーネーション番号」がデータ構造内に含まれるハッシュテーブルルックアッププロセスにより表すことができる。その後、キャッシュが、状態の変化を生じるとキャッシュが認識するクライアント要求を受信する時は常に、クライアントは、関連するパラメータに関してクライアント要求を構文解析して、認識したオブジェクト決定要因に基づいてハッシュルックアップを実行し、データ構造内の索引またはインカーネーション番号を増加させる。指定の群化の際に記憶されたオブジェクトが、クライアントによって要求されるごとに、キャッシュは、オブジェクトに関してハッシュアルゴリズムを実行し、そのオブジェクトと、それらのコンテンツ群のデータ構造内記憶された元の値とを比較する。記憶された値が、そのオブジェクトに関してキャッシュが計算した数と同じである場合、キャッシュは、コンテンツはフレッシュな状態を保ち、要求側に供給することができることを理解する。キャッシュが、データ構造内の当該オブジェクトに関して計算された現在のインカーネーション番号と、データ構造内の当該コンテンツ群に関して記憶されている数との矛盾を検出した場合、キャッシュは、記憶されたオブジェクトはもはやフレッシュではないことを理解する。キャッシュは、次に、記憶されたオブジェクトを無効化し、要求をアプリケーションサーバに送信する。応答が戻る場合、キャッシュアプライアンスは、新しい応答をキャッシュメモリ内に記憶し、その応答を再び新しいデータ構造にリンクさせる。その後、キャッシュが、群化の際にオブジェクトに対する要求を受信するごとに、キャッシュは比較を行い、データ構造にさらに変更は行われなかったと仮定すると、キャッシュは、新たに記憶されたオブジェクトを供給することができる。
【０５２２】
この様式のオブジェクト群の無効化を利用することによって、キャッシュは、非常に迅速に無効化することができ、所要時間は、無効化されるオブジェクトの数に関係なく一定である。このより迅速で、より効率的な無効化プロセスにより、この技術は、キャッシュが、動的に生成されたオブジェクトをより効率的に処理することを可能にする。この方法は、アプリケーションの前に位置するキャッシュアプライアンスが、当該データ内の迅速な変更のために、無効あるいは古いコンテンツを供給せずに、動的に生成されたオブジェクトをより積極的に記憶し、供給することを可能にする。この実施態様は、キャッシュが、頻繁に、あるいは予測不能に変化するデータを供給して、それによってキャッシュの性能を改善することを可能にする。キャッシュは、ユーザコマンドを使用して、また様々な種類のウェブトラフィックを検査および群化することによって、キャッシュメモリ内に記憶されたオブジェクトおよびオブジェクト群を無効化することもできる。
【０５２３】
２．接続プーリング
一実施態様では、ネットワークアプライアンス１２５０（本明細書では、インターフェースユニット１２５０とも呼ぶ）は、各々のサーバとの１つまたは複数の接続を開き、クライアントがＩｎｔｅｒｎｅｔを介してデータに繰り返しアクセスすることができるように、これらの接続を維持することによって、クライアントとの接続を繰り返し開閉することによって生じるサーバ３０の処理負荷の多くを軽減する。この技術は、本明細書では「接続プーリング」と呼ぶ。
【０５２４】
完全を期すために、接続プーリングの動作について、図３０に関して次に簡単に説明する。このプロセスは、図３０では、クライアント１０が、インターフェースユニット１２５０が仲介するサーバファーム内の１つのサーバに対するアクセスを要求する時に開始する。ステップ４３０２に示すように、インターフェースユニット１２５０と、要求するクライアントとの間の接続が開かれ、インターフェースユニット１２５０は、サーバに対するクライアントのアクセス要求を受信する。インターフェースユニット１２５０は、ステップ４３０４に示すように、要求されたサーバのアイデンティティを決定する。一実施態様では、これは、クライアントの要求によって指定される宛先のネットワークアドレスを検査することによって達成される。別の実施態様では、これは、クライアントの要求によって指定されるネットワークアドレスおよびパス名を検査することによって達成される。
【０５２５】
インターフェースユニット１２５０は、クライアントの要求を送るべきサーバ３０のアイデンティティを決定した後、ステップ４３０６に示すように、サーバに対する自由接続（つまり、使用されていない接続）が既に開かれているかどうかを決定する。開かれている場合、ステップ４３１０で処理が再開する。開かれていない場合、インターフェースユニット１２５０は、ステップ４３０８に示すように、サーバに対する接続を開く。インターフェースユニット１２５０は、次に、ステップ４３１０に示され、図３１に関して以下でより完全に説明するように、クライアントの要求を翻訳して、要求をサーバに渡す。サーバの処理の後、インターフェースユニットは、ステップ４３１２に示すように、要求をサーバから受信する。ステップ４３１４に示され、以下でさらに説明するように、サーバの応答は翻訳され、要求するクライアントに渡される。最後に、インターフェースユニット１２５０は、ステップ４３１６に示すように、クライアントとの接続を閉じる。しかし、インターフェースユニット１２５０およびサーバ間の接続は切断されない。サーバとのオープン接続を維持し、クライアントとの接続を必要に応じて開閉することによって、インターフェースユニット１２５０は、Ｉｎｔｅｒｎｅｔを通してクライアントに供給することに関連して、ほぼすべての接続負荷問題からサーバ３０を解放する。
【０５２６】
以下でさらに説明するように、いくつかの実施態様は、ステップ４３１６に関連しており、インターフェースユニット１２５０は、クライアント１０との接続を閉じる。インターフェースユニット１２５０がクライアントとの接続を閉じる場合、多くの状況がある。たとえば、クライアントは、ＦＩＮ（終了）コマンド、またはＲＳＩ（リセット）コマンドを開始する場合がある。これらの２つの状況では、インターフェースユニット１２５０は、インターフェースユニット１２５０自体とクライアントとの間の接続がなくなる前に、これらのコマンドの１つを受信するまで待つ。接続プーリングによる非効率は、クライアントが接続を使用しないか、または接続を断つが、ある期間にわたって、この情報をインターフェースユニット１２５０に中継しない場合に生じる。インターフェースユニット１２５０は、別のクライアントとの接続を再使用するために、クライアントからのコマンドを待っているので、接続は不必要につながれている。
【０５２７】
以下でさらに詳細に説明するとおり、ハイパーテキスト転送プロトコル（ＨＴＴＰ）１．１（初期設定で）およびＨＴＴＰ  １．０（Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ−Ａｌｉｖｅ技術による）は、クライアントおよび／またはインターフェースユニット１２５０が、要求に対するサーバの応答を受信後でも、サーバとの接続を開いておくことを可能にする。クライアントおよび／またはインターフェースユニット１２５０は、次に、直後、または相当な時間（あるいは、「思考時間」）が経過した後に、同じ接続を介して他の要求を発行し得る。クライアントは、クライアントの人間のオペレータが、ブラウザ上の次のリンクを決定してクリックする時などに「思考時間」にある。その結果、サーバが、接続を介して何かの要求を処理していない場合でも、接続がサーバによって維持されることになる。この場合、アイドル状態または「思考時間」にある接続が閉じられた後のＫｅｅｐ−Ａｌｉｖｅタイムアウトを設定することによって、サーバ管理者は、サーバ上の非常に多くの同時接続に対する保護をせざるを得ない場合がある。ある実施態様は、クライアント１０が「思考している」間に、クライアント１０’によるサーバとの接続を可能にする。当然、クライアント１０がサーバ接続を使用している時にクライアント１０’が要求を行う場合、クライアント１０’は、サーバに対する異なる接続を使用しなければならない。しかし、一実施態様の接続プーリングの効率性は、非常に少数の接続を超えて、一般的なケースになった時に実現される。一般的なケースとは、「ｎ個」のクライアント接続が統計的に「ｍ個」のサーバ接続上で多重化される場合のことで、この時「ｎ」は「ｍ」より大きい。
【０５２８】
図３１は、ステップ４３１０および４３１４（図３０）に示すように、クライアントおよびサーバの要求を翻訳する一実施態様の動作を示すフローチャートである。一実施態様では、メッセージトラフィックはＴＣＰ／ＩＰパケットの形式、先行技術で十分に公知のプロトコルスイートである。ＴＣＰ／ＩＰプロトコルスイートは、Ｔｅｌｎｅｔ、ファイル転送プロトコル（ＦＴＰ）、ｅメール、およびＨＴＴＰなどの多くのアプリケーションをサポートする。この実施態様は、ＨＴＴＰプロトコルに関して説明する。しかし、このコンセプトは、当業者にとっては、本明細書を読むと明らかになるように、他のＴＣＰ／ＩＰアプリケーションにも同様によく適用される。
【０５２９】
各々のＴＣＰパケットは、ＴＣＰヘッダおよびＩＰヘッダを含む。ＩＰヘッダは、３２ビットのソースＩＰアドレス、および３２ビットの宛先ＩＰアドレスを含む。ＴＣＰヘッダは、１６ビットのソースポート番号、および１６ビットの宛先ポート番号を含む。ソースＩＰアドレスおよびポート番号は、ソースネットワークアドレスと総称され、パケットのソースインターフェースを一意に識別する。同様に、宛先ＩＰアドレスおよびポート番号は、宛先ネットワークアドレスと総称され、パケットの宛先インターフェースを一意に識別する。パケットのソースおよび宛先ネットワークアドレスは、接続を一意に識別する。同様に、宛先ネットワークアドレスと総称される宛先ＩＰアドレスおよびポート番号は、パケットに対する宛先インターフェースを一意に識別する。パケットのソースおよび宛先ネットワークアドレスは、接続を一意に識別する。ＴＣＰヘッダは、３２ビットのシーケンス番号、および３２ビットの確認応答番号も含む。
【０５３０】
パケットのＴＣＰ部分は、ＴＣＰセグメントと呼ばれる。ＴＣＰセグメントは、ＴＣＰヘッダおよび本文を含む。ＴＣＰセグメントの本文部分は、ＨＴＴＰヘッダおよびメッセージを含む。メッセージの長さを決めるメカニズムは２つあり、一方はチャンク転送符号化に基づき、もう一方はコンテンツの長さに基づく。コンテンツ長ヘッダファイルは、ＨＴＴＰヘッダに見られる。コンテンツ長ヘッダフィールドが存在する場合、そのバイト値はメッセージ本文の長さを表す。あるいは、チャンク転送符号化ヘッダがＨＴＴＰヘッダ内に存在し、「チャンク」転送符号化が適用されたことを指示する場合、メッセージの長さは、チャンク符号化によって画定される。チャンク符号化は、各々のチャンク自体の指標がチャンクサイズのフィールドに含まれる一連のチャンクとしてメッセージを転送するために、メッセージ本文を修正する。
【０５３１】
以下で詳細に説明するとおり、一実施態様は、コンテンツ長パラメータおよび／またはチャンク転送符号化ヘッダを使用して、クライアントが「思考時間」にある状況を避けることによって、サーバおよびクライアント間の接続プーリングの効率を増加する。この実施態様がない場合、インターフェースユニット１２５０は、クライアントからのコマンドを待った後、別のクライアントに対する接続を再使用するか、あるいは接続は、非常に長い間アイドルだった時にタイムアウトになる。
【０５３２】
上記の３２ビットシーケンス番号は、ＴＣＰセグメント中のデータの最初のバイトが表す送信ＴＣＰから受信ＴＣＰへのデータの文字列中のバイトを識別する。交換されるすべてのバイトは番号が付けられるため、確認応答番号は、確認応答の送信側が受信することを予想する次のシーケンス番号を含む。したがって、これは、シーケンス番号に、最後に正常に受信されたデータのバイトの１つを加えた値である。チェックサムは、ＴＣＰセグメント、つまりＴＣＰヘッダおよび応答データ（または本文）を対象とする。これは、送信側によって計算され、記憶されて、受信側によって検証されなければならない必須のフィールドである。
【０５３３】
クライアントから意図するサーバに到着するパケットを正常に経路指定するか、またはサーバからクライアントに出て行くパケットを経路指定するために、インターフェースユニット１２５０は、「ネットワークアドレス翻訳」として公知のプロセスを使用する。ネットワークアドレス翻訳は、先行技術で公知であり、ＵＲＬｈｔｔｐ：／／ｗｗｗ．ｓａｆｅｔｙ．ｎｅｔ／ＲＦＣ１６３１．ｔｘｔで探すことができるｒｅｑｕｅｓｔ  ｆｏｒ  ｃｏｍｍｅｎｔ（ＲＦＣ）１６３１によって指定される。
【０５３４】
しかし、クライアントとサーバとの接続を途切れなくスプライスするため、１９９８年１１月１０日に出願された本願と同一所有権者による米国特許出願第０９／１８８，７０９号「Ｉｎｔｅｒｎｅｔ  Ｃｌｉｅｎｔ−Ｓｅｒｖｅｒ  Ｍｕｌｔｉｐｌｅｘｅｒ」に、新規な翻訳技術が詳細に記載されており、この特許出願は、本明細書では「接続多重化」と呼ぶ。この技術によると、パケットは、シーケンス番号および確認応答番号をＴＣＰプロトコルレベルで修正することによって翻訳される。この技術の重要な利点は、アプリケーション層の相互作用が不要なことである。
【０５３５】
図３１を参照すると、ステップ４４０２に示すように、パケットのネットワークアドレスが翻訳される。到着するパケット（つまり、クライアントから受信されるパケット）の場合、パケットのソースネットワークアドレスは、インターフェースユニット１２５０の出力ポートのアドレスに変更され、宛先ネットワークアドレスは、意図するサーバのアドレスに変更される。出て行くパケット（つまり、サーバから受信されるパケット）の場合、ソースネットワークアドレスは、サーバのアドレスからインターフェースユニット１２５０の出力ポートのアドレスに変更され、宛先アドレスは、インターフェースユニット１２５０のアドレスから要求するクライアントのアドレスに変更される。パケットのシーケンス番号および確認応答番号も、ステップ４０４および４０６に示され、以下で詳細に説明するように翻訳される。最後に、パケットのチェックサムは、ステップ４４０８に示すように、これらの翻訳を説明するように再計算される。
【０５３６】
上記のとおり、一実施態様は、特に、コンテンツ長パラメータ、および／またはチャンク転送符号化ヘッダが、サーバおよびクライアント間の接続プーリングの効率を増加させるにも関わらず、ネットワーククライアント−サーバの接続を効率的にプールするための装置、方法、およびコンピュータプログラム製品に関する。効率の増加は、クライアントが「思考時間」にある時に、接続を占有するのを避けた結果である。一実施態様では、コンテンツ長パラメータは、メッセージの長さを決めるために使用される。別の実施態様では、チャンク転送符号化は、メッセージの長さを決めるために使用される。２つの実施態様について、それぞれ図３２および３３に関して次に説明する。
【０５３７】
図３２は、ＴＣＰセグメント４５００と呼ばれるＴＣＰパケットのＴＣＰ部分を示す。ＴＣＰセグメント４５００は、ＴＣＰヘッダ４５０２および本文４５０４を含む。本文４５０４は、その他の情報にＨＴＴＰヘッダおよびメッセージを含む。コンテンツ長パラメータ４５０６は、ＨＴＴＰヘッダ内に見られる。ある実施態様が、コンテンツ長パラメータ４５０６をどのように使用して、より効率的な接続プーリングを提供するかについて、図３５および３６に関して以下で説明する。
【０５３８】
図３３は、ＴＣＰセグメント４６００と呼ばれるＴＣＰパケットのＴＣＰ部分を示す。上記のとおり、チャンク転送符号化ヘッダが、ＨＴＴＰヘッダ内に存在し、「チャンク」転送符号化が適用されたことを指示する場合、メッセージの長さはチャンク符号化によって画定される。チャンク符号化は、各々のチャンク自体の指標がチャンクサイズのフィールドに含まれる一連のチャンクとしてメッセージを転送するために、メッセージ本文を修正する。ＴＣＰセグメント４６００は、ＴＣＰヘッダ（図示しない）および本文を含む。本文は、情報の中に、ＨＴＴＰヘッダ４６０２Ａ〜４６０２Ｃおよびメッセージを含む。ＨＴＴＰヘッダ４６０２Ａ〜４６０２Ｃは、７つのチャンクサイズのフィールド４６０６Ａ〜４６０６Ｇ；および６つのチャンクメッセージデータ４６０４Ａ〜４６０４Ｆから成る。
【０５３９】
チャンクサイズのフィールド４６０６Ａ〜４６０６Ｇは、図３３に示すように、互いにリンクされる。チャンクサイズのフィールド４６０６Ａは、チャンクメッセージデータ４６０４Ａ内のメッセージの長さを指示し、チャンクサイズのフィールド４６０６Ｃは、チャンクメッセージデータ４６０４Ｃ内のメッセージの長さを指示し、以下同様である。最後のチャンクサイズのフィールド４６０６Ｇは、常に、後に続くメッセージは存在しないことを示す長さ値ゼロを含む。これは、すべてのメッセージがクライアントに送信されたという指示である。ある実施態様が、チャンクサイズのフィールド４６０６Ａ〜４６０６Ｇをどのように使用して、より効率的な接続プーリングを提供するかは、図３７および３８に関して以下で説明する。図３３のＴＣＰセグメント４６００は、具体的に説明するものでしかないことに注目することは重要である。
【０５４０】
ある実施態様が、コンテンツ長パラメータをどのように使用して、接続プーリングの効率を高めるかの詳細を説明する前に、完全を期すために、１９９８年１１月１０日に出願された米国特許出願第０９／１８８，７０９号「Ｉｎｔｅｒｎｅｔ  Ｃｌｉｅｎｔ−Ｓｅｒｖｅｒ  Ｍｕｌｔｉｐｌｅｘｅｒ」に説明されている接続プーリングについて最初に説明する。図３４は、接続プーリングを示すメッセージフロー図である。図３４は、２つのクライアントＣ１およびＣ２をサーバＳに接続するインターフェースユニット１２５０を示す。２つのクライアントＣ１およびＣ２は、本明細書に記載する任意のクライアント１０を含むことができ、サーバＳは、本明細書に記載する任意のサーバ３０を含むことができる。先ず、インターフェースユニット１２５０は、フロー４７０２で示されるクライアントＣ１によって提供されるネットワークアドレス１を使用して、クライアントＣ１との接続を開く。流れ線４７０２は、ＴＣＰ／ＩＰプロトコルが多段ハンドシェークを使用して接続を開くため、双方向フローとして示されている。
【０５４１】
接続が開放されると、インターフェースユニット１２５０は、流れ線７０４で示すように、／ｓａｌｅｓ／ｆｏｒｅｃａｓｔ．ｈｔｍｌのパス名を指定するクライアントＣ１からＧＥＴ要求を受信する。自由接続は、インターフェースユニット１２５０およびサーバＳ間で開いていないため、インターフェースユニット１２５０はサーバＳとの接続を開放する。インターフェースユニット１２５０は、流れ線４７０６で示すように、この要求をネットワークアドレス２にマッピングし、ネットワークアドレス２はサーバＳを指定する。また、インターフェースユニット１２５０は、流れ線４７０８に示すように、ＧＥＴ要求を当該サーバに渡す。サーバＳは、流れ線４７１０で示すように、要求されたウェブページに応答する。インターフェースユニット１２５０は、流れ線４７１２に示すように、ウェブページをクライアントＣ１に回送する。最後に、流れ線４７１４に示すように、クライアントＣ１およびインターフェースユニット１２５０間の接続は閉鎖される。ＴＣＰ／ＩＰプロトコルによると、ネットワーク接続の閉鎖には、多段プロセスを含むことができる。したがって、流れ線４７１４は双方向に示されている。インターフェースユニット１２５０は、サーバＳとの接続を閉鎖するのではなく、追加のデータ流に適応するように接続を開放した状態を保つことに注意することが重要である。
【０５４２】
次に、流れ線４７１６に示すように、クライアントＣ２によって提供されるネットワークアドレス１を使用して、インターフェースユニット１２５０とクライアントＣ２との間の接続が開放される。次に、インターフェースユニット１２５０は、流れ線４７１８に示すように、Ｗｅｂ  ｐａｇｅ  ／ｓａｌｅｓ／ｆｏｒｅｃａｓｔ．ｈｔｍｌを指定するＧＥＴ要求をクライアントＣ２から受信する。自由接続は、インターフェースユニット１２５０とサーバＳとの間で既に開放しているため、インターフェースユニット１２５０が、さらに接続を開放する処理負荷をサーバＳに負わせる必要はない。インターフェースユニット１２５０は、自由なオープン接続を単に使用する。インターフェースユニット１２５０は、流れ線４７２０に示すように、ＧＥＴ要求をサーバＳにマッピングし、それを転送し、それをサーバＳに回送する。インターフェースユニット１２５０は、流れ線４７２２に示すようにサーバＳから応答を受信し、流れ線４７２４に示すようにクライアントＣ２に回送する。最後に、インターフェースユニット１２５０は、流れ線４７２６に示すように、クライアントＣ２との接続を閉じる。再び、インターフェースユニット１２５０は、サーバＳとの接続を閉じない。その代わりに、インターフェースユニット１２５０は、追加のデータ流に適応するように接続を開放した状態を保つ。
【０５４３】
上記のとおり、インターフェースユニット１２５０が、流れ線４７２４に示すようにクライアントＣ２との接続を閉鎖する結果を生じる状況がいくつかある。たとえば、クライアントは、ＦＩＮ（終了）コマンドを開始することができ、それは、クライアントが、要求されたすべてのデータ（またはメッセージ）を検索した後に生じる。クライアントは、ＲＳＴ（リセット）コマンドも開始し得る。ＲＳＴコマンドは、インターフェースユニット１２５０およびクライアント間の接続を閉じるほかに、サーバ側接続を良好に維持するために、ある数のハウスキーピング動作を実行する。特に、ＴＣＰプロトコルは、ＲＳＴコマンドが正しいＳＥＱ（シーケンス）番号を有し、その結果、サーバがＴＣＰセグメントを受け取ることを保証する；しかし、ＲＳＴコマンドは、正しいＡＣＫ（肯定応答）番号を有することを保証されない。この状況に対処するために、インターフェースユニット１２５０は、サーバによって送信されるデータのバイト、およびクライアントによって肯定応答されるバイトを常時把握する。クライアントが、サーバによってすべてのデータをまだ肯定応答されない場合、インターフェースユニット１２５０は、肯定応答されないバイトを計算し、ＡＣＫをサーバに送信する。さらに、サーバ側ＰＣＢは、タイムアウト待ち行列上に配置され、未解決のサーバデータ転送をドレインすることを可能にする。
【０５４４】
さらに、図３４には示さないが、サーバは、サーバ自体とインターフェースユニット１２５０との間の接続も閉鎖することができる。サーバは、ＦＩＮコマンドをインターフェースユニット１２５０に送信するであろう。この場合、サーバとインターフェースユニット１２５０との間の接続、およびインターフェースユニット１２５０とクライアントとの間の接続は閉鎖されるであろう。
【０５４５】
もう１つの態様は、サーバが接続を閉鎖する原因を最小限にすることによって、サーバからの接続処理のオフロードを最大限にすることである。３つの事例がある：
（１）プロトコルバージョンＨＴＴＰ／１．１が使用される。この場合、明確なＫｅｅｐ−Ａｌｉｖｅヘッダは不要である。デフォルトで、サーバは、接続の開放状態を維持する；接続を閉鎖するのは、クライアント次第である。ある一実施態様は、サーバ側の接続を再使用することによってサーバをオフロードする。接続を閉鎖するのはクライアント次第であるため、接続プーリングによる非効率は、クライアントが、接続を断たれたが、この情報をインターフェースユニット１２５０に対し、ある期間にわたって中継しない時に生じる。インターフェースユニット１２５０は、別のクライアントのための接続を再使用するために、クライアントからのコマンドを待っているので、接続は、不必要につながれている。
【０５４６】
（２）プロトコルバージョンＨＴＴＰ／１．０は、クライアントによって「Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ−Ａｌｉｖｅ」ヘッダが提供される。この場合、サーバは、接続を開放状態に保つ；接続を閉じるのは、クライアント次第である。ある実施態様は、サーバ側の接続を再使用することによって、サーバをオフロードする。プロトコルバージョンＨＴＴＰ／１．１と同様、接続プーリングによる非効率は、クライアントが、接続を断たれたが、この情報をインターフェースユニット１２５０に対し、ある期間にわたって中継しない時に生じる。
【０５４７】
（３）プロトコルバージョンＨＴＴＰ／１．０が使用され、「Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ−Ａｌｉｖｅ」ヘッダは、クライアントによって提供されない。この場合、サーバは、１つのＧＥＴ要求に完全に応えた後に通常どおり閉鎖されるであろう。サーバが、各々の要求の後に接続を閉じると、これは、インターフェースユニット１２５０を拒絶し、サーバ側の接続を再使用する機会を拒絶する。結局、Ｉｎｔｅｒｎｅｔの多くは、「Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ  Ａｌｉｖｅ」がないＨＴＴＰ／１．０を依然として使用する。この特定の重要な事例でサーバ側接続の再使用を可能にする新規な技術は、１９９８年１１月１０日に出願された本願と同一の所有権者による米国特許出願第０９／１８８，７０９号「Ｉｎｔｅｒｎｅｔ  Ｃｌｉｅｎｔ−Ｓｅｒｖｅｒ  Ｍｕｌｔｉｐｌｅｘｅｒ」に詳細に記載されている。インターフェースユニット１２５０は、ＧＥＴパケットを検査して、この状況を検出する。この事例が検出されると、インターフェースユニット１２５０は、「Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ  Ａｌｉｖｅ」をＧＥＴパケット内に挿入する。これは、クライアントに見えないように行われるため、インターフェースユニット１２５０は、サーバ側接続の「Ｂｙｔｅｓ  Ａｄｄｅｄ」の数を常時把握しなければならない。シーケンス番号は、最初のバイトのシーケンス番号であるため、「Ｂｙｔｅｓ  Ａｄｄｅｄ」は、ＧＥＴパケット内のシーケンス番号に影響しない。しかし、インターフェースユニット１２５０は、クライアントからサーバへの後続のパケットのシーケンス番号に「Ｂｙｔｅｓ  Ａｄｄｅｄ」を追加しなければならない。逆に、サーバは追加のバイトに肯定応答するが、インターフェースユニット１２５０は、確認応答をクライアントに送信する前に、追加のバイトを引かなければならない−クライアントは、これらのバイトが追加されたことを把握しない。
【０５４８】
上記のとおり、接続多重化は、多重化シーケンスおよび確認応答番号によって達成される。インターフェースユニット１２５０が受信したセグメントのシーケンスおよび確認応答番号は修正され、受信者が予想する値にマッピングされる。クライアントには、データは、サーバから到着するように思われ、逆もある。たとえば、「インフロー」が、インターフェースユニット１２５０が受信するセグメントを示し、「アウトフロー」は、対応する出て行くセグメントを示し、シーケンスおよび肯定応答番号は、以下のように変更される：
アウトフローシーケンス番号＝インフローシーケンス番号−インフロー開始シーケンス番号＋アウトフロー開始シーケンス番号
アウトフロー肯定応答番号＝インフロー肯定応答番号−インフロー開始肯定応答番号＋アウトフロー開始肯定応答番号
ＨＴＴＰ／１．０パケットの「Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ  Ａｌｉｖｅ」ヘッダの追加に対処するため、インターフェースユニット１２５０は、接続の適切な半分、この場合はサーバ側、における「Ｂｙｔｅｓ  Ａｄｄｅｄ」を常時把握する。シーケンス番号および確認応答番号の公式は、以下のように変更される：
アウトフローシーケンス番号＝インフローシーケンス番号−インフロー開始シーケンス番号＋アウトフロー開始シーケンス番号＋追加アウトフローバイト
アウトフロー肯定応答番号＝インフロー肯定応答番号−インフロー開始肯定応答番号＋アウトフロー開始肯定応答番号−追加インフローバイト。
【０５４９】
より効率的な接続プーリングを提供するために、これらの式を使用し、一実施態様のコンテンツ長パラメータ技術を組み込んで行われる翻訳の特定の例は、図３５および３６（コンテンツ長パラメータに関連する）、および図３７および３８（チャンクサイズのフィールドに関連する）に関して以下で説明する。
【０５５０】
図３５は、コンテンツ長パラメータ技術を導入する際に、一実施態様により実行される確認応答およびシーケンス番号の翻訳を示す詳細なフロー図である。図３５内の各々のフローのラベルは、Ｔ：Ｓ，Ａ（Ｌ）の形式であり、ここで、ＴはＴＣＰセグメントのタイプを表し、Ｓはシーケンス番号、Ａは確認応答番号、およびＬはコンテンツ長パラメータである。コンテンツ長パラメータは、メッセージ中のデータのバイト数を記述する。
【０５５１】
フロー４８０２Ａ〜４８０２Ｃは、クライアントＣ１およびインターフェースユニット１２５０間の接続を開く１つの方法を提示する。各々のフローは、ＴＣＰセグメントを表す。ＴＣＰセグメント４８０２Ａでは、ＴＣＰヘッダ内のＳＹＮフラグが設定され、クライアントＣ１からの新しい接続要求を示す。クライアントＣ１は、開始シーケンス番号２０００および確認応答番号２０００を確立した。インターフェースユニット１２５０は、フロー４８０２Ｂに示すように、開始シーケンス番号４０００を指定し、確認応答番号を２００１に増加するＳＹＮ  ＡＣＫセグメントに応答する。ネットワーク内の各々のエンティティ（たとえば、クライアント、サーバ、インターフェースユニット）は、先行技術で公知のように、独自のシーケンス番号および／または確認応答番号を設定する。クライアントＣ１は、フロー４８０２Ｃに示すように、シーケンス番号２００１を指定し、確認応答番号を４００１に増加するＡＣＫセグメントに応答する。クライアントＣ１は、次に、フロー４８０４に示すように、４９バイトの長さを指定するＧＥＴセグメントを送信する。
【０５５２】
インターフェースユニット１２５０が、フロー８０６Ａに示すように、サーバＳとの自由オープン接続は存在しないと決定し、その結果、ＳＹＮセグメントをサーバＳに送信し、開始シーケンス番号１９５０を指定すると仮定する。サーバＳは、４８０６Ｂに示すように、開始シーケンス番号６０００を指定し、確認応答番号を１９５１に増加するＳＹＮ  ＡＣＫセグメントに応答する。インターフェースユニット１２５０は、フロー８０６０に示すように、ＡＣＫセグメントに応答する。インターフェースユニット１２５０は、次に、流れ線４８０８に示すように、上記の翻訳式に従ってシーケンスおよび確認応答番号を修正した後、ＧＥＴセグメントをクライアントＣ１からサーバＳに回送する。
【０５５３】
サーバＳは、フロー４８１０に示すように、シーケンス番号６００１、確認応答番号２０００、およびコンテンツ長パラメータ９９９を指定する要求データに応答する。インターフェースユニット１２５０は、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、流れ線４８１２Ａに示すように、ＲＥＳＰセグメントをクライアントＣ１に回送する。
【０５５４】
この時点では、インターフェースユニット１２５０は、クライアントＣ２による要求を受信して接続を開く。上記のとおり、フロー４８１６Ａ〜４８１６Ｃは、クライアントＣ２およびインターフェースユニット１２５０間の接続を開くための１つの方法を提示する。やはり、各々のフローは、ＴＣＰセグメントを表す。ＴＣＰセグメント４８１６Ａでは、ＴＣＰヘッダ内のＳＹＮフラグが設定され、クライアントＣ２からの新しい接続要求を指示する。クライアントＣ２は、開始シーケンス番号９９９および確認応答番号９９９を確立している。インターフェースユニット１２５０は、フロー４８１６Ｂに示すように、開始シーケンス番号４９９９を指定し、確認応答番号を１０００に増加するＳＹＮ  ＡＣＫセグメントに応答する。クライアントＣ２は、フロー４８１６Ｃに示すように、シーケンス番号１０００を指定し、確認応答番号を５０００に増加するＡＣＫセグメントに応答する。クライアントＣ２は、次に、フロー４８１８に示すように、５０バイトの長さを指定するＧＥＴセグメントを送信する。
【０５５５】
この時点では、インターフェースユニット１２５０には、サーバＳに対する使用可能な接続がないと仮定する。目標は、クライアントＣ１が接続を断たれるか、あるいは「思考時間」にある場合、クライアントＣ１のために以前使用されていたサーバＳに対する同じ接続を再使用することである。クライアントＣ１が、ＦＩＮ（終了）コマンドまたはＲＳＴ（リセット）コマンドを開始して接続を解放するのを待つのではなく、インターフェースユニット１２５０は、コンテンツ長パラメータを使用して、要求されたすべてのデータがクライアントＣ１によって受信されたことを確認する。この場合、フロー４８１２Ｂでは、インターフェースユニット１２５０は、クライアントＣ１が要求されたすべてのデータを実際に受信したという確認をクライアントＣ１から受信する。これは、インターフェースユニット１２５０に対して、クライアントＣ１がＦＩＮまたはＲＳＴコマンドを送信する前に何らかの理由で一時停止するかも知れない場合でも、クライアントＣ１は接続を断たれることを指示する。インターフェースユニット１２５０は、確認応答およびシーケンス番号を修正して、フロー８１２Ｃに示すように、ＲＥＳＰ  ＡＣＫセグメントをサーバＳに回送する。
【０５５６】
クライアントＣ１に使用したのと同じ接続を使用して、インターフェースユニット１２５０は、次に、流れ線４８２０に示すように、上記の翻訳式に従ってシーケンスおよび確認応答番号を修正した後、ＧＥＴセグメントをクライアントＣ２からサーバＳに回送する。サーバＳは、フロー８２２に示すように、シーケンス番号７０００、確認応答番号２０５０、およびコンテンツ長パラメータ５００を指定する、要求されたデータに応答する。
【０５５７】
インターフェースユニット１２５０は、流れ線４８２４Ａに示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、ＲＥＳＰセグメントをクライアントＣ２に回送する。この場合、フロー４８２４Ｂでは、インターフェースユニット１２５０は、クライアントＣ２が、要求されたすべてのデータを実際に受信したという確認をクライアントＣ２から取得する。インターフェースユニット１２５０は、フロー４８２４Ｃに示すように、確認応答およびシーケンス番号を修正して、ＲＥＳＰ  ＡＣＫセグメントをサーバＳに回送する。
【０５５８】
次に、フロー４８２６Ａ〜４８２６Ｄに示すように、インターフェースユニット１２５０が、ＦＩＮまたはＲＳＴコマンドをクライアントＣ２から受信すると、クライアントＣ２およびインターフェースユニット１２５０間の接続は閉鎖されるか、あるいはリンクを削除される。同様に、次に、フロー４８１４Ａ〜４８１４Ｄに示すように、ＦＩＮまたはＲＳＴコマンドをクライアントＣ１から受信すると、クライアントＣ１およびインターフェースユニット１２５０間の接続が閉鎖されるか、あるいはリンクを削除される。しかし、インターフェースユニット１２５０が、サーバＳとの接続を維持していることに注意することは重要である。また、図３６に関連して記載したイベントのシーケンスは、単に具体的に示すためであることに注意することも重要である。
【０５５９】
図３６は、コンテンツ長パラメータを使用して、一実施態様によるクライアントおよびサーバ間の接続のプーリングの効率を増加する動作を示すフローチャートである。インターフェースユニット１２５０は、複数のサーバとの接続を維持し、クライアント要求に指定されているパス名に基づいて、これらのサーバに対するクライアント要求の経路を指定する。まず、インターフェースユニット１２５０は、ステップ４９０２に示すように、サーバとの接続を開放する。次に、クライアントＣ１の要求に応じて、インターフェースユニット１２５０は、ステップ４９０４に示すように、クライアントＣ１との接続を開放し、パス名を使用してデータを検索する要求をクライアントＣ１から受信する。
【０５６０】
インターフェースユニット１２５０は、次に、ステップ４９０６に示すように、パス名によって指定されるコンテンツをホストするサーバを選択する。代わりの実施態様では、インターフェースユニット１２５０は、予め画定されたその他のポリシーを調査し、サーバの負荷およびサーバの状態など、適切なサーバを選択する。インターフェースユニット１２５０は、サーバのデータベース、およびサーバが面倒を見るサーバファームを管理および維持する。特に、このデータベース内の情報は、インターフェースユニット１２５０が、到着するパケットを正しいサーバに方向付けることを可能にする、現在アクティブなポリシーおよび規則を含む。これらのポリシーおよび規則は、ネットワークの状態、および必要なサービスに応じて、非常に迅速に変更することができる。
【０５６１】
インターフェースユニット１２５０は、次に、ステップ４９０８に示すように、要求を翻訳して、選択したサーバに翻訳した要求を渡す。インターフェースユニット１２５０は、ステップ４９１０に示すように、サーバＳからの応答を受信する。インターフェースユニット１２５０は、次に、ステップ４９１２に示すように、この応答を翻訳し、翻訳した応答をクライアントＣ１に渡す。
【０５６２】
具体的に説明する目的上、この時点で、インターフェースユニット１２５０は、データを検索する要求をクライアントＣ２から受信すると仮定する。インターフェースユニット１２５０は、ステップ４９１４に示すように、クライアントＣ２の要求に応じて、クライアントＣ２との接続を開放し、パス名を使用してデータを検索する要求をクライアントＣ２から受信する。インターフェースユニット１２５０は、次に、ステップ４９１６に示すように、パス名によって指定されるコンテンツをホストするサーバを選択する。
【０５６３】
ステップ４９１８では、インターフェースユニット１２５０は、クライアントＣ２が、クライアントＣ１と同じサーバを選択したかどうかを決定する。ステップ４９１８の結果が否定である場合、インターフェースユニット１２５０は、クライアントＣ２の要求に応じるために必要な方法で続行する（この実施態様では、重要ではない）。この時点で、図３６のフローチャートが終了する。あるいは、ステップ４９１８の結果が肯定である場合、インターフェースユニット１２５０は、ステップ９２０で、選択したサーバに対する任意のオープン接続が存在するかどうを決定する。
【０５６４】
ステップ４９２０の結果が肯定の場合、インターフェースユニット１２５０は、クライアントＣ２の要求に応じるために必要な方法で続行する（この実施態様には重要ではない）。この時点で、図９のフローチャートは終了する。あるいは、ステップ４９２０の結果が否定である場合、インターフェースユニット１２５０は、ステップ４９２２に示すように、コンテンツ長パラメータを使用して、クライアントＣ１が要求したすべてのデータをクライアントＣ１が受信したことを確認する。インターフェースユニット１２５０は、クライアントＣ１が接続を断たれるか、あるいは「思考時間」にあると決定するために、クライアントＣ１がＦＩＮまたはＲＳＴコマンドを送信することを待たないことに注意することは重要である。これは、インターフェースユニット１２５０が、クライアントが接続を閉鎖するのを待って、別のクライアントに対し接続を再使用する場合と比べて、インターフェースユニット１２５０がより迅速に各々の接続を使用することができるという事実により、より効率的な接続プーリングを可能にする。
【０５６５】
ステップ４９２４では、インターフェースユニット１２５０は、次に、ステップ４９２４に示すように、要求を翻訳し、クライアントＣ１が使用した接続と同じ接続を使用して、選択されたサーバに翻訳された要求を渡す。インターフェースユニット１２５０は、ステップ４９２６に示すように、応答をサーバＳから受信する。インターフェースユニット１２５０は、次に、ステップ４９２８に示すように、応答を翻訳し、翻訳した応答をクライアントＣ２に渡す。インターフェースユニット１２５０は、ステップ４９３０に示すように、コンテンツ長パラメータを使用して、クライアントＣ２が要求したすべてのデータをクライアントＣ２が受信したことを確認する。
【０５６６】
次に、インターフェースユニット１２５０は、ステップ４９３２で、クライアントＣ２との接続を閉鎖するか、あるいはリンクを解除する。最後に、インターフェースユニット１２５０は、ステップ４９３４で、クライアントＣ１との接続を閉鎖するか、あるいはリンクを解除し、図３６のフローチャートは終了する。図３５に関連して上記で説明したように、図３６に関連して説明したイベントのシーケンスは、単に具体的に示すためである。
【０５６７】
図３７は、チャンクサイズのフィールド技術を組み込む際に、一実施態様によって実行される確認応答およびシーケンス番号の翻訳を示す詳細なフロー図である。図３７の各々のフローのラベルは、Ｔ：Ｓ，Ａ（Ｌ）の形式であり、ここで、ＴはＴＣＰセグメントのタイプを表し、Ｓはシーケンス番号、Ａは確認応答番号、およびＬはチャンクサイズのフィールドである。チャンクサイズのフィールドの全体の値は、ＴＣＰセグメント中のデータのバイト数を記述する。
【０５６８】
分かりやすくするため、クライアントＣ１およびクライアントＣ２の両方に対する接続は、既に確立されていると仮定する。クライアントＣ１は、次に、フロー４００２で示すように、４９バイトの長さを指定するＧＥＴセグメントを送信する。インターフェースユニット１２５０は、サーバＳとの自由なオープン接続が存在しないと決定し、その結果、サーバＳとの接続を開放する（図３７に示さない）。インターフェースユニット１２５０は、次に、流れ線４００４に示すように、上記の翻訳式に従ってシーケンスおよび確認応答番号を修正した後、ＧＥＴセグメントをクライアントＣ１からサーバＳに回送する。
【０５６９】
具体的に説明するために、応答セグメント中のデータは、総コンテンツデータ長９９９を有すると仮定する。さらに、データは、３００個のデータチャンク２つ、および３９９個のデータチャンク１つで伝送されると仮定する。これは、単に具体的に説明するためであり、制限することを意図しているのではないことに注意する。したがって、サーバＳは、先ず、フロー４００８Ａに示すように、シーケンス番号６００１、確認応答番号２０００、およびチャンクサイズのフィールド３００を指定する、要求されたデータ（またはメッセージ）のチャンクに応答する。インターフェースユニット１２５０は、流れ線４００６Ａに示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、ＲＥＳＰセグメントをクライアントＣ１に回送する。クライアントＣ１は、流れ線４００６Ｂに示すように、データの受信をインターフェースユニット１２５０に対して肯定応答する。インターフェースユニット１２５０は、その結果、流れ線４００８Ｂに示すように、この確認応答をサーバＳに渡す。
【０５７０】
サーバＳは、次に、フロー４０１２Ａに示すように、シーケンス番号６３０１、確認応答番号２００１、およびチャンクサイズのフィールド３００を指定する、要求されたデータの第２チャンクに応答する。インターフェースユニット１２５０は、流れ線４０１０Ａに示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、ＲＥＳＰセグメントをクライアントＣ１に回送する。クライアントＣ１は、流れ線４０１０Ｂに示すように、データの受信をインターフェースユニット１２５０に対して肯定応答する。インターフェースユニット１２５０は、その結果、流れ線４０１２Ｂに示すように、この確認応答をサーバＳに渡す。
【０５７１】
サーバＳは、次に、シーケンス番号６６０１、フロー４０１６Ａに示すように、確認応答番号２００２、およびチャンクサイズフィールド３９９を指定する、要求されたデータの第３チャンクに応答する。インターフェースユニット１２５０は、流れ線４０１４Ａに示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、ＲＥＳＰセグメントをクライアントＣ１に回送する。クライアントＣ１は、流れ線４０１４Ｂに示すように、データの受信をインターフェースユニット１２５０に対して肯定応答する。インターフェースユニット１２５０は、その結果、流れ線４０１６Ｂに示すように、この確認応答をサーバＳに渡す。
【０５７２】
最後に、サーバＳは、フロー４０２０に示すように、シーケンス番号７０００、確認応答番号２００３、およびチャンクサイズのフィールド０を指定するゼロデータの最後のチャンク（ゼロに等しいチャンクサイズのフィールドで指示される）に応答する。インターフェースユニット１２５０は、流れ線４０１８に示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、ＲＥＳＰセグメントをクライアントＣ１に回送する。これは、インターフェースユニット１２５０およびクライアントＣ１に対し、要求されたすべてのデータが伝送されたことを指示する。
【０５７３】
この時点で、クライアントＣ２は、次に、フロー４０２２に示すように、５０バイトの長さを指定するＧＥＴセグメントを送信する。この時点で、インターフェースユニット１２５０には、サーバＳに対する使用可能な接続がないと仮定する。この目標は、クライアントＣ１が接続を断たれるか、あるいは「思考時間」にある場合、クライアントＣ１に以前使用されたサーバＳに対する同じ接続を再使用することである。クライアントＣ１が、ＦＩＮ（終了）コマンドまたはＲＳＴ（リセット）コマンドを開始して接続を解放するのを待つのではなく、インターフェースユニットは、ゼロに等しいチャンクサイズのフィールドを使用して、要求されたすべてのデータがクライアントＣ１によって受信されたことを確認する。これは、インターフェースユニット１２５０に対し、クライアントＣ１が、何らかの理由で、ＦＩＮまたはＲＳＴコマンドを送信する前に一時停止し得る場合でも、クライアントＣ１は接続を断たれることを指示する。インターフェースユニット１２５０は、フロー４０２４に示すように、確認応答およびシーケンス番号を修正し、ＧＥＴセグメントをサーバＳに回送する。
【０５７４】
具体的に示す目的上、応答セグメント内のデータは総コンテンツデータ長５００を有すると仮定する。さらに、データは、３００個のデータチャンク１つおよび２００個のデータチャンク１つで伝送されると仮定する。これは、単に具体的に示すためであり、制限する意図はないことに注意する。したがって、サーバＳは、先ず、フロー１０２８Ａに示すように、シーケンス番号７０００、確認応答番号２０５０、およびチャンクサイズのフィールド３００を指定する、要求されたデータのチャンクに応答する。インターフェースユニット１２５０は、流れ線１０２６Ａに示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳して、ＲＥＳＰセグメントをクライアントＣ２に回送する。クライアントＣ２は、流れ線４０２６Ｂに示すように、データの受信をインターフェースユニット１２５０に肯定応答する。インターフェースユニット１２５０は、その結果、４０２８Ｂに示すように、この確認応答をサーバＳに渡す。
【０５７５】
サーバＳは、次に、フロー４０３２Ａに示すように、シーケンス番号７３００、確認応答番号２０５１、およびチャンクサイズのフィールド２００を指定する、要求されたデータの第２チャンクに応答する。インターフェースユニット１２５０は、流れ線４０３０Ａに示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、ＲＥＳＰセグメントをクライアントＣ２に回送する。クライアントＣ２は、流れ線４０３０Ｂに示すように、データの受信をインターフェースユニット１２５０に肯定応答する。インターフェースユニット１２５０は、その結果、流れ線４０３２Ｂに示すように、この情報をサーバＳに渡す。
【０５７６】
最後に、サーバＳは、フロー４０３６に示すように、シーケンス番号７５００、確認応答番号２０５２、およびチャンクサイズのフィールド０を指定するゼロデータの最後のチャンク（ゼロに等しいチャンクサイズのフィールドで指示される）に応答する。インターフェースユニット１２５０は、流れ線４０３４に示すように、ＲＥＳＰセグメントを受信し、シーケンスおよび確認応答番号を翻訳し、ＲＥＳＰセグメントをクライアントＣ２に回送する。これは、インターフェースユニット１２５０およびクライアントＣ２に対し、要求されたすべてのデータが伝送されたことを指示する。
【０５７７】
次に、フロー４０３８に示すように、インターフェースユニット１２５０が、ＦＩＮまたはＲＳＴコマンドをクライアントＣ２から受信すると、クライアントＣ２およびインターフェースユニット１２５０間の接続は閉鎖されるか、あるいはリンクを削除される。同様に、フロー４０４０に示すように、インターフェースユニット１２５０が、ＦＩＮまたはＲＳＴコマンドをクライアントＣ１から受信すると、クライアントＣ１およびインターフェースユニット１２５０間の接続は閉鎖されるか、またはリンクを削除される。しかし、インターフェースユニット１２５０は、サーバＳとの接続を維持することに注意することは重要である。図３７に関して説明したように、イベントのシーケンスは単に具体的に示すためであり、制限するものではないことに注意することも重要である。
【０５７８】
図３８は、チャンクサイズのフィールドを使用して、一実施態様によりクライアントおよびサーバ間の接続のプーリングの効率を増加する動作を示すフローチャートである。インターフェースユニット１２５０は、複数のサーバとの接続を維持し、クライアントの要求に指定されたパス名に基づいて、これらのサーバに対するクライアント要求の経路を指定する。先ず、インターフェースユニット１２５０は、ステップ４１０２に示すようにサーバとの接続を解放する。次に、インターフェースユニット１２５０は、ステップ４１０４に示すように、クライアントＣ１の要求に応答して、クライアントＣ１との接続を開放し、要求をクライアントＣ１から受信して、パス名を使用してデータを検索する。
【０５７９】
インターフェースユニット１２５０は、次に、ステップ４１０６に示すように、パス名で指定されるコンテンツをホストするサーバを選択する。インターフェースユニット１２５０は、次に、ステップ４１０８に示すように、要求を翻訳し、選択したサーバに翻訳された要求を渡す。インターフェースユニット１２５０は、ステップ４１１０に示すように、サーバＳから応答を受信する。インターフェースユニット１２５０は、次に、ステップ４１１２に示すように、応答を翻訳し、チャンクサイズのフィールドがゼロに等しくなるまで、翻訳された応答をクライアントＣ１に渡す。
【０５８０】
具体的に示すために、この時点で、インターフェースユニット１２５０は、クライアントＣ２からの要求を受信し、接続を開放すると仮定する。インターフェースユニット１２５０は、ステップ４１１４に示すように、クライアントＣ２の要求に応答して、クライアントＣ２に対する接続を開放し、クライアントＣ２から要求を受信し、パス名を使用してデータを検索する。インターフェースユニット１２５０は、次に、ステップ４１１６に示すように、パス名で指定されるコンテンツをホストするサーバを選択する。
【０５８１】
ステップ４１１８では、インターフェースユニット１２５０は、クライアントＣ２が、クライアントＣ１と同じサーバを選択したかどうかを決定する。ステップ４１１８の結果が否定である場合、インターフェースユニット１２５０は、次に、クライアントＣ２の要求に応じるために必要な方法で続行する。この時点で、図３８のフローチャートが終了する。あるいは、ステップ４１１８の結果が肯定である場合、インターフェースユニット１２５０は、ステップ４１２０に示すように、選択したサーバに対する任意のオープン接続が存在するかどうか決定する。
【０５８２】
ステップ１１２０の結果が肯定である場合、インターフェースユニット１２５０は、クライアントＣ２の要求に応じるのに必要な方法で続行する。この時点で、図３８のフローチャートは終了する。あるいは、ステップ４１２０の結果が否定である場合、インターフェースユニット１２５０は、チャンクサイズのフィールドが、ステップ４１１２でゼロに等しくなったという事実を使用して、クライアントＣ１が要求したすべてのメッセージデータをクライアントＣ１が受信したことを確認する。インターフェースユニット１２５０は、クライアントＣ１が接続を断たれるか、あるいは「思考時間」にあると決定するために、クライアントＣ１がＦＩＮまたはＲＳＴコマンドを送信することを待たないことに注意することは重要である。
【０５８３】
ステップ４１２２では、インターフェースユニット１２５０は、次に、要求を翻訳し、クライアントＣ１が使用した接続と同じ接続を使用して、選択されたサーバに翻訳された要求を渡す。インターフェースユニット１２５０は、ステップ４１２４に示すように、サーバＳから応答を受信する。インターフェースユニット１２５０は、次に、ステップ４１２６に示すように、応答を翻訳し、チャンクサイズのフィールドがゼロに等しくなるまで、翻訳された応答をクライアントＣ２に渡す。インターフェースユニット１２５０は、チャンクサイズのフィールドを使用して、クライアントＣ２が要求したすべてのメッセージデータをクライアントＣ２が受信したことを確認する。
【０５８４】
次に、インターフェースユニット１２５０は、ステップ４１２８で、クライアントＣ２との接続を閉鎖するか、またはリンクを解除する。最後に、インターフェースユニット１２５０は、ステップ４１３０で、クライアントＣ１との接続を閉鎖するか、あるいはリンクを解除し、図３８のフローチャートは終了する。図３７に関して上記で説明したとおり、図３８に関して説明したイベントのシーケンスは、単に具体的に示すためであり、制限するものではない。
【０５８５】
前の実施態様は、特に、インターフェースユニット、たとえば、接続処理のオーバヘッドをサーバからオフロードするためにファーム内のサーバに接続されるインターフェースユニット１２５０内にインプリメントされる場合に関して説明している。しかし、これらの実施態様は、クライアントおよびサーバ間のネットワーク接続経路内にあるその他の種類のデバイスに適用することもできる。ネットワークトラフィックはこうしたデバイスを通って流れるため、これらのデバイスはすべて、接続処理をオフロードする機会を有する。こうしたデバイスのいくつかの例は、以下のとおりである：
−  クライアントのネットワーク接続をサーバファーム内の一連のサーバ間に分散させる負荷分散装置（ローカルまたは地理的に分散させる）。
【０５８６】
−    ネットワークトラフィックを監視し、パケットのフローを計測する帯域幅管理装置。
【０５８７】
−    パケットを監視し、承認されたパケットのみを流すファイアウォール。
【０５８８】
−    ルータおよびスイッチも、ネットワークトラフィックの経路内に存在する。業界の傾向は、追加の機能（負荷分散、帯域幅管理、およびファイアウォール機能）をこれらのデバイス内に統合することである。
【０５８９】
実施態様によっては、ネットワーク接続のエンドポイントであるコンピュータシステム内に適用することもできる。この場合、アドオンカードは、コンピュータシステム内の主処理要素をオフロードするために使用することもできる。
【０５９０】
３．統合キャッシング
図３９は、一実施態様に従って統合キャッシング機能を提供するアプライアンスで生じ得るイベントのシーケンスのフローチャート５３００を示す。しかし、この実施態様は、フローチャート５３００によって提供される説明にに限定されない。むしろ、当業者には、本明細書で提供される教示から、その他の機能フロー（ｆｌｏｕｒｓ）が、この実施態様の範囲および精神の範囲内であることは明らかであろう。これらのその他の機能フローは、キャッシングの統合に関する様々な処理、様々なシーケンス、およびその他の変形を含む可能性がある。
【０５９１】
フローチャート５３００の方法は、データ通信ネットワークに通信可能に結合される１つまたは複数のデバイスにインプリメントすることができる。たとえば、フローチャート５３００の方法は、図１Ａに関して上記で説明したアプライアンス１２５０などのアプライアンスにインプリメントすることができ、図２７に関して上記で説明したように、ソフトウェアアーキテクチャ３２００を有する。フローチャート５３００の方法について、引き続きこの例示的な実施態様に関して説明する。
【０５９２】
図３９に示すように、フローチャート５３００の方法は、ステップ５３０２で開始し、アプライアンス１２５０は、暗号化されたパケットをクライアント１０の１つから受信する。一実施態様では、アプライアンス１２５０は、サーバ３０に対するプロキシＳＳＬエンドポイントとして動作するように構成され、クライアント１０から受信した暗号化されたパケットを解読し、次に、必要に応じてさらに処理するためにサーバ３０に送信し、最終的に、暗号化されたパケット内のアドレス情報に基づいて適切なリソースに送信する。適切なリソースは、たとえば任意のサーバ３０、あるいは、アプライアンス１２５０によって管理されるキャッシュでよい。ステップ５３０４では、アプライアンス１２５０は、パケットに関する解読処理を実行する。
【０５９３】
ステップ５３０６では、アプライアンス１２５０は、アクセス制御のＡＡＡポリシーを実行する一実施態様に従って構成されており、暗号化されたパケットの送信元のクライアントを認証および／または承認する。
【０５９４】
ステップ５３０８では、アプライアンス１２５０は、特定のタイプのパケット処理を実行する一実施態様に従って構成されており、解読されたパケットに関するパケット処理を実行して、適用可能なネットワークプロトコルによって生成される接続オーバヘッド処理要件を減少させる。
【０５９５】
ステップ５３１０では、アプライアンス１２５０は、コンテンツを圧縮し解凍する一実施態様に従って構成されており、パケットに関連する要求を解凍する。一実施態様では、要求はウェブのオブジェクト要求を含む。
【０５９６】
ステップ５３１２では、アプライアンス１２５０は、次に、キャッシュ機能を活性化することができ、オブジェクトに対する明確な、および／または承認された、および／または解凍された、および／またはパケット処理された要求を受信する。ステップ５３０２、５３０４、３０６、５３０８、および５３１０に関して説明した上記の処理により、キャッシュ管理論理は、明確な／承認された／解凍された／パケット処理された要求に基づいてオブジェクトがキャッシュされたか、あるいはキャッシュ可能かどうかを決定し、その結果、従来のキャッシングよりもはるかに広いアレイの要求を処理し、従来の方法に基づいて行われるよりも効率的にキャッシングを行うことができる。さらに、キャッシュ管理論理は、他の処理とともにカーネル空間内で動作するため、他のアプリケーションの各々などのデータ構造に関連して、等しいステータスを有するデータ構造として関連オブジェクトに関連しており、その結果、統合は、きわめて効率的な方法で行われる。
【０５９７】
ステップ５３１４に示すように、オブジェクトが既にキャッシュメモリ内に存在しない場合、アプライアンス１２５０は、要求を１つまたは複数のサーバ３０に送信する。しかし、追加のいくつかの処理ステップは、要求が送信される前に生じ得る。
【０５９８】
たとえば、ステップ５３１６では、アプライアンス１２５０は、サーバ（単数または複数）に対する要求の効率的な送信を保証するために接続処理を任意に実行し、ステップ５３１８では、アプライアンス１２５０は、要求が最も適切なサーバ（単数または複数）に送信されることを保証するために、任意に負荷分散の決定を行う。また、一実施態様では、要求は、暗号化された後、バックエンド暗号化プロセスを介してサーバ（単数または複数）に送信され、それによって、端末相互間のネットワークセキュリティを提供する。ステップ５３２０では、要求は、サーバ（単数または複数）に伝送される。
【０５９９】
ステップ５３２２では、アプライアンス１２５０は、逆にサーバ３０の１つから応答を受信する。上記のとおり、バックエンド暗号化がサポートされている場合、アプライアンス１２５０は、サーバからの要求を解読する。
【０６００】
ステップ５３２４では、アプライアンス１２５０は、サーバからの応答に関連するオブジェクトを圧縮する。一実施態様で、オブジェクトはウェブオブジェクトを含む。
【０６０１】
ステップ５３２６では、アプライアンス１２５０内のキャッシュ管理論理は、オブジェクトを圧縮形式でキャッシュ内に記憶する。キャッシュ管理論理は、処理能力上の理由により、この方法で、圧縮されたオブジェクトを記憶することができる。オブジェクトがキャッシュ内に記憶されると、当該オブジェクトに対するその後のクライアントの要求は、上記のステップ５３１６、５３１８、５３２０、５３２２、５３２４、および５３２６を実行することなく、キャッシュから供給することができる。これは、フローチャート５３００内の決定ステップ５３１４をステップ５３２８に直接接続するラインで指示される。
【０６０２】
ステップ５３２８では、オブジェクトがサーバから受信されたか、あるいはキャッシュから検索された後、アプライアンス１２５０は、元のクライアントの要求をより効率的に供給するために、接続上でパケット処理を実行する。ステップ５３３０では、次に、応答オブジェクトは、再度暗号化され、逆にクライアントに提供される。
【０６０３】
上記の各々の処理ステップは、アプライアンス１２５０のカーネル／ＯＳレベルで行われる。キャッシュをカーネル／ＯＳ空間内の他の所望の処理ステップの中間でインプリメントし、他の処理ステップと統合することによって、ある実施態様は、追加の機能をもたらし、キャッシュの性能を改善することができる。
【０６０４】
このような統合は、一実施態様によるキャッシュのインプリメンテーションが、従来的にはキャッシュの機能的な能力を超える付加的な機能を実行することを可能にする。たとえば、一実施態様は、キャッシュが、暗号化および／または圧縮されたオブジェクトで動作することを可能にする。
【０６０５】
一実施態様により達成し得る追加の機能のもう１つの例は、端末相互間の暗号化されたＨＴＴＰＳトラフィックのキャッシングを伴う。一般に、キャッシュは、サーバからの暗号化されたＨＴＴＰ応答のみを記憶する。特定のキャッシュは、場合により、ＳＳＬ暗号化されたＨＴＴＰＳをキャッシュからクライアントに提供するのをサポートし得るが、場合によっては、従来のキャッシュは、サーバによって暗号化された応答をキャッシュすることはできないため、端末相互間（つまり、サーバおよびクライアント間）の暗号化をサポートすることはできない。一般に、ある応答が、サーバによってＨＴＴＰＳ形式で暗号化される場合、キャッシュは、このような応答を解読することはできず、その結果、この応答をキャッシュメモリ内に記憶することはできない。このため、従来のキャッシュは、ある実施態様の端末相互間の暗号化トラフィックの点では何らかの利益を提供することはできず、統合キャッシングアプライアンスは、ＳＳＬ暗号化ＨＴＴＰＳトラフィックに対する双方向の終端点として動作する。
【０６０６】
たとえば、一実施態様では、統合キャッシングアプライアンスは、サーバおよびアプライアンス間、アプライアンスおよびクライアント間の両方の暗号化トラフィックに対する終端点として動作する。このようにして、アプライアンスは、サーバから受信したＳＳＬ暗号化応答を解読し、キャッシュすることができ、このような応答をクライアントに供給する場合、このような応答を再度暗号化し、要求したクライアントにこの応答を安全に提供し、それによって端末相互間の暗号化を可能にし、より多様なウェブトラフィックに対するキャッシングの適用性を増加する。
【０６０７】
一実施態様では、アプライアンスは、ＳＳＬ仮想プライベートネットワーク（ＳＳＬ  ＶＰＮ）内のエンドポイントとしても動作することができる。特に、アプライアンスは、プライベートデータ通信ネットワーク内の任意のリソースに対するプロキシＳＳＬエンドポイントとして動作することができ、クライアントから受信した暗号化パケットを解読し、次に、暗号化されたパケット内のアドレス情報に基づいて、適切な宛先サーバリソースにそれらを送信する。クライアントおよびゲートウェイ間で確立されたデータ通信セッションは、本明細書の前の段落で説明したように、暗号化エンドポイントとして機能するゲートウェイで暗号化し得る。上記のとおり、クライアントは、セキュアソケットレイヤー（ＳＳＬ）、ＩＰＳｅｃ、またはその他の何らかの暗号化法を使用して暗号化データ通信セッションを確立し、これによって、クライアント上の傍受機構は、トラフィックをゲートウェイに方向付け、その際、クライアントブラウザには、宛先サーバまたは宛先ネットワークと直接通信していると思わせる。このような実施態様では、暗号化データ通信セッションはゲートウェイで終了することができ、ゲートウェイは、本明細書に記載するように統合キャッシュも含む。このようにして、キャッシング機能は、ＳＳＬ  ＶＰＮ機能に統合することができる。
【０６０８】
ゲートウェイは、適用可能な任意のＡＡＡ．ポリシーを要求に実行することもでき、その結果、ゲートウェイは、キャッシュされたオブジェクトを適切に認証されたクライアントにのみ供給し、承認されさたユーザに対してのみ、キャッシュされた特定のオブジェクトにアクセスする要求を許可する。これは、ゲートウェイのアクセス制御ポリシーが、キャッシュが特定の何らかの要求に遭遇する前に実行されるように、キャッシュが統合されるために可能である。したがって、キャッシュされたオブジェクトは、キャッシュ自体が認証および承認を実行しなくても、アクセス制御の利点を得る。キャッシュとその他の機能との統合により、キャッシュ自体は、現在のネットワークを通過する多様なデータを処理する際に、より効率的かつより効果的になる。一実施態様では、ウェブトラフィックのより広範なアレイにキャッシング機能の利点を導入することによって、全体のネットワーク性能の効率を改善することもできる。
【０６０９】
一実施態様による上記の統合モードのその他の独特な結果のいくつかは、以下のとおりである。１つの結果は、予め圧縮されたデータをキャッシュし、圧縮を認識するクライアントにそのデータを供給する能力である。もう１つの結果は、アクセス制御データをキャッシュする能力である。さらにもう１つの結果は、外部のキャッシュと連動して、キャッシュの拡張可能性を提供する能力である。キャッシュは、ゲートウェイでリダイレクトおよびトラフィック管理能力と統合されるため、外部キャッシュは、第２段階のキャッシングを提供するように展開することができ、それによってキャッシングの能力（および利点）を著しく拡張することができる。一実施態様により、この能力は、キャッシュリダイレクトポリシーを明確に実行する必要があるキャッシュモジュール自体がなくても形成される。
【０６１０】
性能に関しては、上記のようにキャッシュを統合することによって、キャッシュのプロセッサは、ネットワーク上のノードとして動作するキャッシュが、従来的には実行することを要求される様々な接続処理タスクを実行することから解放され、その結果、プロセッサの最高の性能レベルでキャッシング機能を果たすことができる。当然、圧縮データのキャッシングを可能にすることによって、キャッシュは、より効率的に機能することができ、ユーザが、さらに高性能を実現することを可能にする。
【０６１１】
本明細書で前に指摘したように、効率は、キャッシュがその他のネットワークサービスおよび技術、たとえば負荷分散技術、暗号化、ＡＡＡ、圧縮、その他のタイプの加速およびパケット処理と統合される方法の結果として得られる。したがって、従来の統合方法により導入される処理の重複およびその他の非効率は回避される。不必要なコピーおよびコンテキストのスイッチングによって生じるこうした非効率は、デバイスによって受信される各々のオブジェクトがメッセージにコピーされ、次にプロセッサのメモリにコピーされてから、関連アプリケーションによって処理されなければならないために生じる。さらに、追加のメモリコピーを導入するキャッシュによって処理するためには、要求をオブジェクトまたはパケットレベルにコピーしなければならない。対照的に、一実施態様は、ＯＳまたはカーネルレベルにおける統合を実施し、その結果、キャッシュが、データ構造に関連付けてデータ構造を処理する際に、他のアプリケーションおよび／またはプロセスと等しいステータスを有し、すべてのプロセスが同じデータ構造で動作しているため、このような追加のメモリコピーに対する必要性が排除される場合、キャッシュが、オブジェクト上でデータ構造として動作することを可能にする。その結果は、より効率的な統合である。
【０６１２】
ａ．データ通信ネットワーク内の予防的な検証を含むキャッシング
ウェブオブジェクトは、時間の経過とともに変化する可能性があるため、潜在的にキャッシュ可能な各々のオブジェクトは、有効寿命、あるいは「フレッシュさ」を有すると言われる。フレッシュさの概念は、最初にコンテンツを生成したアプリケーションサーバが、当該オブジェクトを記憶し得るキャッシュが当該オブジェクトを供給することができる期間も決定するという事実を意味する。キャッシュは、そのメモリ内に記憶さたオブジェクトのコピーがまだ「フレッシュ」であるかどうか、あるいはキャッシュが、オブジェクトの新しいコピーを最初のサーバから検索する必要があるかどうかを決定することができなければならない。一実施態様は、オブジェクトのフレッシュさを保証する新規な方法をインプリメントする。従来の多くのキャッシュインプリメンテーションは、コンテンツを起源から予め決められたスケジュールでフェッチすることによって、キャッシュされたコンテンツをフレッシュに保とうとする。起源からのコンテンツのフェッチは、キャッシュ管理者が、一般に次の方法の一方または両方に基づいて確立した時に行われる：（ｉ）定期的な特定の間隔、または（ｉｉ）コンテンツが失効しようとする時。
【０６１３】
通常使用される上記の方法に関連して、一般に２つの問題がある。第１に、サーバは、コンテンツが最終的にクライアントに供給されるかどうかに関係なく、リフレッシュを要求するキャッシュにコンテンツを提供する必要があるため（このようなリフレッシュが、特定の間隔で生じるか、あるいはコンテンツが失効しそうであるかどうかに関係なく）、不必要な処理負荷が起源サーバに課せられる。第２に、キャッシュは、キャッシュが、リフレッシュしなければならない要素、およびリフレッシュするべき時を常時把握する必要があるために生じる過剰な処理オーバヘッドに基づいて、追加のプロセッサ負荷を負担する。
【０６１４】
一実施態様によるキャッシュは、新規な事前フェッチ法を使用して上記の問題を解決する。コンテンツの事前フェッチは、予め画定されたスケジュールに従って実行されないか、あるいはコンテンツの失効以前に実行されない。その代わりに、一実施態様は、以下の条件の両方が満たされた時にのみ事前フェッチを実行する：（１）クライアントが、特定のコンテンツに対する要求を行った、および（２）コンテンツが失効しそうである。
【０６１５】
この方法は、上記の両方の問題に対処する。予防的な再検証は、当該コンテンツがアクティブにアクセスされる場合にのみ、起源サーバからのコンテンツをリフレッシュする要求を生成する可能性が大きい。これは、起源サーバ上の「不必要な」負荷の量を最小限にする。上記のとおり、キャッシュが、クライアントに最終的に供給されない（あるいは、キャッシュの感度に応じてごくまれに供給される）オブジェクトのリフレッシュを要求する場合、キャッシュは、キャッシュ自体のリソース、および起源サーバのリソースの両方を非効率的に使用している。一実施態様は、アクティブにアクセスされるコンテンツのみを要求することによって、キャッシュおよびサーバリソースの非効率的な使用を回避する。この方法は、同じ理由で、事前フェッチに使用される帯域幅を減少させ、その結果、従来の方法と比べてより効率的にネットワークリソースを使用する。
【０６１６】
さらに、一実施態様は、キャッシュされたオブジェクト自体に含まれる失効情報を使用して、起源サーバからのオブジェクトのリフレッシュを要求するかどうかを決定する。このような失効情報は、一般に、関連オブジェクトのヘッダ内に含まれる。したがって、この実施態様は、リフレッシュ用のスケジュールを追跡するテーブルを維持するためにキャッシュを必要とする従来の多くの方法と違って、フェッチするために何らかの追加の情報を開始するという非効率を回避する。また、「デマンドベース」の事前フェッチ技術を使用すると、事前フェッチに固有の利点を強化する。この技術は、頻繁にアクセスされるオブジェクトは、失効する前に予防的な再検証を受ける可能性が高いため、このようなオブジェクトのキャッシュのミス数を減少させる。この技術は、デマンドが高い大きい応答が失効する時に生じる可能性がある起源サーバに対するトラフィックのサージを防止することもできる。従来の方法では、キャッシュのコンテンツは失効しているため、このようなコンテンツに対するすべての要求はキャッシュを失い、起源サーバに送信される。対照的に、一実施態様では、キャッシュメモリのコンテンツは、一般に、失効直前にリフレッシュされ、その結果、キャッシュのミスが生じつつ、キャッシュがリフレッシュしている状況が生じる可能性は低くなる。
【０６１７】
一実施態様では、事前フェッチのアグレシッブさは、コンテンツが失効しそうであると決定される失効前の期間の長さ、さらに関連するオブジェクトのキャッシュによってリフレッシュをトリガする必要があるクライアント要求の数を調節することによって制御することができる。
【０６１８】
ｂ．「拒否セル」を使用するキャッシング不能な大きい応答の処理の最適化
一実施態様により、キャッシュは、オブジェクトのヒット率を改善するために、指定サイズを超えるオブジェクトを認識して記憶しない。キャッシュは、一般に、キャッシュされたオブジェクトの記憶に充当するメモリ空間が限られているため、割り当てられたメモリ空間を超える一定の応答は、キャッシング不能として最終的に拒絶され、キャッシュによって記憶されない。従来のキャッシュでは、キャッシュは、大きい応答をキャッシュメモリ内に記憶しようとし、キャッシュが、その応答のサイズが予め確定された最大サイズを超えると認識すると、応答の記憶を中止するのみである。従来のキャッシュは、このような応答に対する要求が、キャッシュによってサーバから受信されるごとに、大きい応答をキャッシュしようと繰り返し試みるであろう。いずれの場合も、キャッシュは、オブジェクトが、メモリ空間を超えるためにキャッシング不能であると決定する必要がある。したがって、これは、明らかに非効率的な方法である。
【０６１９】
一実施態様によると、キャッシュは、このような応答を記憶するために努力するのを避けるために、最適化を使用する。キャッシュは、応答のサイズが原因でキャッシング不能になる応答を検出すると常に、対応する要求に関する表記を「拒否セル」と名付けられたデータ構造内に記憶する。この表記は、要求がキャッシング不能であることを指示する。この場合、クライアントが同じオブジェクトを要求すると、要求は、データ構造内に記憶された第１要求とみなされる表記と照合される。照合が終わると、キャッシュはその応答のキャッシュを試みず、その代わりに、要求はキャッシュを完全にバイパスする。
【０６２０】
拒否セルをキャッシュ内に保持するべき期間を指定するために必要なユーザ構成はない。実際、ユーザは、この特定のメカニズムが使用されていることに気付くこともない。一実施態様では、キャッシュは、大きい応答をキャッシュするために使用されたと思われる定期的な失効情報を使用して、当該応答に関する「拒否情報」をキャッシュする。
４．クライアント側の加速
一実施態様では、クライアント側加速プログラムは、サーバが提供するアプリケーションにアクセスするなど、クライアントとサーバとの通信、および／またはサーバに対するクライアントのアクセスを加速、強化、あるいは改善するために、１つまたは複数の加速技術を実行し得る。次に、図４０Ａを参照すると、加速プログラム６１２０を有するクライアント６２０５が示されている。簡潔に説明すると、クライアント６２０５は、カーネルモード６２０２およびユーザモード６２０２を含むオペレーティングシステム、並びに１つまたは複数の層６２１０ａ〜６２１０ｂを含むネットワークスタック６２１０を有するコンピューティングデバイス６１００上で動作する。クライアント６２０５は、上記のあらゆるクライアント１０を含み得る。１つのクライアント６２０５のみを示すが、任意の数のクライアント１０がクライアント６２０５を含み得る。クライアント６２０５は、１つまたは複数のアプリケーション６２２０ａ〜６２２０ｎをインストールし、および／または実行し得る。実施態様によっては、１つまたは複数のアプリケーション６２２０ａ〜６２２０ｎは、ネットワークスタック６２１０を介してネットワークと通信し得る。アプリケーション６２２０Ｎの１つは、第１プログラム６２２２、たとえば、加速プログラム６１２０をインストールし、および／または実行するためにいくつかの実施態様で使用し得るプログラムも含み得る。
【０６２１】
クライアント６２０５のネットワークスタック６２１０は、ネットワークとの接続性および通信を提供するために、任意のタイプおよび形式のソフトウェア、ハードウェア、またはこれらの組合せを含み得る。一実施態様では、ネットワークスタック６２１０は、ネットワークプロトコルスイートのためのソフトウェアを含む。ネットワークスタック６２１０は、当業者が認識し評価する開放型システム間相互接続（ＯＳＩ）通信モデルの任意のネットワーク層など、１つまたは複数のネットワーク層を含み得る。したがって、ネットワークスタック６２１０は、次のＯＳＩモデル層の何れかに対する任意のタイプおよび形式のプロトコルを含み得る：１）物理リンク層、２）データリンク層、３）ネットワーク層、４）トランスポート層、５）セッション層、６）プレゼンテーション層、および７）アプリケーション層。一実施態様では、ネットワークスタック３１０は、一般にＴＣＰ／ＩＰと呼ばれるインターネットプロトコル（ＩＰ）のネットワーク層プロトコル上にトランスポート制御プロトコル（ＴＣＰ）を含み得る。実施態様によっては、ＴＣＰ／ＩＰプロトコルは、Ｅｔｈｅｒｎｅｔ（登録商標）プロトコル上に乗せることができ、任意の類のＩＥＥＥ広域ネットワーク（ＷＡＮ）またはローカルエリアネットワーク（ＬＡＮ）プロトコル、たとえばＩＥＥＥ８０２．３が適用されるプロトコルを含み得る。実施態様によっては、ネットワークスタック６２１０は、任意のタイプおよび形式の無線プロトコル、たとえばＩＥＥＥ８０２．１１および／またはモバイルインターネットプロトコルを含む。
【０６２２】
ＴＣＰ／ＩＰベースのネットワークを考慮すると、任意のＴＣＰ／ＩＰベースのプロトコルを使用することができ、たとえば、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立計算アーキテクチャ（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバＩＰ（ＶｏＩＰ）プロトコルを使用することができる。別の実施態様では、ネットワークスタック２１０は、修正トランスポート制御プロトコルなどの任意のタイプおよび形式のトランスポート制御プロトコル、たとえばトランザクションＴＣＰ（Ｔ／ＴＣＰ）、選択承認を含むＴＣＰ（ＴＣＰ−ＳＡＣＫ）、ＴＣＰラージウィンドウ（ＴＣＰ−ＬＷ）、ＴＣＰ−Ｖｅｇａｓプロトコルなどの混雑予測プロトコル、およびＴＣＰスプーフィングプロトコルを含む。他の実施態様では、任意のタイプおよび形式のユーザデータグラムプロトコル（ＵＤＰ）、たとえばＩＰ上のＵＤＰは、音声通信またはリアルタイムデータ通信などのネットワークスタック６２１０によって使用し得る。
【０６２３】
さらに、ネットワークスタック６２１０は、１つまたは複数の層をサポートする１つまたは複数のネットワークドライバ、たとえばＴＣＰドライバまたはネットワーク層ドライバを含み得る。ネットワークドライバは、コンピューティングデバイス１００のオペレーティングシステムの一部として、あるいはコンピューティングデバイス６１００の任意のネットワークインターフェースカードまたはその他のネットワークアクセス構成要素の一部として含まれ得る。実施態様によっては、ネットワークスタック６２１０の任意のネットワークドライバは、本明細書に記載されている何らかの技術をサポートするネットワークスタック６２１０のカスタムまたは修正部分を提供するように、カスタマイズまたは修正するか、あるいは適応させることができる。他の実施態様では、加速プログラム６１２０は、クライアント２０５のオペレーティングシステムによってインストールされるか、またはこのオペレーティングシステムによって提供されるネットワークスタック６２１０で動作するか、またはこのネットワークスタック６２１０に関連して動作するように設計され、構成される。
【０６２４】
ネットワークスタック６２１０は、クライアント６２０５のネットワーク通信に関連する任意の情報およびデータを受信し、取得し、提供するか、あるいは情報およびデータにアクセスするため、任意のタイプおよび形式のインターフェースを含む。一実施態様では、ネットワークスタック６２１０のインターフェースは、アプリケーションプログラミングインターフェース（ＡＰＩ）を含む。このインターフェースは、任意のファンクションコール、フッキングまたはフィルタリング機構、イベントまたはコールバック機構、あるいは任意のタイプのインターフェース技術も含み得る。インターフェースを介したネットワークスタック６２１０は、ネットワークスタック６２１０の機能または動作に関連する任意のタイプおよび形式のデータ構造、たとえばオブジェクトを受信するか、または提供し得る。たとえば、データ構造は、ネットワークパケットに関連する情報およびデータ、あるいは１つまたは複数のネットワークパケットを含み得る。実施態様によっては、データ構造は、ネットワークスタック６２１０のプロトコル層で処理されるネットワークパケットの一部分、たとえばトランスポート層のネットワークパケットを含む。実施態様によっては、データ構造６２２５はカーネルレベルデータ構造を含み、他の実施態様では、データ構造６２２５はユーザモードのデータ構造を含む。カーネルレベルデータ構造は、カーネルモード６２０２で動作するネットワークスタック６２１０の一部分から取得するか、またはこの一部分に関連するデータ構造、カーネルモード６２０２で動作するネットワークドライバまたはその他のソフトウェア、あるいは、オペレーティングシステムのカーネルモードで実行または動作するサービス、プロセス、タスク、スレッド、またはその他の実行可能なインストラクションによって取得されるか、あるいは受信される任意のデータ構造を含み得る。
【０６２５】
さらに、ネットワークスタック６２１０のいくつかの部分は、カーネルモード６２０２、たとえばデータリンクまたはネットワーク層で実行または動作し、他の部分は、ユーザモード６２０３、たとえばネットワークスタック６２１０のアプリケーション層で実行または動作し得る。たとえば、ネットワークスタックの第１部分６２１０ａは、ネットワークスタック６２１０に対するユーザモードアクセスをアプリケーション６２２０ａ〜６２２０ｎに提供することができ、一方、ネットワークスタック６２１０の第２部分６２１０ａは、ネットワークに対するアクセスを提供する。実施態様によっては、ネットワークスタックの第１部分６２１０ａは、ネットワークスタック６２１０の１つまたは複数の上位層、たとえば任意の層５〜７を含み得る。他の実施態様では、ネットワークスタック６２１０の第２部分６２１０ｂは、１つまたは複数の下位層、たとえば任意の層１〜４を含む。ネットワークスタック６２１０の第１部分６２１０ａおよび第２部分６２１０ｂの各々は、ネットワークスタック６２１０の任意の部分を、ユーザモード６２０３、カーネルモード６２０２、またはこれらの組合せの任意の１つまたは複数のネットワーク層に、ネットワーク層の任意の部分に、またはネットワーク層に対するインターフェースポイントに、あるいはユーザモード６２０３およびカーネルモード６２０３の任意の部分、またはこれらに対するインターフェースポイントに含み得る。
【０６２６】
本発明の加速プログラム６１２０は、ソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組合せを含み得る。実施態様によっては、加速プログラム６１２０は、本明細書に記載する機能および動作を実行または提供するように構成および設計された任意のタイプおよび形式の実行可能なインストラクションを含む。実施態様によっては、加速プログラム６１２０は、任意のタイプおよび形式のアプリケーション、プログラム、サービス、プロセス、タスク、またはスレッドを含む。一実施態様では、加速プログラム６１２０は、ネットワークスタック６２１０とインターフェースし、連動するように構成および設計されたネットワークドライバなどのドライバを含む。加速プログラム６１２０の実行可能なインストラクションの論理、機能、および／または動作は、１つまたは複数の以下の加速技術を実行し得る：１）マルチプロトコル圧縮６２３８、２）トランスポート制御プロトコルプーリング６２２４、３）トランスポート制御プロトコル多重化６２２６、４）トランスポート制御プロトコルバッファリング６２２８、および５）キャッシュマネジャー６２３２を介したキャッシング。これらについて、以下でさらに詳細に説明する。さらに、加速プログラム６１２０は、クライアント６２０５が受信および／または伝送した任意の通信の暗号化６２３４および／または解読を実行し得る。実施態様によっては、加速プログラム６１２０は、クライアント６２０５と、別のコンピューティングデバイス６１００、たとえばサーバ３０との間のトンネリングも実行する。他の実施態様では、加速プログラム６１２０は、サーバ３０に対する仮想プライベートネットワーク接続を提供する。
【０６２７】
実施態様によっては、加速プログラム６１２０は、ネットワークスタック６２１０の１つまたは複数の層、たとえばトランスポート層で動作する。一実施態様では、加速プログラム６１２０は、フィルタドライバ、フッキング機構、または、たとえばトランスポートドライバインターフェース（ＴＤＩ）を介してネットワークスタックのトランスポート層にインターフェースする任意の形式およびタイプの適切なネットワークドライバインターフェースを含む。実施態様によっては、加速プログラム６１２０は、第１プロトコル層、たとえばトランスポート層、およびトランスポートプロトコル層の上の任意の層などの別のプロトコル層、たとえばアプリケーションプロトコル層にインターフェースする。一実施態様では、加速プログラム６１２０は、ネットワークドライバインターフェース規約（ＮＤＩＳ）に準拠するドライバ、つまりＮＤＩＳドライバを含み得る。別の実施態様では、加速プログラム６１２０は、ミニフィルタ（ｍｉｎ−ｆｉｌｔｅｒ）または小型ポートドライバを備え得る。一実施態様では、加速プログラム６１２０、またはその一部はカーネルモード６２０２で動作する。別の実施態様では、加速プログラム６１２０、またはその一部はユーザモード６２０３で動作する。実施態様によっては、加速プログラム６１２０の一部分は、カーネルモード６２０２で動作し、加速プログラム６１２０の別の部分はユーザモード６２０３で動作する。他の実施態様では、加速プログラム６１２０はユーザモード６２０３で動作するが、たとえばカーネルレベルデータ構造６２２５を取得するために、カーネルモードドライバ、プロセス、サービス、タスク、またはオペレーティングシステムの一部分にインターフェースする。さらに他の実施態様では、加速プログラム６１２０は、アプリケーション６２２０ａ〜６２２０ｎなどのユーザモードアプリケーションまたはプログラムである。
【０６２８】
加速プログラム６１２０は、ネットワークスタック６２１０の任意の他のプロトコル層に対して透過的にプロトコル層で動作するか、またはこのプロトコル層とインターフェースし得る。たとえば、一実施態様では、加速プログラム６１２０は、トランスポート層の下の任意のプロトコル層、たとえばネットワーク層、およびトランスポート層の上の任意のプロトコル層、たとえばセッション、プレゼンテーション、またはアプリケーション層プロトコルに対して透過的にネットワークスタック６２１０のトランスポート層で動作するか、またはこのトランスポート層とインターフェースする。これは、ネットワークスタック６２１０のその他のプロトコル層が、必要に応じて、加速プログラム６１２０を使用するように修正することなく動作することを可能にする。したがって、加速プログラム６１２０は、トランスポート層とインターフェースして、トランスポート層によって伝達される任意のプロトコル、たとえばＴＣＰ／ＩＰ上の任意のアプリケーション層プロトコルを介して提供される任意の通信を加速することができる。
【０６２９】
さらに、加速プログラム６１２０は、アプリケーション６２２０ａ〜６２２０ｎ、クライアント６２０５のユーザ、およびクライアント６２０５と通信する任意のその他のコンピューティングデバイス、たとえばサーバに対して透過的にネットワークスタック６２１０で動作するか、またはネットワークスタック６２１０とインターフェースし得る。加速プログラム６１２０は、加速プログラム６１２０が、アプリケーション６２２０ａ〜６２２０ｎを修正することなく、アプリケーション６２２０ａ〜６２２０ｎの任意の通信を加速し得るように、クライアント６２０５上にインストールされるか、またはクライアント６２０５上で実行され得る。実施態様によっては、クライアント６２０５のユーザ、またはクライアント６２０５と通信するコンピューティングデバイスは、加速プログラム６１２０の存在、実行、または動作を認識しない。したがって、実施態様によっては、加速プログラム６１２０は、アプリケーション６２２０ａ〜６２２０ｎ、クライアント６２０５のユーザ、別のコンピューティングデバイス、たとえばサーバ、あるいは加速プログラム６１２０によってインターフェースされるプロトコル層の上および／または下の任意のプロトコル層に対して透過的にインストールされ、実行され、および／または作動される。
【０６３０】
実施態様によっては、加速プログラム６１２０は、統合された方法または様式で、１つまたは複数の加速技術６２２４、６２２６、６２２８、６２３２を実行する。一実施態様では、加速プログラム６１２８は、ネットワークスタック６２１０のトランスポートプロトコル層で通信を傍受、フック、フィルタ、または受信する任意のタイプおよび形式の機構を含む。トランスポート層においてクライアント６２０５のネットワークパケットを傍受し、カーネルレベルデータ構造６２２５などのデータ構造を介して、トランスポート層においてネットワークスタック６２１０とインターフェースすることによって、加速プログラム１２０は、ネットワークパケット上でトランスポート層に関連する加速技術、たとえばトランスポート制御プロトコル（ＴＣＰ）のバッファリング、ＴＣＰプーリング、およびＴＣＰ多重化を実行することができる。さらに、加速プログラム６１２０は、トランスポート層プロトコルのネットワークパケットのペイロードとして伝達される任意のプロトコル、または複数のプロトコル上で圧縮６２２５を実行することができる。
【０６３１】
一実施態様では、加速プログラム６１２０は、カーネルレベルデータ構造６２２５を使用して、１つまたは複数のネットワークパケットの任意の部分、たとえばクライアント６２０５からの要求、またはサーバからの応答を含むネットワークパケットに対するアクセスを提供する。一実施態様では、カーネルレベルデータ構造は、所望の加速技術を実行するために加速プログラム６１２０によって使用され得る。一実施態様では、加速プログラム６１２０は、カーネルレベルデータ構造６２２５を使用する時にカーネルモード６２０２で実行され、別の実施態様では、加速プログラム６１２０は、カーネルレベルデータ構造６２２５を使用する時にユーザモード６２０３で実行される。実施態様によっては、カーネルレベルデータ構造は、第２カーネルレベルデータ構造、または任意の所望のユーザレベルデータ構造にコピーされるか、または渡され得る。加速プログラム６１２０は、一般に、図４０Ａには、ユーザモード６２０３で動作する第１部分、およびカーネルモード６２０２で動作する第２部分を有するように示されているが、実施態様によっては、加速プログラム６１２０の任意の部分は、ユーザモード６２０３またはカーネルモード６２０２で実行し得る。実施態様によっては、加速プログラム６１２０は、ユーザモード６２０３でのみ動作することができ、他の実施態様では、加速プログラム６１２０はカーネルモード６２０２でのみ動作することができる。
【０６３２】
さらに、ネットワークスタック６２１０のトランスポート層を傍受するか、またはカーネルレベルデータ構造６２２５を介してネットワークパケットにアクセスすることによって、加速プログラム６１２０は、単一のインターフェースポイント、単一の実行個所、または加速プログラム６１２０の任意の実行可能なインストラクションを実行する時間に、複数の加速技術を実行するか、または適用することができる。たとえば、一実施態様では、加速プログラム６１２０のある関数または一連のインストラクションで、たとえば、加速技術を実行するように構成および設計された一連の実行可能なインストラクションを呼び出すことによって、複数の加速技術を実行することができる。実施態様によっては、加速プログラム６１２０は、１つのインターフェースポイント、実行場所、または一連のインストラクションにおいて、１）マルチプロトコル圧縮６２３８、２）トランスポート制御プロトコルプーリング６２２４、３）トランスポート制御プロトコル多重化６２２６、４）トランスポート制御プロトコルバッファリング６２２８、および５）キャッシュマネジャー６２３２を介したキャッシング、および実施態様によっては、暗号化６２３４を提供するように設計および構成された任意のプログラム、サービス、プロセス、タスク、スレッド、または実行可能なインストラクションに対する１つまたは複数のアプリケーションプログラムインターフェース（ＡＰＩ）を呼び出す。
【０６３３】
加速プログラム６１２０の実行可能なインストラクションのある場所またはロケーションにおいて、あるいはネットワークスタック６２１０の１つのプロトコル層、たとえばトランスポート層において、複数の加速技術を実行することによって、これらの加速技術の統合は、より効率的かつ効果的に実行される。一態様では、プロセス間のコンテキストスイッチの数は減少し、使用されるデータ構造の数、または必要であるか、または使用されるメモリ内のデータ構造のコピーを減少させる。さらに、任意の加速技術間の通信の同期化は、より効率的に、たとえば緊密に結合した状態で、加速プログラム６１２０の一連の実行可能なインストラクションで実行することができる。したがって、加速技術の順序、どの技術を実行するか、どのデータおよび情報を技術間で共用あるいは渡すかに関連する任意の論理、規則、機能、または動作は、より効率的に実行することができる。加速プログラム６１２０は、トランスポート層でＴＣＰパケットを傍受し、カーネルレベルデータ構造６２２５を介してＴＣＰパケットのペイロードを取得し、次に所望の加速技術を所望の順序で実行することができる。たとえば、ネットワークパケットは最初に圧縮され、次にキャッシュされ得る。別の例では、圧縮され、キャッシュされたデータは、バッファされ、プールされ、および／または多重化された、ＴＣＰ接続を介してサーバに通信し得る。
【０６３４】
実施態様によっては、さらに図４０Ａを参照すると、第１プログラム６２２２は、加速プログラム６１２０を自動的に、サイレントに、透過的に、あるいは他の方法でインストールおよび／または実行するために使用し得る。一実施態様では、第１プログラム６２２２は、プラグイン構成要素、たとえば、アプリケーション６２２０ａ〜６２２０ｎ内にロードされるか、アプリケーション６２２０ａ〜６２２０ｎによって実行されるＡｃｔｉｖｅＸコントロール、またはＪａｖａ（登録商標）コントロールまたはスクリプトを含む。たとえば、第１プログラムは、アプリケーション６２２０のメモリ空間またはコンテキスト内などに、ウェブブラウザアプリケーション６２２０によってロードされ実行されるＡｃｔｉｖｅＸコントロールを含む。別の実施態様では、第１プログラム６２２２は、ブラウザなどのアプリケーション６２２０ａ〜６２２０ｎ内にロードされ、このアプリケーション６２２０ａ〜６２２０ｎによって実行される一連の実行可能なインストラクションを含む。一実施態様では、第１プログラム６２２２は、加速プログラム６１２０をインストールするように設計および構成されたプログラムを含む。実施態様によっては、第１プログラム６２２２は、ネットワークを介して別のコンピューティングデバイスから加速プログラム６１２０を取得、ダウンロード、あるいは受信する。別の実施態様では、第１プログラム６２２２は、ネットワークドライバなどのプログラムをクライアント６２０５のオペレーティングシステム上にインストールするためのインストーラプログラム、またはプラグアンドプレイマネジャーである。
【０６３５】
他の実施態様では、第１プログラム６２２２は、本明細書のＢ項に記載したすべての機能を含み得る。一実施態様では、第１プログラム６２２２は、収集エージェント４０４を含み得る。別の実施態様では、第１プログラムは、収集エージェントをインストールするためのプログラムを含み得る。別の実施態様では、第１プログラム６２２２は、コンピューティング環境１５も含み得る。一実施態様では、第１プログラム６２２２は、実行環境または仮想実行環境などのコンピュータ環境をインストールするための手段を含み得る。一実施態様では、第１プログラム６２２２は、上記のとおり、アプリケーションストリーミングクライアント４４２を含み得る。別の実施態様では、第１プログラム６２２２は、クライアント１０上で実行されるアプリケーションを含み得る。
【０６３６】
他の実施態様では、第１プログラム６２２２は、任意の加速技術など、本明細書に記載する加速プログラム６１２０の任意の機能、動作、および論理を促進または実行するように、加速プログラム６１２０の機能、動作、および論理の一部分を含み得る。実施態様によっては、第１プログラム６２２２は、トランスポート層接続、あるいはアプライアンスまたはサーバとの通信セッション、たとえばセキュアソケット層（ＳＳＬ）通信セッションなどの接続を確立するために使用される。一実施態様では、第１プログラム６２２２は、仮想プライベートネットワーク接続および通信セッションを確立するか、または確立を促進するために使用される。
【０６３７】
図４０Ａに示すように、加速プログラム６１２０またはクライアント６２０５のキャッシュマネジャー６２３２は、任意のタイプおよび形式のコンテンツ、たとえばオブジェクト、または動的に生成されたオブジェクトであって、サーバ３０によって供給されたオブジェクトのキャッシュアクセス、制御、および管理を提供するためのソフトウェア、ハードウェア、またはソフトウェアおよびハードウェアの任意の組合せを含み得る。キャッシュマネジャー６２３２によって処理および記憶されたデータ、オブジェクト、またはコンテンツは、マークアップ言語などの任意の形式のデータ、あるいは任意のプロトコルを介して通信されるデータを含み得る。実施態様によっては、キャッシュマネジャー６２３２は、どこかに記憶されたオリジナルのデータ、あるいは以前に計算、生成、または伝送されたデータを複製し、この場合、オリジナルのデータは、キャッシュメモリ要素を読み取る場合と比べてフェッチ、計算、あるいは取得するのにより長いアクセス時間を要する場合がある。データが、キャッシュメモリ要素内に記憶されると、オリジナルのデータを再フェッチまたは再計算するのではなく、キャッシュされたコピーにアクセスすることによって将来使用することができ、それによってアクセス時間が短縮する。実施態様によっては、キャッシュメモリ要素は、クライアント６２０５のメモリ内にデータオブジェクトを含み得る。他の実施態様では、キャッシュメモリ要素は、クライアント６２０５によって別様に使用されるメモリより高速のアクセス時間を有するメモリを含み得る。別の実施態様では、キャッシュメモリ要素は、クライアント６２０５の任意のタイプおよび形式の記憶素子、たとえばハードディスクの一部分を含み得る。さらに別の実施態様では、キャッシュマネジャー６２３２は、データ、オブジェクト、およびその他のコンテンツをキャッシュするためのメモリ、記憶装置、または処理ユニットの任意の部分および組合せを使用し得る。
【０６３８】
さらに、キャッシュマネジャー６２３２は、本明細書に記載されている技術の何らかの実施態様を実行するための何らかの論理、機能、規則、または動作を含み得る。たとえば、キャッシュマネジャー６２３２は、無効化期間の満了に基づいて、あるいはクライアント６２０５ａ〜６２０５ｎ、またはサーバ３０から無効化コマンドを受信後、オブジェクトを無効化するための論理または機能を含む。実施態様によっては、キャッシュマネジャー６２３２は、カーネル空間６２０２内、および他の実施態様では、ユーザ空間６２０３内で実行されるプログラム、サービス、プロセス、またはタスクとして動作し得る。一実施態様では、キャッシュマネジャー６２３２の第１部分は、ユーザ空間６２０３内で実行され、第２部分はカーネル空間６２０２内で実行される。実施態様によっては、キャッシュマネジャー６２３２は、任意のタイプの汎用プロセッサ（ＧＰＰ）、または任意のその他のタイプの集積回路、たとえばフィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブルロジックデバイス（ＰＬＤ）、またはアプリケーション固有集積回路（ＡＳＩＣ）を含むことができる。
【０６３９】
加速プログラム６１２０またはクライアント６２０５の暗号化エンジン６２３４は、任意のセキュリティ関連プロトコルの処理に対処するための任意の論理、ビジネスルール、機能、または動作、たとえば、ＳＳＬまたはＴＬＳ、またはこれらに関連する任意の機能を含む。たとえば、暗号化エンジン６２３４は、クライアント６２０５によって伝達されたネットワークパケット、またはその任意の部分を暗号化し、解読する。暗号化エンジン６２３４は、クライアント６２０５に代わってＳＳＬまたはＴＬＳ接続も設定あるいは確立する。したがって、暗号化エンジン６２３４は、ＳＳＬ処理のオフロードおよび加速を提供する。一実施態様では、暗号化エンジン６２３４は、クライアント６２０５と他のコンピューティングデバイス、たとえばサーバとの間の仮想プライベートネットワークを提供するために、トンネリングプロトコルを使用する。
【０６４０】
さらに図４０Ａを参照すると、加速プログラム６１２０またはクライアント６２０５のマルチプロトコル圧縮エンジン６２３８は、ネットワークパケットの１つまたは複数のプロトコル、たとえばクライアント６２０５のネットワークスタック６２１０が使用する任意のプロトコルを圧縮するための任意の論理、ビジネスルール、機能、または動作を含む。たとえば、マルチプロトコル圧縮６２３８は、ＧＺｉｐ圧縮および解凍、差動圧縮およびＵｎＣｏｍｐｒｅｓｓｉｏｎ（展開）、またはネットワークを通して伝送されるデータを圧縮および解凍するための任意のその他の占有権のある、あるいは公的に入手可能なユーティリティを含む圧縮および解凍ユーティリティを含み得る。一実施態様では、マルチプロトコル圧縮エンジン６２３８は、クライアント６２０５および別のコンピューティングデバイス、たとえばサーバ間で双方向に、ＴＣＰ／ＩＰベースのプロトコル、たとえば、メッセージングアプリケーションプログラミングインターフェース（ＭＡＰＩ）（（ｅメール）、ファイル転送プロトコル（ＦＴＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ）、共通インターネットファイルシステム（ＣＩＦＳ）プロトコル（ファイル転送）、独立計算アーキテクチャ（ＩＣＡ）プロトコル、リモートデスクトッププロトコル（ＲＤＰ）、無線アプリケーションプロトコル（ＷＡＰ）、モバイルＩＰプロトコル、およびボイスオーバＩＰ（ＶｏＩＰ）プロトコルを圧縮する。他の実施態様では、マルチプロトコル圧縮エンジン２３８は、ハイパーテキストマークアップ言語（ＨＴＭＬ）ベースのプロトコルの圧縮を提供し、実施態様によっては、拡張可能マークアップ言語（ＸＭＬ）などの任意のマークアップ言語の圧縮を提供する。したがって、マルチプロトコル圧縮エンジン６２３８は、デスクトップクライアント、たとえばＭｉｃｒｏｓｏｆｔ  Ｏｕｔｌｏｏｋ、およびＯｒａｃｌｅ、ＳＡＰ、およびＳｉｅｂｅｌなどの企業アプリケーションによって開始される任意のクライアントなどの非ウェブシンクライアント、さらにポケットＰＣなどのモバイルクライアントを介してユーザがアプリケーションにアクセスする性能を促進する。
【０６４１】
加速プログラム６１２０は、以下でさらに詳細に説明するように、バッファリング、プーリング、および多重化のトランスポートプロトコル層加速技術も実行する。したがって、加速プログラム６１２０は、本明細書に記載するこれらの任意の技術を実行するための論理、規則、機能、および動作を有する任意のタイプおよび形式の実行可能なインストラクションを含む。加速プログラム１２０は、ネットワークスタック２１０のトランスポート層において、アプリケーション６２２０ａ〜６２２０ｎが、ネットワークスタック６２１０を介して行う任意のトランスポート層アプリケーションプログラミングインターフェース（ＡＰＩ）コールを傍受、制御、および管理する。加速プログラム６１２０は、予想どおりネットワークスタック６２１０のトランスポートプロトコル層からの応答をクライアント６２０５が受信するように、透過的な方法でクライアント６２０５の任意の要求に応答する。たとえば、一実施態様では、加速プログラム６１２０は、クライアント６２０５のネットワークスタック６２１０において、別のコンピューティングデバイス、たとえばサーバとのトランスポート層接続を確立する要求を傍受し、加速プログラム６１２０によって確立された１つまたは複数のトランスポート層接続のプールを使用して、この要求に応答し得る。別の実施態様では、加速プログラム６１２０は、第２アプリケーション６２２０ｂによって使用される、確立されたトランスポート層接続を介して、第１アプリケーション６２２０ａからの要求を多重化する。
【０６４２】
実施態様によっては、加速プログラム６１２０は、ネットワーク上で伝送する前に、クライアント６２０５においてクライアント６２０５の通信をバッファリングするか、または保持する機構を備える。たとえば、クライアント６２０５がネットワーク、たとえばサーバから受信した通信の消費速度は、クライアント６２０５がネットワーク上で伝送した通信の生産速度未満であり得る。したがって、クライアント６２０５は、クライアント６２０５がこのような要求からの応答を消費および処理できる速度より大きい速度で、より多くの要求をサーバ３０に送信している場合がある。加速プログラム６１２０は、通信を傍受し、クライアント６２０５の消費速度および／または生産速度が、予め決められた閾値、たとえばユーザ、クライアント６２０５、または別のコンピューティングデバイスによって構成された閾値未満であるかどうかを決定する。決定された速度が所望の閾値未満である場合、加速プログラム６１２０は、クライアント６２０５の性能が、消費および／または生産の速度を、予め決められたか、または所望の閾値以上の速度に増加させるまで、傍受された通信をクライアントのメモリ要素に記憶する。この時点で、加速プログラム６１２０は、クライアントの通信をネットワークを通して伝達する。したがって、クライアント側の機構は、クライアント６２０５による通信の消費および／または生産の性能に基づいて、クライアント６２０５の通信を抑制するために設けられる。
【０６４３】
図４０Ａに示すアプリケーション６２２０ａ〜６２２０ｎは、任意のタイプおよび／または形式のアプリケーション、たとえば任意のタイプおよび／または形式のウェブブラウザ、ウェブベースのクライアント、クライアント−サーバアプリケーション、シンクライアントコンピューティングクライアント、ＡｃｔｉｖｅＸコントロール、またはＪａｖａ（登録商標）アプレット、またはクライアント６２０５上で実行可能か、またはネットワーク６２０４を介して通信可能なその他の任意のタイプおよび／または形式の実行可能なインストラクションでよい。アプリケーション６２２０ａ〜６２２０ｎは、任意のタイプのプロトコルを使用することができ、たとえばＨＴＴＰクライアント、ＦＴＰクライアント、Ｏｓｃａｒクライアント、またはＴｅｌｎｅｔクライアントでよい。実施態様によっては、アプリケーション６２２０ａ〜６２２０ｎは、リモートディスプレーまたは提示レベルプロトコルを使用する。一実施態様では、アプリケーション６２２０ａ〜６２２０ｎは、フロリダ州、フォートローダーデールのＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，Ｉｎｃ．によって開発されたＩＣＡクライアントである。他の実施態様では、アプリケーション６２２０ａ〜６２２０ｎは、ワシントン州、レドモンドのＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎによって開発されたリモートデスクトップ（ＲＤＰ）クライアントを含む。他の実施態様では、アプリケーション６２２０ａ〜６２２０ｎは、ソフトＩＰ電話などのＶｏＩＰ通信に関連する任意のタイプのソフトウェアを含む。さらに他の実施態様では、アプリケーション６２２０ａ〜６２２０ｎは、リアルタイムデータ通信、たとえばストリーミングビデオおよび／またはオーディオ用のアプリケーションに関連する任意のアプリケーションを含む。
【０６４４】
図４０Ｂは、図２７に示すアプライアンスアーキテクチャに類似するアプライアンス１２５０の一例のアーキテクチャを示す。簡潔に説明すると、アプライアンス１２５０は、ハードウェア層６２０６と、ユーザ空間６２０３およびカーネル空間６２０２に分割されるソフトウェア層とを含む。ハードウェア層６２０６は、カーネル空間６２０２およびユーザ空間６２０３内のプログラムおよびサービスが、実行されるハードウェア要素を提供する。ハードウェア層６２０６は、カーネル空間６２０２およびユーザ空間６２０３内のプログラムおよびサービスが、アプライアンス１２５０に対して内部および外部の両方でデータを通信することを可能にする構造および要素も提供する。ソフトウェア層は、アプライアンス１２５０の論理、機能、および動作を提供するためのプログラム、サービス、プロセス、タスク、スレッド、および実行可能なその他のインストラクションを含む。
【０６４５】
アプライアンス１２５０は、アプリケーション加速判定機構６２７５、およびクライアント側加速プログラム６１２０を含む。アプリケーション加速判定機構６２７５は、ソフトウェア、ハードウェア、またはハードウェアおよびソフトウェアの任意の組合せを含む。実施態様によっては、アプリケーション加速判定機構６２７５は、任意のタイプおよび形式の実行可能なインストラクション、たとえば、クライアント６２０５および／またはサーバ３０上で実行するアプリケーション６２２０ａ〜６２２０ｎを加速することができるかどうか、あるいはクライアント６２０５およびサーバ３０間のアクセスまたは通信を加速することができるかどうかを決定するための論理、機能、規則、または動作を有するプログラム、サービス、プロセス、タスク、またはスレッドを含む。一実施態様では、データベースは、アプリケーション６２２０ａ〜６２２０ｎを加速することが可能かどうかを決定するために、アプリケーション加速判定機構６２７５によって使用される。たとえば、データベースは、アプリケーション６２２０ａ〜６２２０ｎを、アプリケーション６２２０ａ〜６２２０ｎを加速することが可能な１つまたは複数の加速技術と関連付けることができ、さらに、クライアント６２０５および／またはサーバ３０のユーザ、タイプ、形式、ロケーション、処理機能、およびその他の特性に基づくことができる。実施態様によっては、アプリケーション加速判定機構６２７５は、名前、タイプ、またはカテゴリによるアプリケーション６２２０ａ〜６２２０ｎを加速技術によって加速することが可能かどうかを識別する情報を含むメモリ内のルックアップテーブル、ファイル、データ構造、またはオブジェクトを使用する。他の実施態様では、アプライアンス１２５０および／またはアプリケーション加速判定機構６２７５は、アプリケーション６２２０ａ〜６２２０ｎ、またはサーバ３０に対するアクセスを加速することができるかどうかを識別、指定、または構成するためのユーザ入力を受信するためのユーザインターフェース、グラフィカル、コマンドラインなどの構成機構を備える。
【０６４６】
実施態様によっては、アプリケーション加速判定機構６２７５は、アプリケーション６２２０ａ〜６２２０ｎを加速し得るかどうか、さらに他の実施態様では、どの加速技術（単数または複数）によって、どのタイプおよび形式のクライアント６２０５に関して加速し得るかどうかを識別する情報をサーバ３０から要求する。さらに別の実施態様では、アプリケーション加速判定機構６２７５は、１つまたは複数のクライアント側加速技術の有無に関わらず、クライアント６２０５およびサーバ３０間のアプリケーション６２２０ａ〜６２２０ｎの性能に関する履歴情報のデータベースを含み、クライアント側の加速技術を使用してアプリケーション６２２０ａ〜６２２０ｎが加速されるか、あるいは加速することができるかどうかに関する相対的かつ発見的な情報のデータベースを提供する。たとえば、アプライアンス１２５０は、アプリケーション６２２０ａ〜６２２０ｎの性能に関連する性能情報に関するネットワークをクライアント６２０５から捕捉し得る。したがって、アプリケーション６２２０ａ〜６２２０ｎが加速可能かどうかの決定は、ネットワーク６２０４の動作および性能特性の変化に適応させるか、こうした変化に基づくか、あるいは変化によって影響され得る。
【０６４７】
一態様では、アプリケーション６２２０ａ〜６２２０ｎは、加速することができないか、あるいは加速はできるが、加速が効果的ではないか、さもなければ最低限であると思われる。一実施態様では、そのタイプおよび形式のアプリケーション６２２０ａ〜６２２０ｎはプロトコルを使用することができないか、あるいは加速技術に使用するのに適する方法で通信することはできない。別の実施態様では、アプリケーション６２２０ａ〜６２２０ｎが通信するプロトコルまたは方法は、加速技術の実行を可能にするが、クライアント６２０５、アプライアンス１２５０、またはサーバ３０の動作または性能特性の何れかに基づいて、加速技術は効果的ではないか、さもなければ最低限の加速を提供すると思われる。したがって、アプリケーション加速判定機構６２７５は、アプリケーション６２２０ａ〜６２２０ｎが加速可能であるかどうか、あるいは加速が、性能改善に関する所望の予め決められた閾値に適合しそうかどうかに基づいて、アプリケーション６２２０ａ〜６２２０ｎを加速することが望ましくないと決定する場合がある。
【０６４８】
もう１つの態様では、アプライアンス６２５０は、クライアント側加速プログラム６１２０を、アプライアンス１２５０の記憶またはメモリ要素、たとえばアプライアンスのハードウェア層６２０６によって提供される記憶装置またはメモリなどに記憶する。一実施態様では、アプライアンス１２５０は、クライアント６２０５によって使用されるか、あるいは使用されているアプリケーション６２２０ａ〜６２２０ｎが、クライアント６２０５上で実行している加速プログラム６１２０によって加速可能であり、加速プログラム６１２０をアプライアンス１２５０の記憶装置またはメモリからクライアント６２０５に伝送するか、あるいは伝達することを、アプリケーション加速判定機構６２７５を介して動的に決定する。別の実施形態では、アプライアンス１２５０は、クライアント６２０５およびサーバ３０間の通信が、クライアント６２０５上で実行している加速プログラム６１２０によって加速可能であると決定し、加速プログラム６１２０をクライアント６２０５に伝達する。実施態様によっては、アプライアンス１２５０は、加速プログラム６１２０を別のコンピューティングデバイス６１００、たとえばサーバ３０から受信、ダウンロード、または取得する。
【０６４９】
実施態様によっては、加速プログラム６１２０は、ポリシー情報をアプライアンス１２５０のポリシーエンジン３２３６から受信、ダウンロード、または取得する。他の実施態様では、加速プログラム６１２０は、アプライアンス１２５０のポリシーエンジン３２３６に関係なく、あるいはこれに関連して、ポリシーエンジンを実行および作動させる。他の実施態様では、パケットエンジン３２４０、またはその一部は、加速プログラム６１２０の一部などのクライアント６２０５上で作動させることができる。したがって、加速プログラム６１２０は、上記のとおり、パケット処理タイマー３２４２に従ってクライアント６２０５上で動作し得る。一実施態様では、加速プログラム６１２０は、実行中のある時点で、パック処理タイマー３２４２によって提供される粒度の細かい時間間隔に応じて統合加速技術を実行し得る。
【０６５０】
実施態様によっては、健全性監視プログラム３２１６は、アプライアンス１２５０に関連するか、あるいはアプライアンス１２５０が加速プログラム６１２０を伝送した任意のクライアント６２０５上のクライアント側加速プログラム６１２０のステータス、エラー、または履歴を検査し、決定する。実施態様によっては、健全性監視プログラム３２１６、またはその一部分は、クライアント６２０５上で実行される。
【０６５１】
次に、図４１Ａを参照すると、アプライアンス１２５０によって動的に加速プログラム６１２０を提供し、クライアント６２０５によって加速プログラム６１２０を自動的にインストールし、実行する方法６３００の一実施態様が示されている。簡潔に説明すると、ステップ６３１０で、アプライアンス１２５０は、クライアント６２０５からの要求を傍受し、サーバとの通信セッションを確立する。ステップ６３１５で、アプライアンス１２５０は、クライアント６２０５が自動的にインストールし、実行するように、加速プログラム６１２０をクライアント６２０５に伝送する。ステップ６３２０で、クライアント６２０５は、加速プログラム６１２０を受信すると、加速プログラム６１２０のサイレントインストールを自動的に実行または実施する。ステップ６３２５で、クライアント６２０５は、加速プログラム６１２０のインストールの完了後、ネットワークスタック６２１０内で加速プログラム６１２０を自動的に実行し、クライアント６２０５およびサーバ３０間の通信を傍受する。ステップ６３３０で、加速プログラム６１２０は、複数の加速技術の何れかを実施し、通信を暗号化および／または解読し得る。
【０６５２】
さらに詳細には、ステップ６３１０で、アプライアンス１２５０は、任意の適切な手段および機構によって、クライアント６２０５からの要求を傍受するか、あるいは受信し、サーバ３０との通信セッションを確立し得る。一実施態様では、アプライアンス１２５０のパケットエンジン６２４０は、クライアント６２０５からの通信を傍受する。他の実施態様では、アプライアンス１２５０は、クライアント６２０５、たとえば加速プログラム６１２０との第１トランスポート層接続を確立し、クライアント６２０５の代わりにサーバ６２０５との第２トランスポート層接続を確立する。したがって、アプライアンス１２５０は、サーバ３０に伝送されるクライアントの何らかの通信を受信、傍受、あるいは取得し得る。実施態様によっては、アプライアンス１２５０は、クライアント６２０５に対する要求を傍受し、サーバ３０とのトランスポート層接続を確立する。他の実施態様では、アプライアンス１２５０は要求を傍受し、トランスポート層接続上の任意のプロトコル層、たとえばＨＴＴＰのアプリケーション層プロトコルを介して、通信セッションを確立する。この方法のこの実施態様は、クライアント６２０５のネットワークスタック６２１０の任意のプロトコル層において通信セッションを確立する要求で実施し得る。
【０６５３】
ステップ６３１５で、アプライアンス１２５０は、加速プログラム６１２０をクライアント６２０５に伝送する。アプライアンス１２５０は、クライアント６２０５によって要求された通信セッションを確立する前、確立時、または確立後のある時点で、加速プログラム６１２０を伝送し得る。一実施態様では、アプライアンス１２５０は、クライアントの要求の傍受に応じて、加速プログラム６１２０をクライアント６２０５に伝送する。別の実施態様では、アプライアンス１２５０は、要求をサーバ３０に回送し、加速プログラム６１２０をクライアント６２０５に伝送する。実施態様によっては、アプライアンス１２５０は、サーバ３０との通信セッションを確立し、通信セッションの確立後、アプライアンス１２５０は、加速プログラム６１２０を伝送する。さらに別の実施態様では、アプライアンス１２５０は、クライアント６２０５、またはクライアント６２０５のユーザの認証および／または承認を実施し、認証されたユーザまたはクライアント６２０５がそのように承認されると、アプライアンス１２５０は、加速プログラム６１２０をクライアント６２０５に伝送する。一実施態様では、アプライアンス１２５０は、認証および／または承認のためにクライアントの要求をサーバ３０に回送し、サーバ３０が、クライアントの要求を認証および／または承認すると、アプライアンス１２５０は、加速プログラム６１２０をクライアント６２０５に伝送する。
【０６５４】
実施態様によっては、アプライアンス１２５０は、加速プログラム６１２０をアプライアンス１２５０の記憶装置またはメモリから伝送する。他の実施態様では、アプライアンス１２５０は、サーバ３０からの加速プログラム６１２０を要求し、受信した加速プログラム１６２０をクライアント６２０５に回送する。別の実施態様では、サーバ３０は、加速プログラム６１２０をクライアント６２０５に伝送する。一実施態様では、アプライアンス１２５０は、均一リソースロケータ（ＵＲＬ）をクライアント６２０５に伝送し、クライアント６２０５は加速プログラムを取得、ダウンロード、または受信する。実施態様によっては、ＵＲＬは、アプライアンス１２５０の記憶装置またはメモリにおける加速プログラム６１２０のロケーションを識別し、他の実施態様では、ＵＲＬは、ダウンロード用の加速プログラム６１２０を提供するウェブサーバなどのサーバ３０上の加速プログラム６１２０を識別する。一実施態様では、加速プログラム６１２０は、クライアント６２０５上に記憶され、アプライアンス１２５０は、暗号化またはライセンスキーなどのキーをクライアント６２０５に伝送し、クライアント６２０５は、クライアント６２０５上に記憶された加速プログラム６１２０をインストールし、利用する。実施態様によっては、アプライアンス１２５０は、加速プログラム６１２０をクライアント６２０５上にインストールして実行するために使用される任意のファイル、構成、データ、またはその他の情報をクライアント６２０５に伝送する。
【０６５５】
一実施態様では、加速プログラム６１２０は、クライアント６２０５によって自動的にインストールされ、実行されるように設計および構成される。加速プログラム６１２０は、加速プログラム６１２０が、クライアント６２０５のオペレーティングシステムによって、オペレーティングシステムのタイプおよび形式に従って登録または認識されるようにする任意のファイル、エントリ、構成、データ、またはインストラクションを含み得る。一実施態様では、サーバまたはアプライアンスなどの別のコンピューティングデバイスは、加速プログラムをクライアント６２０５に伝送し、クライアント６２０５は、加速プログラム６１２０を自動的にインストールし実行する。一実施態様では、加速プログラム６１２０は、実行しているコンピューティングデバイス６１００に追加されるプラグアンドプレー（ＰｎＰ）デバイスとして設計され、構成される。実施態様によっては、加速プログラム６１２０は、実行インストール型の実行可能ファイル、たとえばインストーラプログラムおよび加速プログラム６１２０を含む実行可能ファイルである。他の実施態様では、加速プログラム６１２０は、クライアント６２０５のオペレーティングシステムに加速プログラム６１２０を登録およびインストールするのに必要なファイルなどの複数のファイル、たとえばインストールパッケージまたはインストールダウンロードを含み得る。たとえば、加速プログラム６１２０は、．ｉｎｆファイルおよび．ｓｙｓファイルを含み得る。．ｉｎｆファイルは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）ファミリのオペレーティングシステム内Ｗｉｎｄｏｗｓ（登録商標）セットアップに、デバイスをセットアップするために必要な情報、たとえばデバイスに有効な論理構成、およびデバイスに関連するドライバファイルの名前のリストを提供する。実施態様によっては、．ｉｎｆファイルはａｕｔｏｒｕｎ．ｉｎｆファイルを含み、このファイルは、どの実行可能ファイルを開始するのかを、さらに実行可能ファイルの開始に関連する任意の構成情報をオペレーティングシステムに知らせるか、あるいは通知する構成ファイルである。一実施態様では、．ｓｙｓファイルは、加速プログラム６１２０またはその一部分を含むドライバファイルである。
【０６５６】
ステップ６３２０で、クライアント６２０５は、加速プログラム６１２０を自動的にインストールする。加速プログラム６１２０は、クライアント６２０５のオペレーティングシステムに従って、任意の適切な方法でインストールし得る。一実施態様では、クライアント６２０５は、加速プログラム６１２０を受信すると、加速プログラム６１２０をインストールする。実施態様によっては、クライアント６２０５は、加速プログラム６１２０のサイレントインストールを自動的に実施または実行する。一実施態様では、サイレントインストールは、クライアント６２０５のユーザまたはアプリケーションに対して透過的に実施される。他の実施態様では、加速プログラム６１２０のサイレントインストールは、クライアント６２０５のリブートまたは再始動を必要としない。別の実施態様では、サイレントインストールは、インストールを開始および／または完了するために、ユーザによる相互作用を必要としない。他の実施態様では、加速プログラム１２０のサイレントインストールは、クライアント６２０５が実行されている時に、ネットワークスタック６２１０のネットワーク層、セッション層、および／またはアプリケーション層に対して透過的に行われる。実施態様によっては、加速プログラム６１２０は、クライアント６２０５によって実行される自己インストール型の実行可能ファイルである。他の実施態様では、クライアント６２０５は、加速プログラム６１２０をインストールするために、プラグアンドプレイマネジャーを使用する。一実施態様では、クライアント６２０５は、加速プログラム６１２０を受信してインストールするインストールマネジャーを含む。別の実施態様では、アプライアンス１２５０によって伝送される加速プログラム６１２０は、加速プログラム６１２０をインストールするインストールプログラムも含む。
【０６５７】
別の実施態様では、加速プログラム６１２０は、サイレントインストールを介して自動的にインストールされる。一実施態様では、サイレントインストールは、ユーザが仲介しないインストールを含む。別の実施態様では、サイレントインストールは、インストールを開始および／または完了するために、ユーザによる相互作用を必要としないか、あるいは相互作用を有するインストールを含む。実施態様によっては、インストールは、インストールプロセスが、インストールの状況または進行に関する情報を表示しないという点でサイレントである。一実施態様では、インストールは、ユーザに対して透過的であるという点でサイレントである。他の実施態様では、インストールは、加速プログラム６１２０のインストールが、クライアント６２０５のリブートまたは再始動を必要としないためにサイレントである。別の実施態様では、インストールは、クライアント６２０５の動作時にシームレスに、クライアントの動作を中断または途絶せずに行われるという点でサイレントである。したがって、加速プログラム６１２０は、リブートを必要とせず、インストールに関連するユーザに対して何らかの情報を表示しないことによって、クライアント６２０５のユーザまたはアプリケーションに対して透過的な方法でインストールすることができる。
【０６５８】
クライアント６２０５のリブートまたは再始動を防止または回避するために、実施態様によっては、クライアント６２０５、たとえばクライアント６２０５のオペレーティングシステムは、プラグアンドプレーデバイス用の加速プログラム６１２０の一実施態様のネットワークドライバなどのドライバを、オペレーティングシステムが実行している時にインストールし、構成するためのプラグアンドプレイマネジャーを有する。一実施態様では、プラグアンドプレイマネジャーは、加速プログラム６１２０のインストールパッケージの構成に基づいてクライアント６２０５をリブートまたは再始動するように指示されない。別の実施態様では、．ｉｎｆファイルは、コンピュータをリブートまたは再始動するためのインストラクションを含まない。一実施態様では、加速プログラム６１２０は、共用されている使用中のダイナミックリンクライブラリ（ＤＬＬ）を置き換える代わりに、並列構成要素としてインプリメントすることができる。加速プログラム６１２０のネットワークドライバのための他の特定の実施態様では、加速プログラム６１２０は、ＩＮｅｔＣｆｇＰｎｐＲｅｃｏｎｆｉｇＣａｌｌｂａｃｋネットワークドライバＡＰＩを使用し、その結果、ユーザは、ドライバ内で構成の変更を生じさせるために、オペレーティングシステムをリブートする必要はないであろう。さらに、加速プログラム６１２０は、ＩＮｅｔＣｆｇＣｏｍｐｏｎｅｎｔＣｏｎｔｒｏｌのＡｐｐｌｙＰｎｐＣｈａｎｇｅｓメソッドをインプリメントする範囲内でＳｅｎｄＰｎｐＲｅｃｏｎｆｉｇ  ＡＰＩをコールし、オブジェクトを所有するネットワーク構成要素のドライバに構成情報を送信する通知オブジェクトを有することができる。ＳｅｎｄＰｎｐＲｅｃｏｎｆｉｇ  ＡＰＩは、データをドライバに送信するためのメカニズムを通知オブジェクトに提供し、実施態様によっては、ユーザが、構成の変更が生じる前に、オペレーティングシステムをリブートする必要を回避するために使用される。
【０６５９】
ステップ６３２５では、加速プログラム６１２０を自動的に、サイレントに、透過的に、あるいは他の方法でインストールすることを完了した後、加速プログラム１２０には、クライアント６２０５上で自動的に実行される。実施態様によっては、加速プログラム６１２０をインストールするインストールプログラムは、加速プログラム６１２０を始動または実行する。実施態様によっては、加速プログラム６１２０用のインストーラプログラムは、加速プログラム１２０をクライアント６２０５のメモリ内にロードするか、または実行するためのシステムコールを行う。一実施態様では、加速プログラム６１２０のインストールは、加速プログラム６１２０を始動させるためのインストラクション、コマンド、または指令を含む。一実施態様では、加速プログラム６１２０は、加速プログラム６１２０を自動的に実行するようにクライアント６２０５に通知するａｕｔｏｒｕｎ．ｉｎｆファイルなどの自動実行構成を含む。他の実施態様では、クライアント６２０５のプラグアンドプレイマネジャーまたはオペレーティングシステムは、インストール後に加速プログラム６１２０を自動的に実行する。一実施態様では、加速プログラム６１２０は、クライアント６２０５によって共用されるサービス、プロセス、スレッド、またはタスクを含む。実施態様によっては、加速プログラム６１２０は、自動的に始動するように構成されるオペレーティングシステムのサービスである。一実施態様では、加速プログラム６１２０は、クライアントのオペレーティングシステムのネットワークスタックのメモリ内にロードされるネットワークドライバを含む。
【０６６０】
別の実施態様では、加速プログラム６１２０は、クライアント６２０５のメモリ内にロードされるネットワークドライバを含む。実施態様によっては、加速プログラム６１２０は、ネットワークスタック６２１０に割り当てられるメモリ内にロードされる。場合によっては、加速プログラム６１２０は、加速プログラム６１２０が、ネットワークスタックのプロトコル層、たとえばトランスポート層にアクセスすることを可能にするメモリ領域または空間にロードされ、実行される。他の場合には、加速プログラムは、加速プログラム６１２０がカーネルレベルデータ構造６２２５にアクセスすることを可能にするメモリ内にロードされ、実行される。他の実施態様では、加速プログラム６１２０は、アプリケーション６２２０ａ〜６２２０ｎのメモリ内にロードされる。別の実施態様では、加速プログラム６１２０は、それ自体のメモリ空間またはコンテンツ内で単独で実行される。一実施態様では、加速プログラム６１２０は、アプリケーション６２２０ａ〜６２２０ｎのメモリ空間またはコンテキスト内で実行される。実施態様によっては、加速プログラム６１２０は、ユーザモードメモリ、つまりユーザモード６２０３に割り当てられるメモリ内にロードされ、他の実施態様では、加速プログラム６１２０は、カーネルモードメモリ、つまりカーネルモード６２０２に割り当てられるメモリにロードされる。
【０６６１】
実施態様によっては、加速プログラム６１２０は、メモリ内にロードされるか、および／またはクライアントのユーザ、クライアント６２０５のアプリケーション、アプライアンス１２５０、またはサーバ３０に対して透過的に実行される。他の実施態様では、加速プログラム６１２０は、ネットワークスタック６２１０のトランスポート層とインターフェースするように実行され、トランスポート層上の任意のプロトコル層、たとえばセッションまたはアプリケーション層、およびトランスポート層下の任意のプロトコル層、たとえばネットワーク層に対して透過的に実行される。一実施態様では、加速プログラム６１２０は、クライアント６２０５、またはトランスポート層自体の任意のトランスポート層接続に対して透過的に実行される。
【０６６２】
ステップ６３３０では、ロードされ、始動され、あるいは実行されている加速プログラム６１２０は、１）マルチプロトコル圧縮６２３８、２）トランスポート制御プロトコルプーリング６２２４、３）トランスポート制御プロトコル多重化６２２６、４）トランスポート制御プロトコルバッファリング６２２８、および５）キャッシュマネジャー６２３２によって提供される任意の技術など、加速プログラム６１２０の複数の加速技術の何れかを実行する加速プログラム６１２０は、クライアント６２０５とサーバ３０との間の通信の任意の暗号化および／または解読も実行する。一実施態様では、加速プログラム６１２０は、マルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム６１２０は、トランスポート制御プロトコルプーリングを実行し、さらに他の実施態様では、加速プログラム６１２０は、プールされたトランスポート層接続を介して多重化を実行する。一実施態様では、加速プログラム６１２０は伝達制御プロトコルのバッファリングを実行する。実施態様によっては、加速プログラム６１２０はキャッシングを実行する。他の実施態様では、加速プログラム６１２０はキャッシングおよび圧縮を実行する。一実施態様では、加速プログラム６１２０は、トランスポート層プーリングおよび多重化を含むキャッシングを実行する。別の実施態様では、加速プログラム６１２０は、トランスポート層プーリングおよび多重化を含むマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム６１２０は、バッファリングを含む、さらに他の実施態様では、ＴＣＰプーリングおよび多重化を含むキャッシングおよび／または圧縮を実行する。
【０６６３】
したがって、クライアント側の加速プログラム６１２０は、アプライアンス１２５０によって動的に提供され、サイレントな方法で、あるいはクライアント６２０５のユーザまたはアプリケーションに対して透過的にクライアント６２０５上に自動的にインストールされ、実行され、クライアント６２０５およびサーバ３０間の通信に対して、１つまたは複数のクライアント側加速技術を実行する。加速プログラム６１２０は、ネットワークスタックの任意のプロトコル層に対して透過的に、およびクライアントのユーザ、クライアントのアプリケーション、アプライアンス、またはサーバに対して透過的にこれらの加速技術を実行し得る。
【０６６４】
もう１つの態様では、アプライアンス１２５０は、クライアント６２０５によってアクセスされるアプリケーション要求が加速可能かどうかを決定し、アプリケーションが加速可能である場合、加速プログラム６１２０をクライアント６２０５に提供し得る。図４１Ｂを参照すると、ある方法の別の実施態様が示されている。この方法は、接続または通信セッションを確立する要求、およびサーバ上のアプリケーションにアクセスする要求に対して実施し得る。方法６３５０を簡潔に説明すると、ステップ６３５５で、アプライアンス１２５０は、サーバ３０上のアプリケーション６２２０ａ〜６２２０ｎに対するアクセスを要求するクライアント６２０５からの要求を傍受する。ステップ６２６０で、アプライアンス１２５０は、アプリケーション６２２０が加速可能かどうかを決定する。ステップ６３６５で、アプリケーション６２２０が加速できない場合、アプリケーションは、ステップ６２６７で要求をサーバに回送する。ステップ６３６５で、アプリケーション６２２０が加速可能である場合、アプライアンス１２５０は、加速プログラム６１２０がクライアント６２０５上にインストールされるか、あるいは以前にクライアント６２０５に伝送されたかどうかを決定する。加速プログラム６１２０が、まだクライアント６２０５に提供されていない場合、方法６３５０は、上記の方法６３００のステップ６３１５で、実行可能プログラムを伝送、インストール、および実行することを続ける。加速プログラム６１２０がインストールされ、クライアント６２０５を実行している場合、アプライアンス１２５０は、ステップ６３７５で、クライアント６２０５上の加速プログラム６１２０にメッセージを送信し、アプリケーション６２２０を加速する。方法６３５０のステップ６３３０で、加速プログラム６１２０は、アプリケーション６２２０に対する通信に複数の加速技術を実行し、このような通信を暗号化および／または解読し得る。
【０６６５】
さらに詳細には、ステップ６３５５で、アプライアンス１２５０は、任意の適切な手段および機構によって、クライアント６２０５からの要求を傍受し、サーバ３０によって提供されるアプリケーションにアクセスし得る。一実施態様では、アプライアンス１２５０のパケットエンジン６２４０は、クライアント６２０５からの通信を傍受する。他の実施態様では、アプライアンス１２５０は、クライアント６２０５、たとえば加速プログラム６１２０との第１トランスポート層接続、およびクライアント６２０５に代わってサーバ６２０５との第２トランスポート層接続を確立する。したがって、アプライアンス１２５０は、サーバ３０に伝送されるクライアントの何らかの通信を受信、傍受、あるいは取得し得る。実施態様によっては、アプライアンス１２５０は、クライアント６２０５に対する要求を傍受して、サーバ３０との確立されたトランスポート層接続を介して、アプリケーション６２２０にアクセスする。他の実施態様では、アプライアンス６２０５は、要求を傍受して、トランスポート層接続上の任意のプロトコル層、たとえばＨＴＴＰのアプリケーション層プロトコルを介して、通信セッションを確立する。一実施態様では、アプライアンス６２０５は、クライアント２０５からの要求を傍受し、ＩＣＡまたはＲＤＰなどのリモートディスプレープロトコルを介して、サーバ３０からのアプリケーション６２２０を表示し、提供する。
【０６６６】
ステップ６３６０で、アプライアンス１２５０は、クライアント６２０５によって要求されたアプリケーション６２２０が加速可能かどうかを決定する。実施態様によっては、アプライアンス１２５０は、アプリケーションを名前、タイプ、またはカテゴリで識別するアプリケーション識別子を傍受されたクライアント要求から識別、抽出、あるいは処理する。一実施態様では、アプリケーション加速判定機構６２７５は、アプリケーション６２２０が加速可能かどうかを決定するために、アプライアンス１２５０によって使用される。実施態様によっては、アプリケーション加速判定機構６２７５は、データベース、ルックアップテーブル、あるいはメモリまたは記憶装置内のその他の構造化ソース、たとえばデータ構造またはオブジェクト内で問い合わせまたはルックアップを実行し、アプリケーション６２２０が加速可能かどうかを決定する。別の実施態様では、アプライアンス１２５０は、サーバ３０に対する要求などの通信を送信し、アプリケーション６２２０が加速可能かどうかを決定する。
【０６６７】
他の実施態様では、アプライアンス１２５０は、アプリケーション６２２０が以前に加速されたかどうか、その加速が、アプリケーション６２２０の性能および動作を改善したかどうかを決定するための性能ログまたは履歴を有する。したがって、アプライアンス１２５０は、このような加速が、アプリケーション６２２０の性能または動作に対する改善の予め決められた閾値に適合する場合、アプリケーション６２２０を加速可能であると決定し得る。さらに別の実施態様ではアプライアンス１２５０は、ネットワーク６２０４、クライアント６２０５、またはサーバ３０の現在の動作および性能に基づく発見的な規則を提供する。一実施態様では、アプリケーション６２２０は、クライアント６２０５が、一定の性能および動作特性、または能力、たとえば一定速度のプロセッサ、または最低量のメモリを有する場合、加速可能であると決定され得る。実施態様によっては、アプリケーション６２２０は、構成されたポリシーまたは規則に基づいて、たとえばアプライアンス１２５０のポリシーマネジャー内で加速可能であると決定され得る。たとえば、リモートユーザと、特定のタイプのアプリケーション２２０および／またはサーバ３０にアクセスする特定タイプのクライアント６２０５との間で通信されるアプリケーション６２２０は加速され得る。他の実施態様では、アプリケーション６２２０は、ユーザまたはクライアント６２０５の認証および承認に基づいて、加速可能であると決定され得る。さらに別の実施態様では、アプリケーション６２２０は、加速が望ましくないと決定され得る。たとえば、このアプリケーション６２２０は、頻繁には使用されないタイプである。
【０６６８】
ステップ６３６５では、アプリケーション６２２０は、加速することはできないと決定されるか、あるいはクライアント６２０５上のアプリケーション６２２０に加速技術を適用しないことがが望ましい場合、アプライアンス１２５０は、ステップ６３６８で、傍受されたクライアント要求をサーバ３０に回送し、加速プログラム６１２０をクライアント６２０５に伝送または提供しない。一実施態様では、アプライアンス１２５０は、アプライアンス６２２０のアプライアンスに基づく加速を実行または提供し得る。他の実施態様では、アプライアンス１２５０は、アプライアンス１２５０上のアプリケーション６２２０の加速を実行しない。さらに別の実施態様では、アプライアンス１２５０が、アプリケーション６２２０が加速できないか、あるいは加速することが望ましくないと決定する場合、アプライアンス１２５０は、アプリケーション６２２０に対してある加速技術は実行し、他の加速技術は実行しないことができる。
【０６６９】
ステップ６３６５では、アプリケーション６２２０が、加速可能であるか、あるいはクライアント６２０５上のアプリケーションに加速技術を適用することが望ましいと決定する場合、アプライアンス１２５０は、加速プログラム６１２０がクライアント６２０５に提供されたかどうかを決定する。一実施態様では、アプライアンス１２５０は、加速プログラム６１２０がクライアント６２０５上にインストールされたかどうか、あるいはクライアント６２０５上で実行されているかどうかを決定する。実施態様によっては、アプライアンス１２５０は、クライアント６２０５上の加速プログラム６１２０に通信を送信して、加速プログラム６１２０がクライアント６２０５上で実行されているかどうかを決定する。他の実施態様では、アプライアンス１２５０は、ログファイルまたは履歴ファイルを検査して、加速プログラム６１２０がクライアント６２０５に伝送されたかどうかを決定する。別の実施態様では、アプライアンス１２５０は、アプライアンス１２５０またはクライアント６２０５の健全性監視プログラム６２１６に問い合わせて、加速プログラム６１２０がクライアント６２０５上で実行されているかどうかを決定する。
【０６７０】
アプライアンス１２５０が、加速プログラム６１２０がクライアント６２０５上に伝送され、インストールされ、および／または実行されたと決定する場合、アプライアンス１２５０は、図４１Ａに関連して説明する方法６３００のステップに従って、加速プログラム６１２０を提供するであろう。たとえば、アプライアンス１２５０は、加速プログラム６１２０をクライアント６２０５に伝送し、クライアント２０５は、受信すると自動的にインストールおよび実行する。一実施態様では、方法６３００の実施態様の適切なステップを実行した後、アプライアンス１２５０は、ステップ６２７５で、メッセージを加速プログラムに伝達し、１つまたは複数の加速技術をアプリケーション６２２０に適用する。他の実施態様では、加速プログラム６１２０が既にインストールされ、実行されている場合、ステップ６３７５で、アプライアンス１２５０は、メッセージを加速プログラム６１２０に伝達し、１つまたは複数の加速技術をアプリケーション６２２０に適用する。
【０６７１】
実施態様によっては、加速プログラム６１２０は、識別されたアプリケーション６１２０に加速プログラム６１２０による使用が可能な任意の加速技術を実行する。他の実施態様では、アプライアンス１２５０は、どの加速技術をアプリケーション６２２０に対して実行するべきかを加速プログラム６１２０に指示する。一実施態様では、加速プログラム６１２０は、セッションごとに、望ましい加速技術をアプリケーション６１２０に適用し得る。つまり、アプライアンス１２５０から加速プログラム６１２０に対するメッセージは、単に、アプリケーション６２２０のこのインスタンスまたはセッションに加速技術を実行することを加速プログラム６１２０に通知する。他の実施態様では、加速プログラム６１２０が、アプライアンス１２５０からメッセージを受信して、識別されたアプリケーション６２２０に加速技術を適用すると、加速プログラム６１２０は、アプリケーション６２２０の任意のインスタンスまたはセッションに加速技術を適用するか、あるいはクライアント６２０５がリブートされるか、または再始動されるか、あるいはアプライアンス６２０５がリユーザされるか、または再始動されるまで、加速技術を適用する。
【０６７２】
一実施態様では、ステップ６３７５におけるアプライアンス１２５０からのメッセージは、アプリケーションに特有ではない。たとえば、このメッセージは、加速プログラム６１２０に対し、１つまたは複数の加速技術をクライアント６２０５の任意のアプリケーションに実行することを通知する。実施態様によっては、クライアント６２０５に送信されるメッセージは、加速プログラム６１２０に対し、任意の１つまたは複数の加速技術をアプリケーション６２２０に、あるいはすべてのアプリケーション６２２０ａ〜６２２０ｎに使用することを停止するように通知する。別の実施態様では、アプライアンス１２５０は、特定のアプリケーション６２２０を無視するメッセージを加速プログラム６１２０に伝達する。さらに別の実施態様ではアプライアンス１２５０は、加速技術の更新、または新しい加速技術の適用など、構成データまたは情報を加速プログラム６１２０に提供するメッセージを加速プログラム６１２０に伝達する。
【０６７３】
ステップ６３３０では、加速プログラム６１２０は、加速プログラム６１２０の任意の複数の加速技術、たとえば１）マルチプロトコル圧縮６２３８、２）トランスポート制御プロトコルプーリング６２２４、３）トランスポート制御プロトコル多重化６２２６、４）トランスポート制御プロトコルバッファリング６２２８、および５）キャッシュマネジャー６２３２を介したキャッシングによって提供される任意の技術をアプリケーション６２２０に実行する。また、加速プログラム６１２０は、クライアント６２０５およびサーバ３０間のアプリケーション６２２０の通信の任意の暗号化および／または解読を実行し得る。一実施態様では、加速プログラム６１２０は、アプリケーション関連のデータのマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム６１２０は、トランスポート制御プロトコルのプーリングを実行し、さらに他の実施態様では、加速プログラム６１２０は、プールされたトランスポート層接続を介して多重化を実行する。一実施態様では、加速プログラム６１２０は、伝達制御プロトコルのバッファリングを実行する。実施態様によっては、加速プログラム６１２０はキャッシングを実行する。他の実施態様では、加速プログラム６１２０は、キャッシングおよび圧縮を実行する。一実施態様では、加速プログラム６１２０は、トランスポート層プーリングを含むキャッシングを実行し、さらに他の実施態様では、さらに多重化を実行する。別の実施態様では、加速プログラム６１２０は、ＴＣＰバッファリングを含むマルチプロトコル圧縮を実行し、さらに他の実施態様ではトランスポート層プーリング、さらに他の実施態様では多重化も含むマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム６１２０は、圧縮を含むキャッシングを実行し、さらに他の実施態様ではＴＣＰプーリング、さらに他の実施態様では多重化を含むキャッシングを実行する。
【０６７４】
したがって、アプライアンス１２５０は、アプリケーションを加速するかどうか、あるいはアプリケーションが加速可能かどうかを動的に決定して、クライアント側の加速プログラム６１２０に対し、クライアント６２０５上で、任意の１つまたは複数の加速技術をアプリケーション６２２０に実行することを伝達する。さらに、実施態様によっては、複数の加速プログラム６１２０は、アプライアンスによってクライアント６２０５に動的に供給され、クライアント６２０５によって自動的にインストールされ、実行され得る。たとえば、加速プログラムは、サーバ６２０５との各々の接続、またはアプリケーション６２２０との各々の通信セッションに関する技術および方法に従って提供され得る。したがって、クライアント６２０５は、各々のサーバ６３０および各々のアプリケーション６２２０ａ〜６２２０ｎの加速を処理し、実行するための複数の加速プログラム６１２０を自動的にインストールし、実行し得る。
【０６７５】
図４１Ｃを参照すると、複数の加速技術を統合された方法で実行するための方法６３８０の一実施態様が示されている。簡潔に説明すると、ステップ６２８０で、加速プログラム６１２０は、トランスポート層において、クライアント６２０５およびサーバ３０間の通信のネットワークパケットをトランスポート層接続を介して傍受する。ステップ６３９０で、加速プログラム６１２０は、トランスポート層において、カーネルレベルデータ構造を介して、たとえばＡＰＩを介してクライアント６２０５のネットワークスタック６２１０に提供されるデータ構造を介してネットワークパケットにアクセスする。ステップ６３９５で、加速プログラム６１２０は、加速プログラム６１２０のインターフェースポイントまたは実行個所にてカーネルレベルデータ構造を使用して、統合的な方法で複数の加速技術を実行する。
【０６７６】
さらに詳細には、ステップ６３８５で、加速プログラム６１２０は、任意の適切な手段および機構により、トランスポート層接続を介してクライアント６２０５およびサーバ３０間の通信のネットワークパケットを傍受する。一実施態様では、加速プログラム６１２０は、クライアントによる要求のネットワークパケット、またはこの要求に関連するネットワークパケット、または要求に対する応答を傍受し、クライアント６２０５およびサーバ３０間のトランスポート層接続を確立する。別の実施態様では、加速プログラム６１２０は、要求のネットワークパケット、または要求に関連するネットワークパケット、または要求に対する応答を傍受し、クライアント６２０５およびサーバ３０間のトランスポート層接続を介して、アプリケーション６２２０にアクセスするか、またはアプリケーション６２２０を使用する。一実施態様では、加速プログラム６１２０は、トランスポートプロトコル層において、トランスポートドライバインターフェースを介して、あるいはネットワークスタック６２１０のトランスポートプロトコル層にインターフェースするネットワークドライバを介してネットワークパケットを傍受する。別の実施態様では、加速プログラム６１２０は、トランスポートプロトコル層、またはネットワークスタック６２１０のその他の任意のプロトコル層において、ネットワークドライバインターフェース規約（ＮＤＩＳ）ドライバ、または小型ポートドライバ、または小型フィルタドライバを介してネットワークパケットを傍受する。実施態様によっては、加速プログラム１２０は、トランスポート層において、フッキングまたはフィルタリング機構を介してネットワークパケットを傍受する。
【０６７７】
ステップ６３９０で、加速プログラム６１２０は、カーネルレベルデータ構造６２２５を介して、トランスポート層で傍受されたネットワークパケットの情報およびデータにアクセスするか、あるいは情報およびデータを取得する。カーネルレベルデータ構造６２２５を使用することによって、加速プログラム６１２０は、ペイロード（単数または複数）上の情報およびデータ、またはネットワークパケットによってトランスポート層において搬送または伝達される１つまたは複数のプロトコルを取得することができる。実施態様によっては、ネットワークパケットを表すカーネルレベルデータ構造をトランスポート層における、および／またはトランスポート層上のネットワークスタック層で使用すると、加速プログラム６１２０が、トランスポート層において、トランスポート層のネットワークパケットによって搬送されるプロトコル層に対して複数の加速技術を実行するか、または作動させることができる。一実施態様では、単一カーネルレベルデータ構造６２２５を使用して、コンテキストの切換えとともに、コピーおよびメモリの割当てが、ネットワークスタック６２１０の様々なプロトコル層における複数のデータ構造を使用するのを防ぐか、あるいは回避する。一実施態様では、加速プログラム６１２０は、カーネルレベルデータ構造６２２５を第２データ構造にコピーし、第２データ構造は、別のカーネルレベルデータ構造またはユーザレベルデータ構造を含み得る。
【０６７８】
ステップ６３９５で、加速プログラム６１２０は、プログラム６２１０、またはプログラム６２１０の一連の実行可能なインストラクション、または１つの実行個所における１つのインターフェースポイントまたはロケーションで複数の加速技術を実施、実行、または作動させる。加速プログラム６１２０は、加速プログラム６１２０の複数の加速技術の何れか、たとえば１）マルチプロトコル圧縮６２３８、２）トランスポート制御プロトコルプーリング６２２４、３）トランスポート制御プロトコル多重化６２２６、４）トランスポート制御プロトコルバッファリング６２２８、および５）キャッシュマネジャー６２３２を介したキャッシングによって提供される任意の技術などを実行する。加速プログラム６１２０は、加速プログラム６１２０の加速技術を実行する際の同じ位置で、クライアント６２０５およびサーバ３０間のアプリケーション６２２０の通信の任意の暗号化および／または解読も実行する。
【０６７９】
一実施態様では、加速プログラム６１２０は、一連の実行可能なインストラクション、たとえばファンクションコール、あるいはある場所またはロケーションにおいて、任意の所望の複数の加速技術を互いに後で実行する。たとえば、加速プログラム６１２０は、カーネルレベルデータ構造を介して、傍受されたネットワークパケットを取得し、次に、加速技術の論理、機能、規則、または動作を表すインストラクションを互いに後で実行する。したがって、ネットワークパケットの情報およびデータは、カーネルレベルデータ構造６２２５を介していったん抽出または取得され、加速技術を表す加速プログラム６１２０の任意のインストラクションに対する入力、パラメータ、引数、および条件として使用される。ネットワークパケットは、より高レベルのプロトコルデータおよび情報を伝達するが、いくつかの実施態様の加速プログラム６１２０は、実行時のある位置およびある時点で、このネットワークパケット、およびより高レベルのプロトコルデータおよび情報を処理する。さらに、加速プログラム６１２０は、キャッシュマネジャー６２３２に記憶されたデータの圧縮、またはキャッシュから検索されたデータの圧縮／展開など、統合された方法の任意の所望の順序で複数の加速技術の各々を実行し得る。
【０６８０】
一実施態様では、加速プログラム６１２０は、マルチプロトコル圧縮およびキャッシングを互いに後で実行する。別の実施態様では、加速プログラム６１２０は、プールされたトランスポート層接続を介して、トランスポート制御プロトコルプーリングおよび多重化に関連する動作を互いに後で実行する。一実施態様では、加速プログラム６１２０は、圧縮およびキャッシング、またはＴＣＰプーリングおよび／または多重化の後でトランスポート制御プロトコルのバッファリングを実行する。実施態様によっては、加速プログラム６１２０はキャッシングを実行する。一実施態様では、加速プログラム６１２０は、トランスポート層プーリングおよび多重化とともに後でキャッシングを実行する。別の実施態様では、加速プログラム６１２０は、トランスポート層プーリングおよび多重化とともに後でマルチプロトコル圧縮を実行する。別の実施態様では、加速プログラム６１２０は、ＴＣＰバッファリングとともに後でキャッシングおよび／または圧縮を実行し、さらに他の実施態様では、ＴＣＰプーリングおよび多重化とともに後で実行する。
【０６８１】
加速プログラムは、一般に、加速技術を後で実行すると記載されているが、後続の実行は、加速に関連しないが、各々の加速技術の間に統合され、実行されるその他の論理、機能、および動作も含み得る。加速プログラムは、加速技術に対する実行可能なインストラクションのような統合により、さらに動作および性能効率が得られ、その他の何らかの動作または機能は、実行可能プログラム内の単一のインターフェースポイントおよび実行個所で実行される。さらに、実行されるプロトコル層、あるいはトランスポートプロトコル層の上のプロトコル層に対する加速技術は、一度に、および／またはトランスポート層のあるロケーションで処理される。したがって、ネットワークパケットが横断し、これらの上位レベルのネットワークスタック６２１０、またはネットワークスタック６２１０内の後のある位置で処理されるため、これらの上位レベルのプロトコルの加速技術は再度適用する必要がない。
【０６８２】
他の態様では、第１プログラム６２２２および加速プログラム６１２０（この実施態様では、第２プログラムとも呼ばれる）を使用することができる。一実施態様では、第１プログラム６２２２は、第２プログラム６１２０とともに、たとえば、クライアント側の加速技術を適用し得るアプライアンス１２５０を介して、サーバ３０との仮想プライベートネットワーク接続を促進し、確立するために使用することができる。別の実施態様では、第１プログラム６２２２は、第２プログラム、または加速プログラム６１２０をインストールし、実行するために使用される。
【０６８３】
次に、図４２Ａを参照すると、この態様を実施する方法６４００の一実施態様が示されている。簡潔に説明すると、ステップ６４０２で、クライアント６２０５は、アプライアンス６２０５との通信セッションにログインし、セッションを確立する。ステップ６４０４で、アプライアンス１２５０は、第１プログラム６２２２をクライアント６２０５に送信する。ステップ６４０６で、クライアント６２０５は、第１プログラム６２２２をインストールして実行し、その結果、加速プログラム６１２０、つまり第２プログラムをインストールして実行する。ステップ６４０７で、クライアント６２０５は、確立された暗号化データ通信セッションを介して、プライベートネットワーク上のリソースと通信し、このリソースにアクセスする。ステップ６４１０で、クライアント６２０５はアプライアンス１２５０からログアウトし、アプライアンス１２５０との通信セッションを終了する。
【０６８４】
方法６４００のステップ６４０２で、クライアント６２０５は、ログイン手順を実行し、ネットワーク６２０４を介して、アプライアンス１２５０との暗号化データ通信セッションを確立する。一実施態様では、暗号化データ通信セッションは、クライアント６２０５からのトラフィックを、プライベートデータ通信ネットワーク内のアプライアンス１２５０の後ろに存在する任意のサーバ３０にブリッジするためのトンネルとして使用される。一実施態様では、クライアント６２０５は、Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）またはＮｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ（登録商標）などのウェブブラウザを使用して、セキュアソケットレイヤー（ＳＳＬ）またはその他の暗号化法、たとえばＩＰＳｅｃ、およびトランスポート層セキュリティ（ＴＬＳ）を使用するアプライアンス１２５０とのデータ通信セッションにログインし、セッションを確立する。別の実施態様では、ハイパーテキスト転送プロトコルセキュアソケットレイヤー（ＨＴＴＰＳ）などのプロトコルは、暗号化データ通信セッションを開始するために使用し得る。
【０６８５】
ステップ６４０４では、暗号化データ通信セッションのログインおよび確立に応じて、アプライアンス１２５０は、ネットワーク６２０４を通して第１プログラムをクライアント６２０５に送信する。第１プログラムは、暗号化データ通信セッションを通した通信のトンネルエンドポイントとして作用するように設計および構築されるか、あるいは構成される。一実施態様では、第１プログラムは、クライアント６２０４のブラウザによって自動的にインストールされ、実行されるプラグインアプリケーションを含む。たとえば、第１プログラムは、Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）ウェブブラウザによって実行されるプラグインとして提供されるＡｃｔｉｖｅＸコントロールを含み得る。別の実施態様では、第１プログラムは、Ｎｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ（登録商標）ウェブブラウザ、またはネットワーク環境全体で動作する別の制御またはプログラミング構成要素によって実行されるプラグインとして提供されるＪａｖａ（登録商標）アプレットを含み得る。
【０６８６】
ステップ４０６では、クライアント６２０５は、第１プログラム６２２２をインストールして実行し、第１プログラムの実行は、第２プログラムをクライアント６２０５にインストールすることを含む。一実施態様では、第１プログラム６２２２は、たとえば、方法６３００および図４１Ａに関連して説明された技術の何れかを使用して、自動的にインストールされて実行され得る。実施態様によっては、第１プログラム６２２２は、第２プログラム、または加速プログラム６１２０をアプライアンス１２５０から取得、ダウンロード、または受信する。別の実施態様では、第１プログラム６２２２は、たとえばサイレントインストール、またはクライアント６２０５のユーザ、クライアント６２０５のアプリケーション６２２０、アプライアンス１２５０、またはサーバ３０に対して透過的なインストールによって、第２プログラムを自動的にインストールして実行するための、加速プログラム６１２０などの第２プログラム用のインストーラまたはインストールマネジャーを含む。
【０６８７】
一実施態様では、第２プログラムは、一部には、ネットワーク６２０４上のリソースに向けられる、クライアント６２０５上で実行されているアプリケーション６２２０からの通信を傍受し、傍受した通信を第１プログラム６２２２に提供し、暗号化データ通信セッションを介してアプライアンス１２５０に送信するように構成される。また、第２プログラムは、第２プログラムは、イントラネットネットワークの名前解決サービス、および任意に分割ネットワークトラフィックを提供するように構成してもよい。トラフィックを分割することによって、一実施態様は、どのトラフィックが、第１プログラム６２２２のＳＳＬトンネルまたは暗号化トンネルに向けられるか、また、どのトラフィックが、クライアント６２０５の通常の、決まりきった、あるいは一般的な動作に基づいて、ネットワークスタック６２１０のトランスポート層による処理を継続することを許可されているか、継続することが可能かを決定することもできる。一実施態様では、第２プログラムは、「フック」としてクライアント６２０５のオペレーティングシステム内に挿入される動的傍受装置（たとえば、フィルタデバイスドライバ）を備える。たとえば、第２プログラムは、クライアントオペレーティングシステムのトランスポート層スタック、たとえばＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）（登録商標）オペレーティングシステムのトランスポート層スタックに取り付けられるフィルタデバイスドライバを備え得る。
【０６８８】
ステップ６４０８では、第１および第２プログラムがインストールされると、クライアント６２０５上で実行されているアプリケーションは、確立された暗号化データ通信セッションを介して、プライベートデータ通信ネットワーク６２０４上のアプリケーションおよびデータなどのリソースと通信し、これらにアクセスし得る。この通信が行われる方法については、図４２Ｂに関して以下でさらに詳細に説明する。一実施態様では、上記の第１プログラムおよび第２プログラムは、加速プログラム６１２０などのクライアント６２０５によって自動的にインストールされ、実行される単一制御またはプログラミング構成要素によって実行される。仮想プライベートネットワーク接続および通信を提供するほか、加速プログラム６１２０などの第１プログラム６２２２および／または第２プログラムは、仮想プライベートネットワーク接続、たとえばアプライアンス１２５０に対する暗号化トンネルまたはブリッジを介して、クライアントの通信に関して本明細書に記載する任意の加速技術を実行し得る。
【０６８９】
ステップ６４１０で、クライアント６２０５は、ネットワーク６２０４から切断するためのログアウト手順を実行し、この手順は、アプライアンス１２５０との暗号化データ通信セッションを終了する。一実施態様では、第１プログラム６２２２は、ログアウト時に、クライアント６２０５のオペレーティングシステムに対して行われた修正を自動的に除去し、オペレーティングシステムを第１プログラム６２２２および／または第２プログラムのインストール以前の状態に戻す。一実施態様では、第１プログラム６２２２および／または第２プログラムは、第１および第２プログラムをクライアント６２０５のオペレーティングシステムから、あるいはクライアント６２０５の継続動作に対して非侵入的な方法で、クライアント６２０５上のさらに他の動作から除去するために、アンインストーラをさらに含むか、あるいはインストラクションをアンインストールする。さらに別の実施態様では第１プログラム６２２２および／または加速プログラム６１２０は、提供される任意の接続またはセッション時に、クライアント６２０５のアプリケーションによって使用される任意のファイル、たとえば一時ファイルまたはクッキーを除去する。
【０６９０】
図４２Ｂは、クライアント６２０５が、プライベートデータ通信ネットワーク６２０４上のリソースと通信し、アクセスする方法６４５０の一実施態様を示す。たとえば、方法６４５０は、方法６４００のステップ６４０８を実施し得る方法を表す。簡潔に説明すると、ステップ６４５２で、クライアント６２０５は、第１プログラムおよび／または第２プログラムを介して、新たな接続を行うか、あるいはＴＣＰ／ＩＰドメイン名解決など、ドメイン名を解決する。ステップ６４５４で、第２プログラムが実行される。ステップ６４５６で、第２プログラムは、プライベートネットワークに向けられるクライアント６２０５からの通信を傍受し、通信を第１プログラム６２２２に再経路指定するか、または送信する。ステップ６４５８で、第１プログラム６２２２は、接続を終了またはプロキシし、確立された暗号化通信セッションを介して提供するために、ペイロードを分割し、ペイロードをカプセル化する。ステップ６４６０で、第１プログラム６２２２は、傍受された通信を、パブリックネットワークを通して、予め確立された暗号化通信セッションを介してプライベートネットワーク内のアプライアンス１２５０に送信する。ステップ６４６２で、アプライアンス１２５０は、ステップ６４６２で、アプライアンス１２５０は、第１プログラムから受信した通信を解読し、解読した通信を適切な宛先リソース、たとえばサーバ３０に回送する。ステップ６４６４で、宛先リソースは、解読した通信を処理し、ステップ６４６４で、宛先リソースは、応答通信がある場合、応答通信をアプライアンス１２５０に送信する。ステップ６４６８で、アプライアンス１２５０は、応答通信を暗号化し、暗号化された通信を、パブリックネットワークを通して、予め確立された暗号化通信セッションを介してクライアント６２０５の第１プログラム６２２２に送信する。ステップ６４７０で、第１プログラム６２２２は、応答通信を解読し、第２プログラムを介して、解読した通信を適切なクライアントアプリケーションに回送する。
【０６９１】
ステップ６４５２で、クライアント６２０５のアプリケーション６２２０は、クライアント６２０５のネットワークスタック６２１０のトランスポートプロトコル層を介して、新たな接続を行うか、あるいはドメイン名を解決する。一実施態様では、アプリケーション６２２０は、クライアント６２０５およびサーバ３０間、あるいはクライアント６２０５およびアプライアンス１２５０間のトランスポート層接続を確立することを要求し得る。別の実施態様では、アプリケーション２２０またはクライアント６２０５は、サーバ３０によって提供されるアプリケーション６２２０に対するアクセスを要求し得る。たとえば、サーバ３０は、サーバ３０上で実行しているアプリケーション６２２０の出力を表現するＩＣＡまたはＲＤＰのリモートディスプレープロトコルを伝送することによって、サーバベースコンピューティングまたはシンクライアントコンピューティングを提供し得る。別の実施態様では、クライアント６２０５は、サーバ３０のリソース、たとえばファイルまたはディレクトリ、あるいはｅメールサービスに対するアクセスを要求し得る。実施態様によっては、クライアント６２０５は、パブリックネットワーク４０上にあり、サーバ３０はネットワーク４０’上にある。他の実施態様では、クライアント６２０５およびサーバ３０は、異なるプライベートネットワーク上に存在し得る。
【０６９２】
ステップ６４５４で、第２プログラムは、１つまたは複数の機能を自動的に、あるいはトランスポート層の機能が開始する前に実行する。実施態様によっては、第２プログラムは、加速プログラム６１２０であるか、あるいは加速プログラム６１２０を含む。一実施態様では、第２プログラムは、ステップ６４５２のクライアント要求を傍受するか、あるいは受信する。実施態様によっては、クライアント６２０５のアプリケーション６２２０は、ネットワークスタック６２１０に対するＡＰＩコールを行い、これは、第２プログラムによって傍受される。任意のＡＰＩコールが、ネットワークスタック６２１０のトランスポート層によって処理される前に、第２プログラムは、ネットワークスタック６２１０内にフックされるか、あるいはネットワークスタック６２１０にインターフェースされ、通信が伝送または処理され、トランスポート層接続を介して伝達される前に、論理、規則、機能、または動作を実行する。
【０６９３】
ステップ６４５６で、第２プログラムは、たとえば、クライアント６２０５上のアプリケーション６２２０ａ〜６２２０ｎによるクライアント２０５から、ネットワーク４０’上のリソースに向けられる通信を傍受し、ネットワーク環境全体で動作するＡｃｔｉｖｅＸコントロールプラグイン、Ｊａｖａ（登録商標）アプレット、またはその他の制御またはプログラミング構成要素を含む第１プログラム６２２２に通信を再経路指定する。第２プログラムは、傍受された通信を提供するネットワークパケットまたはパケットからの宛先情報にアクセスし、宛先情報を読み取るか、あるいは取得して、通信が、アプライアンス１２５０の後ろのプライベートネットワーク４０’などのネットワークに向けられていると決定する。たとえば、第２プログラムは、ネットワークパケットからの宛先ＩＰアドレスおよび／またはポートを抽出または解釈し得る。傍受された通信がネットワーク４０’に向けられると、第２プログラムは、任意の適切なインターフェース手段および機構を介して、たとえばプロセス間通信インターフェースまたはＡＰＩコールを介して、傍受された通信を第１プログラム６２２２に伝達する。一実施態様では、傍受された通信は、そのまま第１プログラム６２２２に送信されるか、他の実施態様では、傍受された通信は、第１プログラム６２２２に送信される前に、第２プログラムによって予め処理される。たとえば、第２プログラムは、傍受された通信からペイロードを除去し、ペイロードを第１プログラム６２２２に回送する。
【０６９４】
ステップ６４５８で、各々の傍受された通信は、第１プログラム６２２２によって終了またはプロキシされ、第１プログラム６２２２は、確立された暗号化データ通信セッションを介して伝送するように、傍受された通信を準備する。一実施態様では、第１プログラム６２２２は、ペイロードを取り除き、ペイロードをカプセル化して、確立された暗号化データ通信セッションを介して提供する。別の実施態様では、第１プログラム６２２２は、第２プログラムから受信し、傍受した通信をカプセル化する。実施態様によっては、ペイロードはＴＣＰペイロードであり、アプライアンス１２５０を介して、クライアント６２０５およびサーバ３０間の新しいＴＣＰ接続内にカプセル化される。
【０６９５】
ステップ６４６０で、第１プログラム６２２２は、傍受された通信を、ネットワーク６２０４を通して、予め確立された暗号化データ通信セッションを介してアプライアンス１２５０に送信する。実施態様によっては、第１プログラム６２２２は、傍受された通信を暗号化し、傍受されて暗号化された通信をアプライアンス１２５０に送信する。一実施態様では、暗号化は、ＳＳＬプロトコルに従って実施される。別の実施態様では、暗号化はＴＬＳに基づく。任意のタイプおよび形式暗号化および／または解読は、第１プログラム６２２２または加速プログラム６１２０によって使用され得る。
【０６９６】
ステップ６４６２で、アプライアンス１２５０は、第１プログラム６２２２によって送信される接続を終了するプロキシとして動作する。アプライアンス１２５０は、第１プログラム６２２２から受信した通信を解読し、アプライアンス１２５０が、ネットワーク４０’上の宛先リソースと確立した第２接続を介して、解読した通信をネットワーク４０’上の適切な宛先リソースに回送する。一実施態様では、解読は、ＳＳＬプロトコル、またはその他の適用可能な暗号化および解読プロトコルに従って実施される。実施態様によっては、アプライアンス１２５０は、宛先リソースに回送された通信上で、以下の１）マルチプロトコル圧縮６２３８’、２）トランスポート制御プロトコルプーリング６２２４、３）トランスポート制御プロトコル多重化６２２６、４）トランスポート制御プロトコルバッファリング６２２８’、および５）キャッシュマネジャー６２３２’を介したキャッシングにより提供される技術のうちの１つまたは複数など、１つまたは複数の加速技術を実行する。
【０６９７】
ステップ６４６４で、宛先リソースは、解読された通信を処理する。一実施態様では、解読された通信は、通信または通信セッションを確立する要求である。別の実施態様では、解読された通信は、クライアント６２０５の代わりに、アプリケーション６２２０を始動するか、またはアプリケーション６２２０にアクセスする要求である。他の実施態様では、解読された通信は、ウェブページに対する要求、たとえばウェブページをウェブサーバ３０から受信するためのＨＴＴＰ要求である。
【０６９８】
ステップ６４６６で、解読された通信が要求を含み、その要求に対する応答がある場合、宛先リソースは、応答通信をアプライアンス１２５０に発信する。実施態様によっては、応答は、クライアント６２０５によって要求される接続または通信セッションを確立する肯定応答を含む。他の実施態様では、応答は、エラーメッセージを含む。一実施態様では、応答は、認証要求またはチャレンジ応答型メカニズムを含む。実施態様によっては、応答は、クライアント６２０５によって使用される加速プログラム６１２０を含む。別の実施態様では、応答は、クライアント６２０５によって表示されるウェブページなどのＨＴＭＬを含む。他の実施態様では、応答は、動的に生成されたオブジェクトなどのオブジェクトを含む。
【０６９９】
ステップ６４６８で、アプライアンス１２５０は、ネットワーク４０を通して応答通信を、予め確立された暗号化データ通信セッションを介してクライアント６２０５上の第１プログラム６２２０に送信する。一実施態様では、アプライアンス１２５０は、応答通信を暗号化し、暗号化された応答通信を第１プログラム６２２２に送信する。実施態様によっては、暗号化は、ＳＳＬプロトコル、またはその他の適用可能な暗号化および解読プロトコルに従って実施される。さらに、アプライアンス１２５０は、クライアント６２０５に対する通信で、任意の加速技術、たとえばマルチプロトコル圧縮６２３８’、キャッシング６２３２’、またはＴＣＰバッファリング６２２８’を実行し得る。
【０７００】
ステップ６４７０で、第１プログラム６２２２は、応答通信を解読し、第２プログラムを介して、通信を適切なアプリケーション６２２２に回送する。第１プログラム６２２２は、任意の適切なインターフェース手段およびメカニズムを使用して、たとえば任意のタイプおよび形式のプロセス間通信機構またはＡＰＩコールを介して、第２プログラムと通信し得る。第２プログラムは、クライアント６２０５のネットワークスタック６２１０を介して、アプリケーション６２２０に応答通信を提供する。したがって、アプリケーション６２２０は、アプリケーション６２２０に対する任意の変更または修正を行わずに、透過的に応答通信を受信する。
【０７０１】
別の実施態様によると、クライアント６２０５は、ステップ６４５８で、ネットワーク４０を通して通信を送信する前に、傍受された通信の追加の処理を実行する。一実施態様は、データを暗号化する前に、クライアントとの接続を終了するプロキシとして作用するＶＰＮソリューションを提供するので、追加の処理が効率的に遂行される。このような処理は、クライアントアプリケーションが、自ら選択するどのようなＩＰアドレスでも使用することができ、また実行時にこれらのアドレスを動的に変更することができるように、傍受された通信に関するドメイン名サービス（ＤＮＳ）名前解決を含むことができる。このような追加の処理は、実施態様を他の技術、たとえばグローバルサービス負荷分散と効果的に統合して、分散ゲートウェイまたはサーバ間でより大きい可用性およびより大きい効率を達成することを可能にする。追加の接続処理は、傍受された通信に関する詳細なログを維持することも可能にする。
【０７０２】
別の実施態様では、アプライアンス１２５０は、クライアント６２０５上の第１プログラムから受信した通信を終了し、ステップ６４６２に示すようにネットワーク４０’上の宛先に通信を回送するのではなく、この通信に含まれる１つまたは複数の要求をさらに処理する。このさらに他の処理は、通信が、ネットワーク４０’上の適切な宛先に提供される前に、アプライアンス１２５０によって再暗号化され、それによって端末相互間ネットワークセキュリティを提供するバックエンド暗号化を含むことができる。宛先は、その後、トラフィックを解読し、適切に応答する。さらに、このような処理は、アプライアンス１２５０が、宛先サーバによる追加の作業を必要とするのではなく、キャッシュから応答を供給し、通信上のローカルネットワークの負荷分散、グローバルサービスの負荷分散、および／または圧縮を実行して、ネットワーク４０の効率および応答性を強化することを可能にすることが可能である。
【０７０３】
上記の方法に従って、Ｖ暗号化データ通信セッションに基づくＶＰＮがクライアント２０５およびネットワーク４０間に確立される。たとえば、一実施態様では、安全なＶＰＮはＨＴＴＰＳを介して確立される。したがって、クライアント６２０５からネットワーク４０へのすべての通信は、この暗号化データ通信セッションを通して、第１プログラムを介してアプライアンス１２５０に、またこの逆に経路指定される。暗号化データ通信セッションは、ＨＴＴＰＳを使用して確立され得るが、暗号化データ通信セッションを通して渡される通信は、ＨＴＴＰＳパケットデータである必要はなく、またＨＴＴＰパケットデータである必要もないことに注意するべきである。たとえば、通信は、伝送制御プロトコル／ユーザデータグラムプロトコル（ＴＣＰ／ＵＤＰ）、またはインターネット制御メッセージプロトコル（ＩＣＰＭ）パケットデータも含むことができるが、これらの例は、制限することを意図しているのではない。さらに、図４２Ｂに関して説明した方法は、クライアント６２０５上のアプリケーションと、ネットワーク４０上のリソースとの間の要求−応答タイプの通信について記述しているが、暗号化通信は、要求−応答に基づく必要はない。むしろ、通信は、任意のタイプでよい。したがって、接続または通信セッション、たとえばＵＤＰセッションを確立することができる任意のクライアントアプリケーションは、暗号化通信を送信および受信することができる。
【０７０４】
別の態様では、加速プログラム６１２０は、クライアントから任意の中間デバイスを動的にバイパスして、サーバ３０と接続または通信し得る。たとえば、クライアント６２０５は、１つまたは複数の中間手段、たとえばアプライアンス１２５０を介してサーバと接続し得る。ある理由または別の理由で、中間手段は、クライアント６２０５がサーバ３０と通信するために使用することができなくなる場合があり、たとえばアプライアンス１２５０は、保守のために一時停止するか、あるいはリブートまたは再始動の過程にある場合がある。加速プログラム６１２０は、中間手段が使用可能ではないと決定し、サーバ３０との別の接続または通信セッション経路を自動的に確立する。これは、クライアント６２０５のユーザまたはアプリケーションに対して透過的に行うことができ、その結果、接続および／または通信セッションは変化したか、さもなければ分離したように見えない。
【０７０５】
次に、図４３を参照すると、中間手段を自動的にバイパスする方法６５００の一実施態様が示されている。簡潔に説明すると、ステップ６５０５で、加速プログラム６１２０は、アプライアンス１２５０などの中間手段を介して、クライアント６２０５およびサーバ３０間のトランスポート層接続を確立する。ステップ６５１０で、加速プログラム６１２０は、クライアント６２０５が、確立されたトランスポート層接続を介してサーバ３０と通信するために、中間手段を使用することはできないと決定する。ステップ６５１５で、加速プログラム６１２０は、クライアント６２０５上で、クライアント６２０５からサーバ３０への通信を傍受する。ステップ６５２０で、加速プログラム６１２０は、クライアント６２０５およびサーバ３０間に第２トランスポート層接続を確立し、その結果、サーバ３０とのクライアントの通信に使用することはできないと決定された中間手段をバイパスする。ステップ６５２５で、加速プログラム６１２０は、第２トランスポート層接続を介して、クライアント６２０５の傍受された通信をサーバ３０に伝送する。
【０７０６】
さらに詳細には、ステップ６５０５で、加速プログラム１２０は、中間手段を介して、クライアント６２０５およびサーバ３０間のトランスポート層接続を確立する。一実施態様では、中間手段は、アプライアンス６２０５を含む。他の実施態様では、中間手段は、以下の１つを含む：キャッシュ、サーバ、ゲートウェイ、ファイヤウォール、ブリッジ、ルータ、スイッチ、ハブ、プロキシ、あるいは任意のこれらのタイプおよび形式の中間手段として作動するか、あるいはこうした中間手段の機能および動作を提供する任意のソフトウェアアプリケーションまたはプログラム。一実施態様では、中間手段は、サーバ３０上で作動し得る。実施態様によっては、トランスポート層接続は、同じタイプおよび形式、または異なるタイプおよび形式の複数の中間手段を介して確立される。別の実施態様では、トランスポート層接続は、クライアント６２０５として確立されたか、またはアプライアンス１２５０で確立されたトランスポート層接続のプールの接続から成る。
【０７０７】
ステップ６５１０で、加速プログラム１２０は、クライアント６２０５が、確立されたトランスポート層接続を介してサーバ３０と通信する際に、中間手段が使用可能ではないか、あるいは使用することができないと決定する。加速プログラム６１２０は、中間手段の状況、または任意の適切な手段および／または機構による中間手段の可用性を決定し得る。一実施態様では、加速プログラム６１２０は、中間手段に対する伝送に関連するエラーメッセージまたは障害応答を受信することによって、中間手段が使用可能ではないと決定する。たとえば、加速プログラム６１２０は、確立されたトランスポート層接続を介して、クライアント６２０５から通信を伝送する場合、失敗したトランスポート層接続通信の応答を受信し得る。別の実施態様では、加速プログラム６１２０は、予め決められた頻度でピングコマンドを中間手段に伝送し、中間手段の状況および可用性を監視し得る。加速プログラム６１２０が、中間手段からの応答を受信しないか、あるいは実施態様によっては、遅延応答、または所望の待ち時間より長い応答を受信する場合、加速プログラム６１２０は、中間手段がクライアント６２０５によって使用可能ではないか、あるいは使用することはできないと決定し得る。他の実施態様では、サーバ３０、アプライアンス１２５０、または中間手段は、クライアント６２０５または加速プログラム６１２０にメッセージを送信し、中間手段がクライアント６２０５によって使用可能ではないか、あるいは使用することはできないことを識別する情報を提供し得る。実施態様によっては、確立されたトランスポート層接続は分離または中断されるか、他の実施態様では閉鎖される。
【０７０８】
ステップ６５１５で、加速プログラム６１２０は、確立されたトランスポート層接続を通して、中間手段を介して移動するように定められたクライアント６２０５からサーバ３０への通信を傍受する。加速プログラム６１２０は、ネットワークスタック６２１０内の任意のある位置、および任意のプロトコル層で通信を傍受し得る。一実施態様では、加速プログラム６１２０は、確立されたトランスポート層接続上で伝送する前に、トランスポートプロトコル層で通信を傍受する。たとえば、実施態様によっては、加速プログラム６１２０は、トランスポートドライバインターフェースを有するか、あるいはトランスポートプロトコル層にインターフェースするネットワークドライバを含む。その他の実施態様は、図４２Ａ〜４２Ｂに関連して説明したように、第１プログラム６２２２、および第２プログラムとしての加速プログラム６１２０を含むことができ、第１プログラム６２２２または加速プログラム６１２０が通信を傍受する。
【０７０９】
ステップ６５２０で、加速プログラム６１２０は、ステップ６５１０で使用可能ではないか、あるいは使用できないと決定された中間手段をバイパスするために、クライアント６２０５に対するサーバ６２０５との第２トランスポート層接続を確立する。一実施態様では、加速プログラム６１２０は、たとえば、クライアント６２０５およびサーバが同じネットワーク６２０５上に存在するか、あるいはクライアント６２０５およびサーバ３０間に経路指定可能な異なるネットワーク上に存在する場合、サーバ３０に対して直接第２トランスポート層接続を確立する。別の実施態様では、加速プログラム６１２０は、第２アプライアンス１２５０’などの第２中間手段との第２トランスポート層接続を確立する。実施態様によっては、加速プログラム６１２０は、サーバ１２５０との別のトランスポート層接続を確立するように、アプライアンス１２５０に要求する。一実施態様では、アプライアンス１２５０は、サーバ３０に対するトランスポート層接続のプールの第２トランスポート層接続を使用する。別の実施態様では、加速プログラム６１２０は、第２トランスポート層接続を確立するようにサーバ３０に要求する。実施態様によっては、加速プログラム６１２０は、加速プログラム６１２０によって確立された、サーバ３０とのトランスポート層接続のプールからの第２トランスポート層接続を使用する。
【０７１０】
一実施態様では、加速プログラム１２０は、ステップ６５２０で、クライアント６２０５のユーザまたはアプリケーション６２２０に対して透過的に、あるいは実施態様によっては、トランスポート層の上または下の任意のプロトコル層に対して透過的に第２トランスポート層接続を確立する。態様によっては、第２トランスポート層接続は、ステップ６５１０で、中間手段が、クライアント６２０５によって使用可能ではないか、あるいは使用されるべきではないと決定すると、クライアント６２０５に対して自動的に確立される。他の実施態様では、第２トランスポート層接続は、サーバ３０に対する傍受された通信の伝送、たとえば通信を伝送する最初の試みが失敗すると、自動的に確立される。実施態様によっては、第２トランスポート層接続は、通信の１回または複数回の伝送再試行が失敗すると、あるいは予め決められた数の再試行が使い果たされた後、自動的に確立される。別の実施態様では、第２トランスポート層接続は、中間手段が、ネットワークパケット伝送または受信速度を遅延させており、待ち時間を生じているか、あるいは望ましくない状態でのトランスポート層接続の使用に影響していると決定されると確立される。一実施態様では、加速プログラム６１２０は負荷分散を実行し、中間手段をバイパスして、クライアント６２０５および／または第２中間手段に対する当該中間手段の任意の処理または動作をオフロードするために、第２トランスポート層接続を確立する。
【０７１１】
ステップ６５２５で、加速プログラム６１２０は、クライアント６２０５の傍受された通信を、第２トランスポート層接続を介してサーバ３０に伝送する。一実施態様では、加速プログラム６１２０は、傍受された通信を、サーバ３０に直接伝送する。他の実施態様では、加速プログラム６１２０は、第２アプライアンス１２５０などの第２中間手段を介して、傍受された通信を伝送する。第２トランスポート層接続を使用することによって、加速プログラム６１２０は、中間手段をバイパスし、サーバ３０とのクライアント６２０５のアプリケーション６２２０の動作を継続する。一実施態様では、クライアント６２０５のアプリケーション６２２０は、アプリケーション６２２０が、以前に、または最初に確立したトランスポート層接続を使用し続けていたかのように、サーバ６２２０との動作および通信を継続する。したがって、加速プログラム６１２０は、中間手段が加速プログラム６１２０によってバイパスされなかった場合に生じ得る何らかの通信の遮断、中断、待ち時間、遅延、あるいは操作または性能の問題を防止、回避、または迂回する。別の態様では、この技術は、中間デバイスからのアクセスに問題または中断がある場合でも、サーバ３０に対する連続アクセス、またはリモートアクセスアプリケーションをクライアント６２０５に自動的に提供する。
【０７１２】
さらに、上記のリダイレクトおよびバイパス技術は、クライアント６２０５上で負荷分散およびトラフィック管理を実行して、アプリケーション６２２０ａ〜６２２０ｎ、またはその他のコンテンツ、および機能をクライアント６２０５に提供する１つまたは複数のサーバ３０にアクセスするために使用することができる。たとえば、一実施態様では、クライアントがサーバにアクセスするために使用する中間手段またはアプライアンスは、トランスポート層接続が増加し、応答速度、性能、またはその他の動作が低下するにつれて過負荷状態になり得る。中間手段またはアプライアンスの性能の低下が決定されると、加速プログラム６１２０は、クライアントを別の中間手段またはアプライアンス、あるいはサーバにリダイレクトして、サーバに対するクライアントの端末相互間接続性における性能ボトルネックをバイパスすることができる。
【０７１３】
他の態様では、クライアント側加速技術は、クライアントのネットワークスタックのトランスポートプロトコル層に関連付けるか、あるいはこのトランスポートプロトコル層で実行し得る。加速プログラム６１２０は、１）トランスポート制御プロトコル（ＴＣＰ）バッファリング６２２８、２）ＴＣＰ接続プーリング６２２４、および３）ＴＣＰ多重化６２２６の１つまたは複数を実行するために実行可能なインストラクションを含み得る。実施態様によっては、加速プログラム６１２０が、クライアントのネットワークスタックのトランスポートプロトコル層で傍受される通信を透過的に処理するため、クライアントのＴＣＰ接続、その使用、およびクライアント６２０５のアプリケーション６２２０ａ〜６２２０ｎによる接続を通しての伝送を制御および管理することができる。図４４は、ＴＣＰバッファリング技術を実施する方法６６００の一実施態様を示し、図４５Ａ〜４５Ｂは、ＴＣＰ接続プーリング技術の一実施態様、図４６、４７、および４８はＴＣＰ多重化技術の一実施態様を示す。
【０７１４】
図４４に示す方法６６００の一実施態様を簡潔に説明すると、加速プログラム６１２０は、クライアント６２０５からサーバ３０への通信、たとえばクライアント２０５によるサーバ３０へのアクセス要求を傍受する。ステップ６１０で、加速プログラム６１２０は、受信したサーバ応答と、クライアントによって伝送された要求の生産速度との差が予め決められた閾値未満になるかどうかを決定する。ステップ６６１５で、生産および消費速度の差は、予め決められた閾値未満にならない場合、加速プログラム６１２０は、ステップ６６１７で通信をサーバ２６０に回送する。ステップ６６１５で、速度の差が、予め決められた閾値未満であれば、ステップ６６２０で、加速プログラム６１２０は、当該通信をクライアント６２０５のメモリ内に記憶する。ステップ６６２５で、加速プログラム６１２０は、速度の差が予め決められた閾値を超えて変化したかどうかを決定し、変化した場合、記憶された通信をサーバ３０に回送する。あるいは、加速プログラム６１２０は、ある時点で、ステップ６６２５における速度の差の変化が予め決められた閾値を超える時まで、通信をクライアント６２０５のメモリ内に維持する。たとえば、クライアント６２０５が、生成された応答を消費できる速度より大きい速度で、要求をサーバ３０に伝送している場合、加速プログラム６１２０は、速度の差が変化する将来のある時まで、それ以上の伝送を保持する。
【０７１５】
さらに詳細には、ステップ６６０５で、加速プログラムは、クライアント６２０５からサーバ３０への通信を傍受する。加速プログラム６１２０は、任意のある時点、およびネットワークスタック６２１０内の任意のプロトコル層における通信を傍受し得る。一実施態様では、加速プログラム６１２０は、確立されたトランスポート層接続で伝送する前に、トランスポートプロトコル層における通信を傍受する。たとえば、実施態様によっては、加速プログラム６１２０は、トランスポートドライバインターフェースを有するか、あるいはトランスポートプロトコル層にインターフェースするネットワークドライバを含む。その他の実施態様は、図４１Ａ〜４２Ｂにに関連して説明したように、第１プログラム６２２２、および第２プログラムとして加速プログラム６１２０を含むことができ、第１プログラム６２２２または加速プログラム６１２０が通信を傍受する。一実施態様では、この通信は、アプリケーション６２２０などのサーバ３０のリソースを使用するか、あるいはこのリソースにアクセスするための、クライアント６２０５による要求を含む。
【０７１６】
ステップ６６１０で、加速プログラム６１２０は、クライアント６２０５の消費速度と生産速度との差が予め決められた閾値未満になるかどうかを決定する。一実施態様では、加速プログラム６１２０は、クライアント６２０５がサーバ３０に伝送する要求の数を計算して追跡し、別の実施態様では、加速プログラム６１２０は、サーバ３０からクライアント６２０５が受信する応答の数を計算して追跡する。実施態様によっては、クライアント６２０５は、アプリケーション６２２０ごとに伝送した応答、および受信した要求を追跡する。応答および要求は、ネットワークスタック６２１０の任意のプロトコル層で追跡され得る。一実施態様では、クライアント６２０５またはアプリケーション６２２０によって伝送された要求の数は、クライアント６２０５およびサーバ３０間のトランスポート層またはトランスポート層接続に対して提示された時から計算および追跡される。同様に、別の実施態様では、クライアント６２０５またはアプリケーション６２２０がサーバ３０から受信する応答の数は、トランスポート層における受信時点から、またはクライアント６２０５およびサーバ３０間のトランスポート層接続から、および／または応答が、プロトコル層、たとえばネットワークスタック６２１０のトランスポート層上のアプリケーション層に提供された時点で計算および追跡される。
【０７１７】
実施態様によっては、加速プログラム６１２０は、クライアント６２０５およびサーバ３０間で、加速プログラム６１２０によって確立されたトランスポート層接続の送信および受信ＴＣＰバッファに関する情報およびデータにアクセスし、情報およびデータを検査、あるいは取得する。たとえば、加速プログラム６１２０は、ＴＣＰ／ＩＰバッファのデフォルトおよび最大サイズ、並びにクライアント６２０５からサーバ３０へのネットワークパケットの送信および受信間の速度の差を決定するために現在使用されているバッファ部分を決定し得る。他の実施態様では、加速プログラム６１２０は、任意のタイプおよび形式の輻輳アルゴリズムを使用して、クライアント６２０５からサーバ３０へのネットワークパケットの消費および生産の差による輻輳原因があるかどうかを決定する。別の実施態様では、加速プログラム６１２０は、トランスポート層接続により、たとえばネットワークドライバまたはＴＣＰサービスプロバイダにより使用される輻輳アルゴリズムからの情報またはデータにインターフェースするか、あるいはこれらの情報またはデータを取得する。たとえば、一実施態様では、加速プログラム６１２０は、当該接続によって使用される輻輳ウィンドウに関連する情報およびデータを決定する。
【０７１８】
予め決められた閾値は、加速プログラム６１２０の任意の適切な手段および機構によって構成、指定、画定、または識別することができる。一実施態様では、閾値は、クライアント６２０５および／またはアプリケーション６２２０の生産速度および消費速度間の相対的、絶対的、あるいはその他の割合として指定することができる。消費および／または生産の速度は、任意の期間に任意の粒度で消費される受信、および生産される伝送の数によって識別することができる。実施態様によっては、閾値は、クライアント６２０５および／またはアプリケーション６２２０の生産および消費速度間の数量差、実施態様によっては、期間の数量差として指定することができる。たとえば、閾値は、クライアント６２０５が、クライアント６２０５が消費した要求より多い６１００の要求を生産した時点として指定し得る。別の例では、閾値は、クライアント６２０５が、クライアント６２０５が同じ期間に消費する要求より多い６１０の要求を、期間ごとにサーバ３０に対して生産している時点として指定し得る。
【０７１９】
ステップ６６１５では、クライアント６２０５および／またはアプリケーション６２２０の生産および消費速度の差が、予め決められた閾値未満ではない場合、加速プログラム６１２０は、ステップ６６１７で、通信をサーバ６２６０に回送する。実施態様によっては、加速プログラムは、通信のための任意の加速技術を実行する。たとえば、通信は、プールされた多重化トランスポート層接続を介してサーバに回送することができ、さらに圧縮することができる。他の実施態様では、クライアント６２０５は、通信をアプライアンス１２５０に回送し、サーバ３０に対するクライアント６２０５の接続を提供し得る。
【０７２０】
ステップ６６１５では、クライアント６２０５および／またはアプリケーション６２２０の生産および消費速度の差が、予め決められた閾値未満である場合、加速プログラム６１２０は、ステップ６６２０で、クライアント６２０５のメモリ内に消費を記憶する。実施態様によっては、メモリは、クライアント６２０５のメモリのカーネルモード６２０２のメモリであり得、他の実施態様では、メモリは、クライアント６２０５のユーザモード６２０３にあり得る。一実施態様では、加速プログラム６１２０は、キャッシュマネジャー６２３２を介して、通信をキャッシュ内に記憶することができる。他の実施態様では、加速プログラム６１２０は、加速プログラム６１２０がアクセス可能なオブジェクト、データ構造、またはその他のデータ要素を使用して、傍受された通信をバッファ、保持、あるいは記憶し得る。一実施態様では、傍受された通信は、圧縮された状態でメモリ内に記憶することができる。別の実施態様では、加速プログラム６１２０は、傍受された通信を第１プログラム６２２２に送信し、後のある時点で伝送するためにメモリ内に記憶または保持する。
【０７２１】
ステップ６６２５で、加速プログラム６１２０は、記憶された通信をいつサーバ３０に伝送するかを決定する。一実施態様では、加速プログラム６１２０は、クライアント６２０５の生産および消費速度の差が、加速プログラム６１２０が、ステップ６６１７で、記憶された通信をサーバ３０に回送する閾値を超えるかどうかを決定するために、ステップ６６１０および６６１５を実行する。実施態様によっては、加速プログラム６１２０は、定期的または予め決められた頻度で、あるいはポーリングまたはイベントベースで、生産および消費速度の差を比較し、差が予め決められた閾値を超えると、加速プログラム６１２０は、通信をサーバ３０に回送する。他の実施態様では、加速プログラム６１２０は、傍受された通信をどの程度の期間記憶するかを決定するタイマーを設定または構成する。タイマーが満了すると、加速プログラム６１２０は、記憶された通信をサーバ３０に伝送する。別の実施態様では、加速プログラム６１２０は、傍受された通信を記憶した後に、クライアント６２０５によって消費されるサーバの応答の数を検査する。消費された応答の数は、予め決められた数を超える場合、加速プログラム６１２０は、傍受された通信をメモリバッファまたは記憶装置から解放し、サーバ３０に伝送するために通信を提示する。
【０７２２】
ステップ６６２５で、加速プログラム６１２０が、生産または消費速度が適切な方法で変化しなかったと決定した場合、加速プログラム６１２０は、適切な時間に達するまで、傍受された通信をメモリ内に保持または維持する。一実施態様では、加速プログラム６１２０は、生産および／または消費速度が変化しない場合でも、ステップ６６１７で通信をサーバに回送する。たとえば、ある期間、生産および／または消費速度が変化するのを待った後、速度が変化しない場合、加速プログラム６１２０は、通信をサーバ３０に回送する。
【０７２３】
ＴＣＰバッファリング技術は、傍受された通信または要求に関連して一般的に説明されているが、方法６６００の実施態様は、サーバ３０に対するクライアント６２０５の複数の傍受された通信に関して、その後ほぼ同時に、あるいは同時に実施することができる。さらに、別の実施態様では、方法６６００は、クライアントから複数のサーバ３０への通信に関連してクライアント上で実施し得る。たとえば、方法６６００の第１インスタンスは、クライアント６２０５および第１サーバ３０’間で実施することができ、方法６６００の第２インスタンスは、クライアント６２０５および第２サーバ３０’’間で実施することができる。たとえば、実施態様によっては、方法６６００は、各アプリケーションの個々の生産および消費速度を使用して、第１アプリケーション６２００ａに対して、さらに第２アプリケーション６２００ｂに対して実施し得る。他の実施態様では、方法６６００は、第１アプリケーション６２００ａに対して実施することができるが、第２アプリケーション６２００ｎに対しては実施することはできない。
【０７２４】
別の態様によると、クライアント側加速プログラム６１２０は、クライアントの接続を繰り返し開放および閉鎖し、これらの接続を維持し、クライアント６２０５のアプリケーションがサーバ３０に繰り返しデータアクセスすることを可能にすることによって生じるサーバ３０および／またはアプライアンス１２５０の処理負荷を減少させる。この技術は、本明細書では、一般に「接続プーリング」と呼ばれる。次に、図４５Ａを参照し、方法６７００を簡潔に説明すると、ステップ６７０２で、加速プログラム６１２０は、サーバにアクセスするためのアプリケーションの要求を傍受し、ステップ６７０４で、要求に関連するサーバのアイデンティティを決定する。ステップ６７０６で、加速プログラム６１２０は、加速プログラム６１２０がサーバ３０に対する確立されたトランスポート層接続を有し、アプリケーション６２２０が使用するように空いているかどうかを決定する。アプリケーション６２２０が使用するように空いている、サーバ３０に対するトランスポート層接続が存在しない場合、加速プログラム６２２０は、ステップ６７０８で、クライアント６２０５が使用するために、サーバ３０に対するトランスポート層接続を確立する。ステップ６７０６で、アプリケーション６２２０が使用可能なトランスポート層接続が存在する場合、ステップ６７１０で、加速プログラム６１２０は、アプリケーションの要求を翻訳し、使用可能なトランスポート層接続を介して要求を伝送または伝達する。
【０７２５】
さらに大まかに説明すると、ステップ６７１２で、加速プログラム６１２０は、サーバ３０からの要求に対する応答を受信し、ステップ６７１４で、この応答をアプリケーション６２２０に対する応答に翻訳する。ステップ６７１６で、加速プログラム６１２０は、クライアント６２０５の任意のアプリケーション６２２０ａ〜６２２０ｎにより使用されるように、トランスポート層接続を開放状態に維持するか、または保つ。クライアント６２０５上で、サーバ３０とのトランスポート層接続を開放状態に保ち、必要に応じてアプリケーションとの接続を開放および閉鎖することによって、加速プログラム６１２０は、インターネットなどのネットワーク４０上でクライアント６２０５に供給することに関連するＴＣＰ接続負荷問題からサーバを解放する。ステップ６７１８で、接続が、クライアント６２０５の１つまたは複数のアプリケーション６２２０によって、サーバ３０にアクセスする際にもはや使用されないと決定される場合、加速プログラム６１２０は、トランスポート層接続をある時点で閉鎖する。
【０７２６】
さらに詳細には、ステップ６７０２で、加速プログラム６１２０は、クライアント６２０５の任意のアプリケーション６２２０ａ〜６２２０ｎがサーバ３０にアクセスする要求を傍受する。実施態様によっては、この要求は、トランスポート層接続を介して要求を確立または伝送する前に、トランスポートプロトコル層で傍受される。他の実施態様では、要求は、トランスポート層上の任意のプロトコル層、またはトランスポート層接続で傍受される。一実施態様では、アプリケーション６２２０の要求は、サーバ３０とのトランスポート層接続を開放または確立するための要求である。実施態様によっては、加速プログラム６１２０は、要求に応答して、クライアント６２０５のアプリケーション６２２０ａ〜６２２０ｎが使用するために、トランスポート層接続のプールの第１トランスポート層接続を確立する。別の実施態様では、アプリケーション要求は、クライアント６２０５の確立されたトランスポート層接続を介してサーバにアクセスするための要求である。
【０７２７】
ステップ６７０４で、加速プログラム６１２０は、任意の適切な手段および機構による要求から、サーバ３０のアイデンティティを決定する。実施態様によっては、サーバ３０のドメイン名またはインターネットプロトコルアドレスは、要求のコンテンツによって識別されるか、あるいは参照され、たとえば要求の文字列は、サーバ３０のドメイン名を識別し得る。一実施態様では、サーバ３０のアイデンティティは、ＴＣＰパケットのヘッダ情報、たとえば宛先インターネットプロトコルアドレスおよびポート番号によって決定される。別の実施態様では、サーバ３０は、アプリケーション６２２０に関連し、加速プログラム６１２０は、データベース、またはその他の構造化情報記憶装置内の関連性を検索または問い合わせる。
【０７２８】
ステップ６７０６で、加速プログラム６１２０は、アプリケーション６２２０が使用可能か、または自由に使用できるトランスポート層接続が存在するかどうかを決定する。一実施態様では、加速プログラム６１２０は、サーバ３０とのトランスポート層接続を未だ確立していないため、アプリケーション６２２０が使用可能なトランスポート層接続は存在しない。別の実施態様では、加速プログラム６１２０は、以前に確立されたサーバ３０とのトランスポート層接続を有することができるが、別のアプリケーション６２２０が、現在アクティブに接続を使用していると決定する。以下に詳細に説明するように、加速プログラム６１２０は、確立されたトランスポート層接続が、別のアプリケーションによって使用可能であるか、あるいはサーバ３０からアプリケーション６２２０に対して受信されるメッセージ、たとえば要求に対する応答の長さに基づいて、アプリケーション６２２０ｓ〜６２２０ｎによって共用可能であるかどうか、および／またはサーバ３０およびアプリケーション６２２０間の通信が現在アイドルであるかどうかを決定する。
【０７２９】
ステップ６７０８で、加速プログラム６１２０が、トランスポート層接続がアプリケーション６２２０によって使用可能ではないと決定する場合、サーバ３０とのトランスポート層接続を確立する。実施態様によっては、ステップ６７０８で確立されたトランスポート層接続は、サーバ３０との第１トランスポート層接続であり、他の実施態様では、トランスポート層接続は、サーバ３０に対する複数のトランスポート層接続の第２トランスポート層接続である。さらに別の実施態様では、加速プログラム６１２０は、既に確立されたトランスポート層接続が、アプリケーションの要求をサーバ３０に伝達するために使用可能になるか、あるいは自由に伝達できるのを待つ。たとえば、加速プログラム６１２０は、第１アプリケーション６２２０ａが、確立された接続を介してトランザクションを間もなく完了しそうであると決定し得る。
【０７３０】
ステップ６７１０で、加速プログラム６１２０は、トランスポート層接続を介してサーバ６１０６に伝送されるアプリケーションの要求を翻訳する。実施態様によっては、加速プログラム６１２０は、接続を共用するクライアント６２０５のすべての  アプリケーション６２２０ａ〜６２２０ｎのトランスポート層接続通信に、１つのポート番号を使用する。場合により、加速プログラム６１２０は、アプリケーションごとに要求、および要求に対する未処理の応答を追跡する。したがって、加速プログラム６１２０は、どのアプリケーション６２２０が、任意の特定の時に、サーバ３０に対するトランスポート層接続を介して、ネットワークパケットを伝送および受信するかを認識する。一実施態様では、ある時点に１つのアプリケーション６２２０だけが、トランスポート層接続上で送信および受信するため、加速プログラム６２２０は、どのアプリケーション６２２０が接続を使用しているかを理解する。実施態様によっては、加速プログラム６１２０は、アプリケーション６２２０のプロセスｉｄを要求に関連付ける。他の実施態様では、加速プログラム６１２０は、ポート番号を提供してアプリケーション６２２０に関連付け、アプリケーションの割り当てられたポート番号に伝送されるＴＣＰネットワークパケット内のポート番号を修正する。別の実施態様では、ポート番号は、アプリケーション６２２０によって提供され、加速プログラム６１２０は、それに応じてＴＣＰネットワークパケット内のポート番号を変更するか、あるいは提供する。
【０７３１】
ステップ６７１２では、加速プログラム６１２０は、サーバ３０からのアプリケーションの要求に対する応答を受信する。一実施態様では、サーバ３０は、要求に対して応答しない。別の実施態様では、サーバ３０は、エラーまたは障害メッセージに応答する。実施態様によっては、サーバ３０は、複数の応答に応答する。他の実施態様では、サーバ３０は、他の実施態様では、サーバ３０は、複数のネットワークパケットまたは複数のＴＣＰセグメントを含む応答に応答する。別の実施態様では、サーバ３０は、アプリケーション６２２０に関連するか、またはアプリケーション６２２０に割り当てられるソースポート番号を識別する１つまたは複数のネットワークパケットに応答する。一実施態様では、サーバ３０は、トランスポート層接続のソースポート番号を識別し、クライアント６２０５の複数のアプリケーションに使用される１つまたは複数のネットワークパケットに応答する。
【０７３２】
ステップ６７１４で、加速プログラム６１２０は、アプリケーション６２２０に応答するように、サーバ３０からの応答を翻訳するか、あるいは処理する。一実施態様では、加速プログラム６１２０は、受信した１つまたは複数のネットワークパケットのソースポート番号を、アプリケーション６２２０のポート番号と置き換える。別の実施態様では、加速プログラム６１２０は、追跡機構を介して、現在トランスポート層接続を使用しているアプリケーション６２２０を決定し、ネットワークスタック６２１０を介して、応答をアプリケーション６２２０に渡す。一実施態様では、応答は変更されず、接続のトランスポート層上のネットワークスタック６２１０のプロトコル層を介して処理するために渡される。実施態様によっては、加速プログラム６１２０は、受信する応答の複数部分、たとえばＴＣＰセグメントを待ってから、応答を処理し、アプリケーション６２２０に回送する。一実施態様では、加速プログラム６１２０は、応答を第１プログラム６２２２に渡し、第１プログラム６２２２は、アプリケーション６２２０にインターフェースし、応答をアプリケーション６２２０に渡す。
【０７３３】
ステップ６７１６で、加速プログラム６１２０は、クライアント６２０５からサーバ３０への１つまたは複数のトランスポート層接続のプール内で、トランスポート層接続を開放状態に維持するか、または保つ。一実施態様では、加速プログラム６１２０、またはネットワークスタック６２１０のトランスポート層ドライバは、接続がさもなければアイドルの場合、たとえば送信するデータが存在しない場合、接続の他方の端部を定期的にプローブするＫｅｅｐ−Ａｌｉｖｅ機構を含む。Ｋｅｅｐ−Ａｌｉｖｅ機構は、応答を受信して、接続はアイドルであるかもしれないが、未だアクティブであることを確認するために、このメッセージを送信し得る。Ｋｅｅｐ−Ａｌｉｖｅメッセージ、および対応する応答は、任意のタイプおよび形式のフォーマット、コマンド、指令、または通信を含み得る。したがって、実施態様によっては、加速プログラム６１２０は、トランスポート層ドライバを介して、Ｋｅｅｐ−Ａｌｉｖｅメッセージをトランスポート層接続に伝送するか、あるいは伝送させる。実施態様によっては、加速プログラム６１２０は、Ｋｅｅｐ−Ａｌｉｖｅメッセージの頻度を設定し、他の実施態様では、接続を使用する  アプリケーション６２２０ａ〜６２２０ｎの挙動または活動に基づいて、Ｋｅｅｐ−Ａｌｉｖｅメッセージの頻度を変更する。
【０７３４】
実施態様によっては、加速プログラム６１２０は、任意のＲＳＴおよび／またはＦＩＮコマンド、つまりＴＣＰ／ＩＰコマンドを傍受して、トランスポート層接続を通して受信するＴＣＰ接続をリセットおよび／または終了する。一実施態様では、加速プログラム６１２０は、傍受したＲＳＴおよび／またはＦＩＮコマンドを無視するか、何の処置も取らないか、さもなければドロップするか、削除するか、またはフラッシュする。別の実施態様では、加速プログラム６１２０は、ＲＳＴおよび／またはＦＩＮコマンドを傍受し、受信するが、接続の他方の端部にメッセージを送信し、接続を開放状態に保つか、あるいは維持する。他の実施態様では、加速プログラム６１２０は、ＲＳＴおよび／またはＦＩＮコマンドの処理による、確立されたトランスポート層接続の閉鎖に応答して、新しいトランスポート層接続を確立する。
【０７３５】
他の実施態様では、加速プログラム６１２０は、クライアント６２０５の傍受された通信内に、クライアント６２０５がその旨のコマンドを送信しない限り、接続を開放状態に保つか、あるいは接続を閉鎖しないようにサーバ３０に指示するインストラクション、コマンド、または指令を挿入する。たとえば、一実施態様では、加速プログラム６１２０は、ＨＴＴＰプロトコル、たとえばプロトコルバージョン１．０のＧＥＴ要求の通信を傍受し、Ｋｅｅｐ−Ａｌｉｖｅヘッダ、たとえば「Ｃｏｎｎｅｃｔｉｏｎ：Ｋｅｅｐ  Ａｌｉｖｅ」をサーバ３０に対する通信内に挿入する。他の実施態様では、ＧＥＴ要求、またはその他のコマンドは、Ｋｅｅｐ−Ａｌｉｖｅヘッダを含み得る。これらの実施態様では、加速プログラム６１２０は、通信を傍受し、Ｋｅｅｐ−Ａｌｉｖｅヘッダをチェックしてから、通信をサーバ３０に回送する。実施態様によっては、バージョン１．１以上のＨＴＴＰが使用され、この場合、Ｋｅｅｐ−Ａｌｉｖｅ機構は、クライアント６２０５が接続を閉鎖することを要求するまで、サーバ３０が接続を開放状態に保つように黙示的に意味する。他の実施態様では、加速プログラム６１２０は、クライアント６２０５がリブートされるか、または再始動され、ネットワーク４０が使用不能になるか、あるいはクライアント６２０５がネットワーク４０から切断されるか、あるいはサーバ３０がリブートまたは再始動されるまで、サーバ３０に対してトランスポート層接続を開放状態に保つ。
【０７３６】
ステップ６７１８で、加速プログラム６１２０は、任意の所望の時点で、クライアント６２０５およびサーバ３０間の任意の１つまたは複数のトランスポート層接続を閉鎖し得る。実施態様によっては、加速プログラム６１２０は、接続を使用するクライアント６２０５上の１つまたは複数のアプリケーション６２２０ａ〜６２２０ｎが終了すると、トランスポート層接続を閉鎖する。他の実施態様では、加速プログラム６１２０は、任意のアプリケーション６２２０ａ〜６２２０ｎが接続を使用するタイムアウト時間が満了すると、トランスポート層接続を閉鎖する。たとえば、加速プログラム６１２０は、予め決められた期間後に満了するタイマーを構成、設定、または提供することができ、接続が当該期間中にアイドルであるか、またはアイドル状態を保つ場合、加速プログラム６１２０は接続を閉鎖する。実施態様によっては、サーバ３０はリブートされ、再始動されるか、あるいは接続が遮断または中断され、加速プログラム６１２０は接続を閉鎖する。実施態様によっては、加速プログラム６１２０は、サーバ３０に要求を送信し、サーバ３０から応答のすべてのデータを受信後に接続を閉鎖するためのＲＳＴおよび／またはＦＩＮコマンドを伝送するか、または伝送させる。他の実施態様では、トランスポート層接続またはトランスポート層接続のプールは、クライアント６２０５の再始動またはリブート、ネットワーク４０に対する切断、ネットワーク４０の使用不能、あるいはサーバ３０の再始動またはリブートの後に閉鎖される。
【０７３７】
実施態様によっては、サーバ３０に対する第１トランスポート層接続は開放状態に保たれ、サーバに対する第２トランスポート層接続は閉鎖され、つまり、加速プログラム６１２０は、クライアント６２０５の１つまたは複数のアプリケーション６２２０ａ〜６２２０ｎが、サーバ３０に対する接続を共用するためには、第１トランスポート層接続のみが必要であると決定するためである。他の実施態様では、加速プログラム６１２０は、任意のサーバ３０に対する１つのトランスポート層接続のプールを維持し、クライアント６２０５上のアプリケーション６２２０ａ〜６２２０ｎの要求、通信、またはトランスポート層接続の使用の増加に基づいて、特定のサーバ３０に対する第２の接続、または複数の接続を確立する。
【０７３８】
方法６７００の一実施態様は、一般に、クライアント６２０５からサーバ３０への１つまたは複数のトランスポート層接続のプールに関連して説明されているが、加速プログラム６１２０は、その後ほぼ同時に、または同時に、クライアントおよび複数のサーバ３０の各々間のトランスポート層接続のプールを確立し得る。したがって、第１アプリケーション６２２０ａおよび第２アプリケーション６２２０ｂは、おそらく、サーバ３０ａに対する１つまたは複数のトランスポート層接続の第１プールを使用しており、第３アプリケーション６２２０ｃおよび第４アプリケーション６２２０ｄは、サーバ３０ｂに対する１つまたは複数のトランスポート層接続の第２プールを使用している。さらに、方法６７００の一実施態様の各々のステップは、異なるインスタンスにおいて、異なる頻度で実行することができる。実施態様によっては、加速プログラム６１２０の複数のインスタンスは、各々のサーバ３０に対する１つまたは複数のトランスポート層接続の各々のプールを処理するために使用され得る。
【０７３９】
次に、図４５Ｂを参照すると、クライアント６２０５の２つのアプリケーション６２２０ａおよび６２２０ｂによって使用される、一実施態様ではサーバ３０に対する、あるいは別の実施態様ではアプライアンス１２５０に対するトランスポート層接続を提供する加速プログラム６１２０のフロー図が示されている。クライアント６２０５上の加速プログラム６１２０は、ステップ６７５２によって示されるように、アプリケーション６２２０によって提供されるネットワークアドレス１を使用して、クライアント６２０５およびサーバ３０、またはアプライアンス１２５０間の第１トランスポート層接続を開放する。ステップ６７５２は、ＴＣＰ／ＩＰプロトコルが多段ハンドシェークを使用して接続を開放するため、双方向ステップとして示されている。
【０７４０】
トランスポート層接続が確立されると、加速プログラム６１２０は、ステップ６７５４に示されるように、／ｓａｌｅｓ／ｆｏｒｅｃａｓｔ．ｈｔｍｌのパス名を指定するアプリケーション６２２０ａからのＧＥＴ要求を傍受する。自由トランスポート層接続は、加速プログラム６１２０およびサーバ３０、またはアプライアンス６２０５間で開放しているため、加速プログラム６１２０はトランスポート層接続を開放する。一実施態様では、加速プログラム６１２０は、ステップ６７５６に示されているように、アプリケーション６２２０ａの要求を、ネットワークアドレス２の第２ネットワークアドレスにマッピングしなければならない。たとえば、加速プログラム１２０は、ネットワークアドレスの翻訳を実行し、アプリケーション６２２０ａによて要求されるサーバ３０’に対する、あるいは要求を処理するか、または要求に応答することも可能な別のサーバ３０’’に対する宛先ＩＰアドレスおよび／または宛先ポートを修正する。別の実施態様では、加速プログラム６１２０は、アプリケーション６２２０Ｓによって受信または生成された要求をサーバ３０、またはアプライアンス１２５０に送信する。
【０７４１】
加速プログラム６１２０は、ステップ６７５８に示すように、ＧＥＴ要求を当該サーバ３０、またはアプライアンス１２５０に渡す。一実施態様では、アプライアンス１２５０は、要求をサーバ３０に回送し、さらに他の実施態様では、アプライアンス１２５０が、アプライアンス１２５０およびサーバ３０間のプールされたか、プールされて多重化されたトランスポート層接続を介して要求を回送する。実施態様によっては、サーバ３０は、ステップ６７６０に示すように、要求されたウェブページに応答する。加速プログラム６１２０は、ステップ６７６２に示すように、ウェブページをアプリケーション６２２０ａに回送する。一実施態様では、加速プログラム６１２０およびサーバ３０、またはアプライアンス１２５０間のトランスポート層接続は、ステップ６７６４に示すように閉鎖される。他の実施態様では、加速プログラム６１２０は、閉鎖要求を傍受し、トランスポート層接続を開放させる要求を無視する。ＴＣＰ／ＩＰプロトコルによると、ネットワーク接続の閉鎖は多段プロセスを含むことができる。したがって、ステップ６７６４の流れ線は、双方であるように示されている。他の実施態様では、プーリング態様の技術により、アプリケーション６２２０のために確立され、アプリケーション６２２０よって使用されるトランスポート層接続は、開放状態に保たれるか、さもなければ、同じアプリケーション６２２０ａ、または異なるアプリケーション、たとえば第２アプリケーション６２２０ｂからのさらに他のデータステップに適応するように維持される。
【０７４２】
ステップ６７６６で、加速プログラム６１２０は、第２アプリケーション６２２０ａからサーバ３０、またはアプライアンス１２５０への要求を傍受する。開放状態にあるか、および／または第２アプリケーション６２２０ｂによって使用可能な自由トランスポート層接続、たとえば第１アプリケーション６２２０ａに関してステップ６７５６で確立されたトランスポート層接続が存在する場合、加速プログラム６１２０は、この以前に確立されたトランスポート層接続を使用する。したがって、第２トランスポート層接続は、ステップ６７６６で開放する必要はない。あるいは、加速プログラム６１２０は、サーバ３０、またはアプライアンス１２５０に対する第２トランスポート層接続を確立する。ステップ６７６８で、加速プログラムは、第２アプリケーション６２２０ｂからの要求、たとえばＷｅｂ  ｐａｇｅ／ｓａｌｅｓ／ｆｏｒｅｃａｓｔ．ｈｔｍｌに対する要求を傍受し、ステップ６７７０で、その要求をサーバ３０、またはアプライアンス１２５０に伝送する。自由接続は、加速プログラム６１２０およびサーバ６１２０間で既に開放しているため、加速プログラム６１２０が、サーバ６１２０に対し、不必要にさらに他の接続を開放する処理負荷を与えることはない。ステップ６７７２で、加速プログラム６１２０は、サーバ３０からの応答を、たとえばアプライアンス１２５０を介してトランスポート層接続から傍受または受信し、この応答を第２アプリケーション６２２０ｂに回送する。ステップ６７７６で、加速プログラム１２０は、第２アプリケーション６２２０ｂからの閉鎖要求を傍受し、実施態様によっては接続を閉鎖し、他の実施態様では、要求を無視して、第１アプリケーション６２２０ａ、第２アプリケーション６２２０ｂ、さらに別のアプリケーション６２２０ｃ〜６２２０ｎからのさらに他のデータ要求に対応するように接続状態を保つ。
【０７４３】
ステップ６７７６で、加速プログラム６１２０が、サーバ３０、またはアプリケーション１２５０との接続を閉鎖する結果を生じるある程度の数の状況が存在する。たとえば、クライアント６２０５または加速プログラム６１２０は、クライアント６２０５は、アプリケーション６２２０ａおよび６２２０ｂに関して要求されたすべてのデータを検索したと決定した後、あるいはアプリケーション６２２０ａおよび６２２０ｂを終了、遮断、または中断した後にＦＩＮ（終了）コマンドを開始し得る。実施態様によっては、クライアント６２０５または加速プログラム６１２０は、類似の状態でＲＳＴ（リセット）コマンドも開始する。加速プログラム６１２０およびサーバ３０、またはアプライアンス１２５０間の接続を閉じるほかに、ＲＳＴコマンドは、サーバ側接続を良好に保つために行われるある数のハウスキーピング動作を生じる。特に、ＴＣＰプロトコルは、ＲＳＴコマンドが、ＳＥＱ（シーケンス）番号を有しているため、サーバがセグメントを認めることを保証する。しかし、ＲＳＴコマンドは、正しいＡＣＫ（肯定応答）番号を有することは保証されていない。この状況に対処するため、加速プログラム６１２０は、サーバ３０、またはアプライアンス１２５０によって送信されるデータのバイト、およびクライアント６２０５によって肯定応答されるバイトを常時把握する。クライアント６２０５が、サーバ３０によって未だすべてのデータを肯定応答されていない場合、加速プログラム６１２０は、肯定応答されたバイトを計算し、ＡＣＫをサーバ６２０５に送信する。
【０７４４】
さらに、図４５Ｂに示さないが、サーバ３０、またはアプライアンス１２５０は、それら自体とクライアント６２０５との間の接続も閉鎖することができる。サーバ３０、またはアプライアンス１２５０は、ＦＩＮコマンドをクライアント６２０５に送信するであろう。これに応じて、実施態様によっては、加速プログラム６１２０は接続を閉鎖し、さらに他の実施態様では、サーバ３０、またはアプライアンス１２５０との別の接続を再確立する。
【０７４５】
さらに、図４５Ａの方法６７００の一実施態様、および図４５Ｂの一例のフロー図は、一般に、複数のアプリケーションによって使用される１つまたは複数のトランスポート層接続のプーリングとして説明されているが、このプーリング技術は、複数のトランスポート層接続を要求または開始するとともに、これらの接続を介して要求する単一のアプリケーション６２２０に適用することができる。たとえば、ＨＴＴＰプロトコルの一実施態様では、トランスポート層接続は、アプリケーションからの各々のＨＴＴＰ要求について確立され得る。この技術を使用すると、１つまたは複数のトランスポート層接続のプールは、各々の要求に対するトランスポート層接続を開放または閉鎖することなく、アプリケーションによって使用することができる。
【０７４６】
別の態様では、同じか、または共用トランスポート層接続を介してアプリケーション要求を多重化する技術を使用することができ、たとえば図４５Ａ〜４５Ｂに関連して説明するプーリングを介して確立されるトランスポート層接続を使用することができる。実施態様によっては、確立されたトランスポート層接続の可用性が決定され、要求は、サーバ３０からアプリケーションの要求に対する応答のコンテンツが完全に受信されたかどうかを検査することによって、接続を介して複数のアプリケーションから多重化され得る。以下でさらに詳細に述べるとおり、応答のすべてのデータが受信されたかどうかを確認するために、一実施態様では、応答のコンテンツ長パラメータが使用され、別の実施態様では、応答のチャンク転送符号化ヘッダが使用される。一態様では、応答からのすべてのデータが受信されたかどうかが確認され、プールされた接続は、現在、アプリケーションによって使用されるように空いているか、および／または、図４５に示す方法６７００のステップ６７０６および６７０８のように、サーバに対する接続のプールに別のトランスポート層接続を確立するかどうかが決定される。別の実施態様では、応答のコンテンツの長さを確認する技術は、同じトランスポート層接続を介して複数のアプリケーションからの要求を多重化する技術として使用される。
【０７４７】
次に、図４６を参照すると、クライアント６２０５からサーバ３０への単一トランスポート層接続を介して、要求を多重化する方法６８００の一実施態様が示されている。簡潔に説明すると、ステップ６８０５で、加速プログラム６１２０は、クライアント６２０５およびサーバ３０間のトランスポート層接続を確立する。ステップ６８１０で、加速プログラム６１２０は、サーバ３０に対する第１アプリケーション６２２０ａの第１要求を傍受する。ステップ６８１５で、加速プログラム６１２０は、トランスポート層接続が、別のアプリケーションによって現在使用されているか、あるいはアイドルであるかどうかが決定される。ステップ６８１７で、トランスポート層接続が、アプリケーション６２２０ａによって使用可能である場合、ステップ６８２０で、加速プログラム６１２０は要求をサーバに伝送する。あるいは、ステップ６８１７で、トランスポート層接続がアプリケーション６２２０ａによって使用可能ではない場合、加速プログラム６１２０は、ステップ６８１９で、ある期間待ってからステップ６８１４に戻るか、またはアプリケーション６２２０によって使用される第２トランスポート層接続を確立する。ステップ６８２５で、加速プログラム６１２０は、サーバからのアプリケーションの要求に対する応答を受信する。ステップ６８３０で、加速プログラム６１２０は、第２アプリケーション６２２０ｂによる第２要求を傍受し、ステップ６８１５で、トランスポート層接続が、第２アプリケーション６２２０ｂにより使用可能であるかどうかの決定に着手する。実施態様によっては、加速プログラム６１２０は、ステップ６８２５で、第１要求の応答を受信する前、または応答のすべてのデータを受信する前に、ステップ６８３０で第２アプリケーション６２２０ｂの要求を傍受する。本明細書でさらに詳細に説明するように、実施態様によっては、加速プログラム６１２０は、コンテンツ長さ検査技術を使用して、トランスポート層接続がいつアイドルであるか、あるいはアプリケーションが、要求に対する応答のすべてのデータをいつ受信したかを決定する。
【０７４８】
さらに詳細には、ステップ６８０５で、加速プログラム６１２０は、クライアント６２０５およびサーバ３０間のトランスポート層接続を確立する。実施態様によっては、加速プログラム６１２０は、アプライアンス１２５０、または中間手段とのトランスポート層接続、またはアプライアンス１２５０、または中間手段を介したトランスポート層接続を確立する。一実施態様では、加速プログラム６１２０は、サーバ３０に対するトランスポート層接続のプールとしてトランスポート層接続を確立する。したがって、実施態様によっては、トランスポート層接続は、サーバ３０に対する第２または第３トランスポート層接続を含み得る。他の実施態様では、加速プログラム６１２０は、本明細書で以前に説明したように、第１プログラム６２２２を介してトランスポート層接続を確立し得る。実施態様によっては、加速プログラム６１２０は、クライアント６２０５の第１アプリケーション６２２０ａによる要求に応じて、トランスポート層接続を確立した。
【０７４９】
ステップ６８１０で、加速プログラム６１２０は、第１アプリケーション６２２０ａによる第１要求を傍受して、サーバ３０にアクセスする。実施態様によっては、要求は、トランスポート層接続を介して要求を確立または伝送する前に、トランスポートプロトコル層で傍受される。他の実施態様では、要求は、トランスポート層の上、またはトランスポート層接続の上の任意のプロトコル層で傍受される。実施態様によっては、要求は、第１プログラム６２２２によって傍受される。一実施態様では、アプリケーション６２２０ａの要求は、サーバ３０とのトランスポート層接続を開放または確立するための要求である。別の実施態様では、アプリケーション要求は、確立されたトランスポート層接続を介して、またはアプライアンス１２５０を介してサーバにアクセスするための要求である。
【０７５０】
ステップ６８１５で、加速プログラム１２０は、トランスポート層接続がアイドルであるか、第１アプリケーション６２２０ａによって使用可能であるか、あるいは第１アプリケーション６２２０ａの第１要求を伝達するかどうかを決定する。実施態様によっては、加速プログラム６１２０は、１つまたは複数のトランスポート層接続から、プール内のどのトランスポート層接続がアイドルか、あるいは第１アプリケーション６２２０ａによって使用されるように空いているかを決定する。一実施態様では、加速プログラム６１２０は、加速プログラム６１２０が、要求に応じて、または要求の直前にトランスポート層接続を確立したために、トランスポート層接続がアイドルであると決定する。実施態様によっては、加速プログラム６１２０は、アプリケーション６２２０から要求を何も受信していない場合があり、加速プログラム６１２０によって傍受および処理される第１要求として、この要求を認識する。別の実施態様では、加速プログラム６１２０は、トランスポート層接続上で伝送させた任意の要求の未処理の応答の数を追跡し、未処理の応答がない場合、加速プログラム６１２０は、トランスポート層接続は、第１アプリケーション６２２０ａによって使用可能ではないと認識する。さらに別の実施態様では加速プログラム６１２０は、トランスポート層接続が現在アイドルであると認識する。たとえば、加速プログラム６１２０は、接続を開放状態に保つために、サーバに対するＫｅｅｐ−Ａｌｉｖｅ要求を開始している場合がある。実施態様によっては、最後のトランザクションは完了したが、サーバ３０および／またはクライアント６２０５は未だ、ＲＳＴおよび／またはＦＩＮコマンドを伝送していないため、トランスポート層接続はアイドルである。
【０７５１】
実施態様によっては、加速プログラム６１２０は、応答のコンテンツの長さを確認して、サーバ３０から第１アプリケーション６２０２ａの第１要求への応答が完全か、あるいは加速プログラム６１２０が、応答に対するすべてのデータを受信したかどうかを決定し得る。上記のとおり、これらの技術は、実施態様によっては、プーリング技術のために別の接続を確立すると決定するためにも使用される。この技術に関連して、図４７および４８は、ある実施態様では応答のコンテンツ長パラメータ、別の実施態様では応答のチャンク転送符号化ヘッダを検査して、応答のすべてのデータが受信されたかどうかを決定することを説明するために使用される。図４７は、ＴＣＰセグメント６９００として呼ばれるＴＣＰパケットのＴＣＰ部分を示す。ＴＣＰセグメント６９００は、ＴＣＰヘッダ６９０２、および本文６９０４を含む。本文６９０４は、ＴＣＰパケットが、ＨＴＴＰのアプリケーション層プロトコルを搬送する実施態様では、その他のデータおよび情報の中に、ＨＴＴＰヘッダおよびメッセージを含む。実施態様によっては、コンテンツ長パラメータ６９０６は、ＨＴＴＰヘッダによって、あるいはＨＴＴＰヘッダ内に位置し、発見され、あるいは参照される。一実施態様では、加速プログラム１２０は、コンテンツ長パラメータ６９０６を使用して、応答のすべてのデータが受信されるかどうかを決定する。
【０７５２】
図４８は、ＴＣＰパケットのＴＣＰセグメントの別の実施態様を示す。トランスポート層接続上でＨＴＴＰプロトコルを使用するいくつかの実施態様では、チャンク転送符号化ヘッダが存在する場合があり、これは、チャンク転送符号化がＴＣＰセグメントまたはパケットに適用されたことを指示する。したがって、この実施態様では、メッセージの長さは、チャンク符号化によって識別される。チャンク符号化は、各々のチャンクが、チャンクサイズのフィールド内にチャンク自体の長さ指標を有する一連のチャンクとしてメッセージを転送するために、メッセージ本文を修正する。ＴＣＰセグメント７６００は、ＴＣＰヘッダ（図示しない）および本文を含む。本文は、他の情報の中に、ＨＴＴＰヘッダ７６０２Ａ〜７６０２Ｃおよびメッセージを含む。ＨＴＴＰヘッダ７６０２Ａ〜７６０２Ｃは、７つのチャンクサイズのフィールド７６０６Ａ〜７６０１Ｃ、および６つのチャンクメッセージデータ７６０４Ａ〜７６０４Ｆを含む。
【０７５３】
チャンクサイズのフィールド７６０６Ａ〜７６０６Ｇは、図４８に示すように、互いにリンクされるか、参照されるか、あるいは関連付けられる。チャンクサイズのフィールド７６０６Ａは、チャンクメッセージデータ７６０４Ａ内のメッセージの長さを指示し、チャンクサイズのフィールド７６０６Ｃは、チャンクメッセージデータ７６０４Ｃ内のメッセージの長さを指示し、以下同様である。最後のチャンクサイズのフィールド７６０６Ｇは、それ以上のチャンク、またはそれ以上のメッセージは後に続かないことを指示する長さ値ゼロを含む。別の実施態様では、加速プログラム６１２０は、チャンクサイズのフィールドを介して、クライアント６２０５が、応答に対するすべてのデータを受信したと決定する。
【０７５４】
図４７および４８は、要求に対する応答のすべてのデータが受信されたかどうかを検査する技術を一般的に示し、これらの技術は、非同期メッセージまたは通信をクライアント６２０５に送信するサーバ３０またはアプライアンス１２５０に適用することができる。さらに、これらの技術は、一般に、ＨＴＴＰプロトコルの図４７および４８に関連して説明され、これらの技術は、クライアント６２０５によって伝送または受信されるデータの長さの指示を提供した任意のプロトコル層の任意のプロトコルに使用することができる。したがって、実施態様によっては、加速プログラム６１２０は、任意のプロトコル層における部分を含むネットワークパケットの任意の部分にアクセスし、抽出し、検査し、分析し、あるいは処理して、クライアントおよびサーバまたはアプライアンス間の要求、応答、または通信に関連するすべてのデータが今までに受信されたかどうかを決定する。さらに別の実施態様では加速プログラム６１２０は、クライアント６２０５およびサーバ３０間で伝送、受信、および肯定応答されたバイト数を追跡して、アプリケーション６２２０に関するクライアント６２０５およびサーバ３０間で、あるバイトが未処理かどうかを決定する。
【０７５５】
上記のコンテンツ長さ技術を使用することによって、加速プログラム６１２０は、クライアント６２０５のアプリケーション６２２０ａ〜６２２０ｎによって以前に使用されたか、使用中の同じトランスポート層接続をサーバ３０に再使用することができる。ステップ６８１７で、加速プログラム６１２０は、トランスポート層接続が、第１要求を伝送するために使用可能であるかどうか、その場合、ステップ６８２０で、要求をサーバ３０に伝達するかどうかを決定する。あるいは、ステップ６８１９で、加速プログラム６１２０は、アプリケーションの未処理の要求に関して、すべてのデータが受信されるまで待つことができる。たとえば、加速プログラム６１２０は、タイマーをたとえば短期間に設定し、ステップ６８１５に進むことができる。実施態様によっては、加速プログラム６１２０は、クライアント６２０５のネットワークスタック６２１０のパケット処理タイマーに応じて、すべてのデータが受信されたかどうかを検査する。別の実施態様では、ステップ６８１９で、加速プログラム６１２０は、第１アプリケーション６２２０ａの第１要求を伝送するために、別のトランスポート層接続を確立する。
【０７５６】
ステップ６８２０で、加速プログラム６１２０は、どのアプリケーション６２２０が、現在、接続上に未処理の要求および応答を有するか、あるいは現在、接続を使用しているかを追跡し得る。たとえば、接続上で、一度に１つのアプリケーション６２２０のみが要求を伝送し、応答を受信することができる。したがって、加速プログラム６１２０は、どのアプリケーション６２２０が接続を使用しているかを理解する。実施態様によっては、加速プログラム６１２０は、接続を共用するクライアント６２０５のすべての  アプリケーション６２２０ａ〜６２２０ｎのトランスポート層接続通信に１つのポート番号を使用する。場合により、加速プログラム６１２０は、アプリケーションごとに、要求、および要求に対する未処理の応答を追跡する。実施態様によっては、加速プログラム６１２０は、アプリケーション６２２０のプロセスｉｄを要求と関連付ける。さらに別の実施態様では、加速プログラム６１２０は、同じネットワークパケットまたはパケット、ＴＣＰセグメントまたはセグメントで、第２アプリケーション６２２０ｂとともに、第１アプリケーション６２２０ａの要求を伝送する。他の実施態様では、加速プログラム６１２０は、１つまたは複数のＴＣＰセグメントウィンドウの一連のＴＣＰセグメントの一部と同じトランスポート層接続を介して、アプリケーション６２２０ａ〜６２２０ｎの複数の要求を伝送する。
【０７５７】
他の実施態様では、加速プログラム６１２０は、ポート番号機構および／またはスキーマを使用して、受信したどの応答またはメッセージが、どのアプリケーション６２２０ａ〜６２２０ｎに関するかを追跡し、認識する。他の実施態様では、加速プログラム６１２０は、ポート番号を提供してアプリケーション６２２０に関連付け、アプリケーションの割り当てられたポート番号に伝送されるＴＣＰネットワークパケット内のポート番号を修正する。別の実施態様では、ポート番号は、アプリケーション６２２０によって提供され、加速プログラム６１２０は、それに応じてＴＣＰネットワークパケット内のポート番号を変更するか、あるいは提供する。したがって、加速プログラム６１２０は、クライアント６２０５の複数の  アプリケーション６２２０ａ〜６２２０ｎからの要求を編成し、その結果、アプリケーション６２２０ａ〜６２２０ｎは、トランスポート層接続を同時に使用することができる。
【０７５８】
ステップ６８２５では、加速プログラム６１２０は、たとえばアプライアンス６２０５を介して、サーバ３０から第１アプリケーション６２２０ａの第１要求に対する応答を受信し、当該応答を第１アプリケーション６２２０ａに提供する。実施態様によっては、加速プログラム６１２０は、ネットワークスタック６２１０を介して、たとえば、接続のトランスポート層の上のプロトコル層によって応答を開始し、処理することを可能にして、応答を第１アプリケーション６２２０ａに提供する。別の実施態様では、第１プログラム６２２２は、応答を第１アプリケーション６２２０ａに提供する。他の実施態様では、加速プログラム６１２０は、ＡＰＩなどのプロセス間通信機構またはインターフェースを介して、応答を第１アプリケーション６２２０ａに提供し得る。実施態様によっては、加速プログラム６１２０は、図４８に示すように、応答の一部分、たとえばマルチチャンクメッセージ内の第１チャンクのみを受信する。
【０７５９】
ステップ６８３０で、加速プログラム６１２０は、第２アプリケーション６２２０ｂの要求を傍受して、サーバ３０にアクセスする。実施態様によっては、加速プログラム６１２０は、ステップ６８２５以前に、第２アプリケーション６２２０ｂの要求を傍受する。他の実施態様では、加速プログラム６１２０は、ステップ６８２５で、応答の受信時に第２アプリケーション６２２０ｂの要求を傍受する。別の実施態様では、加速プログラム６１２０は、クライアント６２０５または加速プログラム６１２０が、第１アプリケーション６２２０ａの第１要求の応答に関するすべてのデータを受信する前に、第２アプリケーション６２２０ｂの要求を傍受する。第２アプリケーション６２２０ｂの要求を傍受すると、加速プログラム６１２０は、一実施態様ではステップ６８１５に進み、トランスポート層接続を介して第２要求を多重化するか、あるいは接続のプール内の別の接続など、別のトランスポート層接続を確立するかを決定する。他の実施態様では、加速プログラム６１２０は、第１アプリケーション６２２０ａと同じ接続を介して第２アプリケーション６２２０ｂの要求を伝送するが、第１アプリケーション６２２０ａは、未処理の応答を有するか、あるいは第１要求の応答からすべてのデータを未だ受信していない。別の実施態様では、加速プログラム６１２０は、第１アプリケーション６２２０ａが応答を受信後、生成される任意のＲＳＴおよび／またはＦＩＮコマンドが、第１アプリケーション６２２０ａに関連して生成される前に、第２アプリケーション６２２０ｂの要求を伝送する。
【０７６０】
加速プログラム６１２０は、一般に、加速技術に関するクライアント側のインプリメンテーションおよび実行に関連して説明したが、加速プログラム６１２０は、アプライアンス１２５０に関連してインターフェースおよび動作し、アプライアンス側の加速技術もインプリメントおよび実行する。一実施態様では、クライアント側の加速プログラム６１２０、およびアプライアンス１２５０は、互いに関連して動作し、クライアント６２０５およびサーバ３０間の通信上で複数の加速技術を実行し得る。実施態様によっては、クライアント側の加速プログラム１２０およびアプライアンス１２５０はともに、ＴＣＰプーリングを提供して多重化し、たとえばクライアント６２０５およびサーバ３０間のカスケーディングまたは端末相互間プーリング、および多重化機構を提供する。たとえば、加速プログラム６１２０は、第１のプールされたトランスポート層接続をアプライアンス１２５０に提供することができ、次に、第２のプールされたトランスポート層接続をサーバ３０に提供する。別の例では、加速プログラム６１２０は、クライアント６２０５上の第１のプールされたトランスポート層接続を介してアプリケーション要求を多重化し、アプリケーション要求は、次に、サーバ３０に対する第２のプールされたトランスポート層接続を介して、アプライアンス１２５０によって多重化される。実施態様によっては、加速プログラム１２０は、要求をクライアント６２０５から伝送するためのスロットル機構を提供し、アプライアンス１２５０は、応答をサーバ３０からクライアント６２０５に伝送するためのスロットル機構を提供する。別の実施態様では、加速プログラム６１２０は、クライアント６２０５に対するクライアント側のキャッシングを実行し、アプライアンス１２５０は、クライアント６２０５、およびその他のクライアント６２０５のためのオブジェクト、たとえば動的に生成されたオブジェクトのキャッシングを提供する。
【０７６１】
実施態様によっては、クライアント６２０５および／またはアプライアンス上の加速技術の実行のほかに、あるいはこれに関連して、加速プログラム６１２０、およびアプライアンスは、アプライアンス１２５０を介したクライアント６２０５およびネットワーク４０アクセス間の仮想プライベートネットワーク接続、および通信を提供し得る。別の実施態様では、加速プログラム６１２０は、アプリケーション６２２０から伝達されるデータを含むことができ、アプライアンス１２５０は、このデータを受信後、圧縮されたデータを解凍することができる。逆に、アプライアンス１２５０は、プライベートデータ通信ネットワーク４０’上のサーバ３０のアプリケーション６２２０から伝達されたデータを圧縮することができ、加速プログラム６１２０は、これらのデータを受信後、圧縮されたデータを解凍することができる。また、加速プログラム６１２０、およびアプライアンス１２５０は、暗号化データ通信またはトンネリングセッション内のエンドポイントとして動作することができ、この場合、加速プログラム６１２０は、アプリケーション６２２０から伝達されたデータを暗号化し、アプライアンス１２５０は、暗号化されたデータを受信後、暗号化データを解読する。同様の方法で、アプライアンス１２５０は、プライベートデータ通信ネットワーク上でアプリケーション６２２０から伝達されたデータを暗号化し、加速プログラム６１２０は、このデータを受信後に解読することができる。
Ｄ．コンピューティング環境の提供の加速例
上記のＢ項およびＣ項に記載した構造、機能、および動作を考慮して、実施態様によっては、クライアントに対するコンピューティング環境の提供を加速し得る。たとえば、本明細書に記載されている実施態様は、アプリケーションによって処理可能なアプリケーションおよびデータファイルを中央の企業データセンターからリモートユーザのロケーション、たとえば企業の支社に提供するために使用することができる。アプライアンス、および加速プログラムは、サーバからリモートクライアントへの任意のトランスポート層ペイロード、たとえばストリーミングされたアプリケーション、およびデータファイルを加速するための端末相互間加速技術を提供する。アプリケーション提供管理システムは、コンピューティング環境をリモートユーザのデスクトップに、複数の実行方法に基づいて、およびポリシーエンジンを介して適用される任意の認証および承認ポリシーに基づいて提供するためのアプリケーション提供技術を提供する。これらの技術を使用すると、リモートユーザは、コンピューティング環境を取得し、サーバに記憶されたアプリケーションおよびデータファイルに、任意のネットワーク接続デバイスからアクセスすることができる。
【０７６２】
次に、図４９Ａを参照すると、上記の加速およびアプリケーションの提供システムおよび方法を実施するための一実施態様が示されている。簡潔に説明すると、クライアント１０は、ネットワーク４０、４０’、およびアプライアンス１２５０を介してサーバ３０と通信する。たとえば、クライアント１０は、企業のリモートオフィス、たとえば支社内に存在し、サーバ３０は、企業データセンターに存在するかもしれない。クライアント１０は、クライアントエージェント５６０、およびコンピューティング環境１５を含む。コンピューティング環境１５は、データファイルにアクセスし、データファイルを処理または使用するアプリケーションを実行するか、または動作させる。コンピューティング環境１５、アプリケーション、および／またはデータファイルは、アプライアンス１２５０および／またはサーバ３０を介して提供され得る。実施態様によっては、クライアント１０は、加速プログラム４１２０、収集エージェント４０４、およびストリーミングクライアント５６２をさらに含む。サーバ３０は、アプリケーション提供システム５００、および実施態様によってはポリシーエンジン４０６を含む。
【０７６３】
一実施態様では、アプリケーション提供システム５００は、サーバ３０上に存在するか、あるいはサーバ３０上で実行し得る。別の実施態様では、アプリケーション提供システム５００は、複数のサーバ３０〜３０’’上に存在するか、あるいは複数のサーバ３０〜３０’’上で実行し得る。実施態様によっては、アプリケーション提供システム５００は、サーバファーム内で実行し得る。一実施態様では、アプリケーション提供システム５００を実行するサーバ３０は、アプリケーションおよびデータファイルも記憶し、あるいは提供し得る。別の実施態様では、１つまたは複数のサーバ３０の第１の集合は、アプリケーション提供システム５００を実行することができ、別のサーバ３０’は、アプリケーションおよびデータファイルを記憶するか、あるいは提供することができる。実施態様によっては、アプリケーション提供システム５００、アプリケーションおよびデータファイルの各々は、異なるサーバ上に存在するか、または位置してよい。一実施態様では、アプリケーション提供システム５００は、ポリシーエンジン４０６も含む。別の実施態様では、ポリシーエンジン４０６は、アプリケーション提供システム５００から別個に実行する。実施態様によっては、ポリシーエンジン４０６は、アプリケーション提供システム５００と同じサーバ３０上にある。他の実施態様では、ポリシーエンジン４０６は、アプライアンス１２５０上で実行する。さらに別の実施態様ではアプリケーション提供システム５００および／またはポリシーエンジン４０６の任意の部分は、アプライアンス１２５０、または複数のアプライアンス上に存在し、実行し、または記憶されるか、あるいはこれらのアプライアンスに分配される。
【０７６４】
実施態様によっては、クライアントエージェント５６０は、上記のとおり、任意のストリーミングクライアント５６２、収集エージェント４０４、および／または加速プログラム６１２０を含む。一実施態様では、クライアントエージェント５６０、ストリーミングクライアント５６２、収集エージェント４０４、および／または加速プログラム６１２０は、各々の機能、論理、および動作を提供する単独のプログラム、または実行可能なインストラクションの集合を形成するか、あるいはこれらに組み込まれる。他の実施態様では、各々のストリーミングクライアント５６２、収集エージェント４０４、および加速プログラム６１２０は、クライアントエージェント５６０から別個に実行する。一実施態様では、クライアント１０は、クライアントエージェント５６０を実行する。別の実施態様では、クライアント１０は、ストリーミングクライアント５６２を実行する。実施態様によっては、クライアント１０は、収集エージェント４０４を実行する。一実施態様では、クライアント１０は、加速プログラム６１２０を実行する。実施態様によっては、クライアント１０は、ストリーミングクライアント５６２、収集エージェント４０４、または加速プログラム６１２０の１つまたは複数とともに、クライアントエージェント５６０を実行する。他の実施態様では、クライアント１０は、ストリーミングクライアント５６２および加速プログラム６１２０を実行する。一実施態様では、クライアント１０は、加速プログラム６１２０および収集エージェント４０４を実行する。
【０７６５】
実施態様によっては、クライアント１０は、クライアントエージェント５６０、ストリーミングクライアント５６２、および／または収集エージェント４０４をサーバ３０から取得する。他の実施態様では、クライアント１０は、クライアントエージェント５６０、ストリーミングクライアント５６２、および／または収集エージェント４０４をアプライアンス１２５０から取得する。一実施態様では、任意のクライアントエージェント５６０、ストリーミングクライアント５６２、および／または収集エージェント４０４は、アプライアンス１２５０上に記憶し得る。たとえば、実施態様によっては、クライアントエージェント５６０、ストリーミングクライアント５６２、および／または収集エージェント４０４は、アプライアンス１２５０内にキャッシュされ得る。他の実施態様では、アプライアンス１２５０によって、アプリケーションが加速可能であると決定されると、アプライアンス１２５０は、クライアントエージェント５６０、ストリーミングクライアント５６２、加速プログラム６１２０、および／または収集エージェント４０４をクライアント１０に伝送し得る。実施態様によっては、クライアント１０は、任意のクライアントエージェント５６０、ストリーミングクライアント５６２、加速プログラム６１２０、および／または収集エージェント４０４を自動的にインストールおよび実行し得る。さらに別の実施態様では、任意のクライアントエージェント５６０、ストリーミングクライアント５６２、加速プログラム６１２０、および／または収集エージェント４０４は、クライアントのユーザまたはアプリケーションに対して、あるいはクライアントのネットワークスタックの任意の部分に対して透過的に実行することができる。
【０７６６】
実施態様によっては、サーバ３０またはネットワーク４０’に対し、クライアント１０のためのＶＰＮまたはＳＳＬ  ＶＰＮ接続を確立する。他の実施態様では、アプライアンス１２５０は、プロキシとして動作し、サーバまたは負荷分散装置にアクセスして、１つまたは複数のサーバ３０に対するアクセスを提供する。一実施態様では、アプライアンス１２５０、および／または加速プログラム６１２０は、クライアント１０に対するストリーミングクライアント５６２、収集エージェント４０４、および／またはクライアントエージェント５６０の提供を加速する。一実施態様では、アプライアンス１２５０は、クライアント１０に対する加速プログラム６１２０の提供を加速する。他の実施態様では、アプライアンス１２５０、および／または加速プログラム６１２０は、クライアント１０に対するコンピューティング環境１５、アプリケーション、および／またはデータファイルの提供を加速する。一実施態様では、クライアント１０は、コンピューティング環境１５を有し、アプライアンス１２５０、および／または加速プログラム６１２０は、アプリケーション、および／またはデータファイルの提供を加速する。一実施態様では、アプライアンス１２５０、および／または加速プログラム６１２０は、アプリケーションの提供を加速する。別の実施態様では、アプライアンス１２５０、および／または加速プログラム６１２０は、データファイルの提供を加速する。さらに別の実施態様では、アプライアンス１２５０、および／または加速プログラム６１２０は、コンピューティング環境１５、たとえば、本明細書で以前に説明した実行環境、または仮想化実行環境の提供を加速する。
【０７６７】
一実施態様では、アプライアンス１２５０は、収集エージェント４０４から収集された情報を使用して、コンピューティング環境１５、アプリケーション、および／またはデータファイルを加速し得るかどうかを決定する。実施態様によっては、アプリケーション１２５０のポリシーエンジンは、ポリシーエンジン４０６を含む。他の実施態様では、アプライアンス１２５０は、ポリシーエンジン４０６と通信またはインターフェースして、リモートユーザまたはリモートクライアント１０の認証および／または承認を決定し、サーバ３０からコンピューティング環境１５、アプリケーション、および／またはデータファイルにアクセスする。別の実施態様では、アプライアンス１２５０は、ポリシーエンジン４０６と通信またはインターフェースして、リモートユーザまたはリモートクライアント１０の認証、および／または承認を決定し、アプリケーション提供システム５００が、１つまたは複数のコンピューティング環境１５、アプリケーション、および／またはデータファイルを提供するようにする。さらに別の実施態様では、アプライアンス１２５０は、リモートユーザまたはリモートクライアント１０のポリシーエンジンの４０４認証および／または承認に基づいて、ＶＰＮまたはＳＳＬ  ＶＰＮを確立する。一実施態様では、アプライアンス１２５０は、ポリシーエンジン４０６のポリシーに基づいて、ネットワークトラフィックおよび通信セッションのフローを制御する。たとえば、アプライアンス１２５０は、ポリシーエンジン４０６に基づいて、コンピューティング環境１５、アプリケーション、またはデータファイルに対するアクセスを制御し得る。
【０７６８】
次に、図４９Ｂを参照すると、リモートロケーションにおけるクライアントのリモートユーザに対するコンピューティング環境の提供を加速する方法の一実施態様が示されている。方法８０００を簡潔に説明すると、ステップ８００５で、サーバ３０は、クライアント１０上でアプリケーションを実行する要求を受信する。ステップ８０１０で、サーバ３０は、クライアント１０に対し、実行用のアプリケーションをストリーミングする。ステップ８０１５で、アプライアンス１２５０、および／またはクライアント側加速プログラム６１２０は、クライアント１０に対するアプリケーションの伝送または提供を加速する。ステップ８０２０で、クライアント１０またはアプリケーションは、アプリケーションが使用するために、サーバ３０からデータファイルを要求する。ステップ８０２５で、サーバ３０、および／またはアプライアンス１２５０は、データファイルをクライアント１０に伝送する。ステップ８０３０で、アプライアンス１２５０、および／またはクライアント側加速プログラム６１２０は、クライアント１０に対するデータファイルの伝送または提供を加速する。
【０７６９】
さらに詳細には、ステップ８００５で、サーバ３０は、クライアント１０上でアプリケーションを実行する要求を受信する。実施態様によっては、クライアント１０のユーザが要求を行う。他の実施態様では、アプリケーション、オペレーティングシステム、またはコンピューティング環境１５は、要求を伝送する。別の実施態様では、アプライアンス１２５０は、クライアント１０からの要求を傍受し、その要求をサーバ３０に回送する。一実施態様では、アプライアンス１２５０は、ユーザまたはクライアント１０の認証および／または承認に基づいて、要求をサーバ３０に回送する。別の実施態様では、アプライアンス１２５０は、収集エージェント４０４によって提供される情報に基づいて、要求をサーバ３０に回送する。一実施態様では、要求は、複数の実行方法のうちの１つの方法でアプリケーションを実行する要求を含む。たとえば、クライアント１０のユーザは、サーバからのアプリケーションストリームとして、ローカルにインストールされ、実行されるアプリケーションとして、またはサーバ３０上で実行するサーバベースのアプリケーションとしてアプリケーションを実行し、クライアント１０に対してリモートに表示することを要求し得る。実施態様によっては、要求は、ファイルタイプの関連性に基づく。たとえば、ユーザは、ファイルを読み込むか、またはファイルにアクセスするために使用されるアプリケーションに関連するファイルを選択し得る。
【０７７０】
ステップ８０１０で、サーバ３０は、ステップ８００５の要求に応答して、実行用のアプリケーションをクライアント１０に伝送する。実施態様によっては、サーバ３０は、アプリケーションをクライアント１０にストリーミングする。たとえば、ある実施態様におけるアプリケーションをストリーミングすることによって、アプリケーションは、インストールすることなく、クライアント１０上で動作する。他の実施態様では、サーバ３０は、クライアント１０に対し、ローカルにインストールおよび実行するためのアプリケーションを伝送する。たとえば、Ｃ項の加速プログラム６１２０に関連して説明した自動インストールおよび実行技術を使用すると、クライアント１０は、受信後に、自動的にアプリケーションをインストールおよび実行し得る。別の実施態様では、サーバ３０は、クライアントの代わりにサーバ上でアプリケーションを実行し、リモートディスプレーまたはプレゼンテーション層プロトコルを介して、クライアント１０にディスプレーを伝送する。さらに別の実施態様では、アプライアンス１２５０は、アプリケーションをクライアント１０にストリーミングするか、またはアプリケーションをクライアント１０に伝送して、インストールおよび／または実行する。実施態様によっては、アプライアンス１２５０、および／またはサーバ３０は、アプリケーションを含むコンピューティング環境１５を伝送する。他の実施態様では、アプライアンス１２５０、および／またはサーバ３０は、要求に応じてコンピューティング環境１５を伝送する。
【０７７１】
ステップ８０１５で、アプライアンス１２５０、および／または加速プログラム６１２０は、クライアント１０に対する実行用のアプリケーションの提供を加速する。一実施態様では、アプライアンス１２５０は、上記のＣ項で説明した複数の加速技術の１つまたは複数を実行または適用する。別の実施態様では、加速プログラム６１２０は、やはり上記のＣ項で説明した複数のクライアント側の加速技術の１つまたは複数を実行または適用する。実施態様によっては、加速プログラム１２５０、およびアプライアンス６１２０は、クライアント１０およびアプライアンス１２５０の両方ので、複数の加速技術を実行するために、一緒に、あるいは互いに関連して動作する。たとえば、加速プログラム６１２０は、１つまたは複数の加速技術の第１の集合を実行し、アプライアンス１２５０は、１つまたは複数の加速技術の第２の集合を実行する。一実施態様では、加速プログラム１２５０、およびアプライアンス６１２０は、同じ加速技術を実行する。別の実施態様では、加速プログラム１２５０、およびアプライアンス６１２０は、異なる加速技術を実行する。
【０７７２】
一実施態様では、アプライアンス１２５０、および／または加速プログラム６１２０は、クライアント１０およびサーバ３０間のトランスポート層接続を介して伝達される任意のペイロードを加速する。実施態様によっては、サーバ３０は、アプリケーションを１つまたは複数のデータファイルとして、ＴＣＰ／ＩＰパケットのペイロードなどのトランスポート層接続を介してストリーミングする。他の実施態様では、サーバ３０は、アプリケーション層プロトコルまたはストリーミングプロトコルを介して、トランスポート層接続を通してアプリケーションをストリーミングする。別の実施態様では、サーバ３０は、ＩＣＡまたはＲＤＰプロトコルを介し、トランスポート層接続を通してディスプレーの出力を伝送する。これらの任意の実施態様で、アプライアンス１２５０、および／または加速プログラム６１２０は、トランスポート層パケットのペイロードを介して、アプリケーションの提供を加速する。
【０７７３】
ステップ８０２０で、クライアント１０は、アプリケーションまたはコンピューティング環境１５で使用されるデータファイルに対する要求を伝送する。実施態様によっては、データファイルに対する要求は、ステップ８００５で、アプリケーションを実行する要求とともに伝送される。一実施態様では、アプリケーションを実行する要求は、データファイルに対する要求を含む。他の実施態様では、アプリケーションまたはコンピューティング環境は、アプリケーションまたはコンピューティング環境の任意の機能、動作、または論理を実行する途中で、データファイルを要求する。たとえば、アプリケーションまたはコンピューティング環境１５は、任意のマクロ、スクリプト、構成データ、プロファイル、テンプレート、または規則をサーバ３０から要求し得る。実施態様によっては、アプリケーションは、アプリケーションのバックグラウンドプロセスまたはタスクとして、データファイルを要求する。一実施態様では、アプリケーションまたはコンピューティング環境１５のユーザは、アプリケーションまたはコンピューティング環境でファイルを読み取り、ファイルにアクセスし、あるいはファイルを処理するためのデータファイルを要求する。たとえば、ユーザは、アプリケーションを介して編集するファイルを開くこと、たとえば、ワード処理アプリケーションを介して編集するドキュメントを開くことができる。実施態様によっては、ユーザは、データファイルを要求するために、ファイルをコンピューティング環境のアプリケーション内にドラッグアンドドロップする。他の実施態様では、ユーザは、ファイルおよびディレクトリインターフェース、たとえばＷｉｎｄｏｗｓ（登録商標）オペレーティングシステム内のファイルエクスプローラを介して、ネットワーク化またはリモート記憶システムの記憶装置、たとえば中央サーバのネットワークドライバにデータファイルを要求し得る。
【０７７４】
ステップ８０２５で、サーバ３０またはアプライアンス１２５０は、要求されたデータファイルをクライアント１０に伝送する。実施態様によっては、サーバ３０またはアプライアンス１２５０は、ステップ８０２０の要求に応じて、データファイルをクライアント１０に伝送する。他の実施態様では、サーバ３０またはアプライアンス１２５０は、クライアント１０からの要求がなくても、データファイルをクライアント１０に伝送する。たとえば、サーバ３０は、データファイルの更新をクライアント１０に「プッシュ」し得る。一実施態様では、サーバ３０は、要求されたデータファイルをクライアント１０に伝送する。別の実施態様では、アプライアンス１２５０は、要求されたデータをクライアント１０に伝送する。たとえば、一実施態様では、アプライアンス１２５０は、データファイルに対する要求を傍受し、データファイルに対するアプライアンス１２５０のキャッシュを検査し、キャッシュされたデータファイルをクライアント１０に伝送する。さらに別の実施態様では、加速プログラム６１２０は、クライアント１０におけるデータファイルの要求を傍受し、加速プログラム６１２０のキャッシュを介して、データファイルをクライアント１０に提供する。実施態様によっては、アプライアンス１２５０またはサーバ３０は、ストリーミングプロトコル、またはストリームを介して、データファイルを伝送する。他の実施態様では、アプライアンス１２５０またはサーバ３０は、任意のタイプおよび形式のキャッシングプロトコルを介して、データファイルを伝送する。
【０７７５】
ステップ８０３０で、アプライアンス１２５０、および／または加速プログラム６１２０は、クライアント１０に対するデータファイルの提供または伝送を加速する。実施態様によっては、データファイルは、任意のタイプおよび形式のプロトコル、たとえばトランスポート層プロトコル上のアプリケーション層プロトコルを介して伝送され得る。一実施態様では、アプライアンス１２５０は、データファイルの伝送を加速する。別の実施態様では、加速プログラム６１２０は、データファイルの伝送を加速する。実施態様によっては、加速プログラム１２５０に関連するプライアンス１２５０は、データファイルの伝送を加速する。本明細書で説明するとおり、アプライアンス１２５０、および／または加速プログラム６１２０は、データファイルの伝送を加速するために、クライアント１０およびアプライアンス３０上で、１つまたは複数の加速技術を実行し得る。実施態様によっては、アプライアンス１２５０、および／または加速プログラム６１２０は、１つまたは複数のデータファイルをクライアント１０またはアプライアンス１２５０上にキャッシュし、アプリケーションまたはコンピューティング環境１５によって使用され得る。
【０７７６】
代表的な例
一例の実施態様として、ユーザは、ローカルマシン１０上で作業して、支社に位置し得る。ユーザは、ＭＩＣＲＯＳＯＦＴ  Ｗｏｒｄなどのワード処理アプリケーションを使用して、ともに本社に位置するリモートマシン３０上に存在する企業文書を編集することを望むかもしれない。この場合、ユーザは、リモートマシン３０によってホストされる企業のウェブサイトにウェブブラウザをナビゲートし得る。ユーザが、リモートマシン３０によって認証されると、リモートマシン３０は、図３Ａおよび３Ｂに関して本明細書で説明され、ローカルマシン１０がアクセスするアプリケーションプログラムを表すグラフィカルアイコンが表示されるＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄウィンドウを含むＨＴＭＬページを作成し、ローカルマシン１０に伝送することができる。ローカルマシン１０のユーザは、アイコンをクリックすることによって、アプリケーションの実行を呼び出すことができる。その結果、図４Ａ〜４Ｄに記載したように、ポリシーエンジンは、ローカルマシン１０がワード処理アプリケーションにアクセスするかどうか、どのようにアクセスするかを決定し得る。アプリケーションは、次に、図２０〜２１に記載した技術を使用して、ローカルにインストールおよび実行され得る。したがって、ユーザは、アプリケーションを使用してリモートマシン３０上のドキュメントを選択し、編集し得る。アプライアンス１２５０は、次に、本明細書に記載する任意の技術を、たとえばＴＣＰ多重化を使用して、ローカルマシン１０に対するファイルの提供を加速し得る。
【０７７７】
別の例として、第２のユーザは、ローカルマシン１０上で作業して、支社に位置し得る。ユーザは、ユーザの企業アカウントを通して、添付ファイルを含むｅメールにアクセスすることを望むかもしれない。ｅメールアプリケーション、およびｅメールデータファイルは、本社に存在し得る。ユーザが、ｅメールアプリケーションにアクセスすることを要求すると、図４Ａ〜４Ｄに記載したポリシーエンジンは、本明細書に記載したストリーミング技術を使用して、ｅメールアプリケーションをユーザにストリーミングすると決定し得る。ポリシーエンジンは、ローカルマシン１０に関して本明細書で説明したように、加速プログラムをインストールすることも決定し得る。アプリケーションストリーミングは、本明細書に記載する技術、たとえば動的キャッシングを使用して加速され得る。ローカルにインストールした後、ユーザは、次に閲覧のため、ｅメール、および添付ファイルを選択し得る。アプライアンス１２５０は、本明細書に記載したように、ＴＣＰプーリングなどの加速技術を使用することによって、ファイルの提供を加速し得る。アプライアンスは、その後の要求を加速するために、リモートマシンに提供されるデータファイルの一部または全部もキャッシュし得る。キャッシングは、実行可能プログラムに関連して、アプライアンス１２５０またはローカルマシン１０上の何れかで行うことができる。
【０７７８】
第３の例として、支社に位置するユーザは、ＭＩＣＲＯＳＯＦＴ  Ｅｘｃｅｌなどの表計算プログラムにアクセスして、表計算を更新することを望むかもしれない。ユーザは、ローカルマシン１０を使用して、本社にあるリモートマシン３０に対するＳＳＬ接続を確立して、図３Ａおよび３Ｂに記載するようなＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄから表計算アプリケーションを選択することができる。図４Ｄに記載したような収集エージェントは、次に、ローカルマシンに関する情報を収集し、表計算アプリケーションをローカルマシン１０にストリーミングすることができるかどうかを決定し得る。表計算アプリケーションは、次に、ＳＳＬ接続を介してローカルマシン１０にストリーミングされ得る。ＳＳＬ接続は、本明細書に記載するようにＳＳＬまたはＴＣＰ接続プーリング、および多重化を提供するアプライアンス１２５０によって加速され得る。アプリケーションストリーミングは、本明細書に記載する任意の動的キャッシングを提供するアプライアンス１２５０によって加速することもできる。ユーザは、次に、表計算アプリケーション内からファイルを選択し、編集することができる。ローカルマシン１０は、ファイルに対する要求をリモートマシンに伝送し得る。アプライアンス１２５０は、次に、本明細書に記載する圧縮技術を使用して、ユーザに対するファイルの提供を加速することができる。
【０７７９】
上記で一般に、アプリケーション提供システム、およびクライアントに対するコンピューティング環境の提供を加速するアプライアンスに関して説明したが、アプリケーション提供システム、およびアプライアンスは、クライアントに対する複数のコンピューティング環境、アプリケーション、および／またはデータファイルの提供を加速することができる。たとえば、アプリケーション提供システム、およびアプライアンスは、あるタイプのオペレーティングシステムに関連する第１コンピューティング環境、および第２のタイプのオペレーティングシステムに関連する第２コンピューティング環境のクライアントに対する提供を加速することができる。さらに、アプリケーション提供システム、およびアプライアンスは、複数のクライアントに対するコンピューティング環境、アプリケーション、および／またはデータファイルの提供を加速することができる。さらに、上記で一般的に、リモートユーザまたはリモートクライアントに対するコンピューティング環境の提供を加速するアプリケーション提供システムおよびアプライアンスに関して説明したが、アプリケーション提供システム、およびアプライアンスは、ローカル、リモートなどの任意のクライアント、たとえばサーバのＬＡＮ上のクライアントに対するコンピューティング環境、アプリケーション、および／またはデータファイルの提供を加速することができる。
【０７８０】
さらに、上記で一般に、クライアントおよびアプリケーション提供システム間のアプライアンスに関して説明したが、１つまたは複数のクライアントおよび１つまたは複数のサーバ間に、複数のアプライアンスを使用し得る。実施態様によっては、第１アプライアンスは、クライアントのネットワーク上に存在し、第２アプライアンスはサーバのネットワーク上に存在した。一実施態様では、第１アプライアンスおよび第２アプライアンスは、本明細書に記載する動作を実行する際に互いに通信する。たとえば、第１アプライアンスおよび第２アプライアンスは、任意のノード間、高性能の、あるいはアプライアンス間通信プロトコルを介して通信し得る。さらに、複数のアプリケーション提供システムは、１つのアプライアンスまたは複数のアプライアンスに関連して使用され得る。アプリケーション提供システム、およびアプライアンスは、多様なネットワーク環境およびインフラストラクチャアーキテクチャ内で展開することができる。
【０７８１】
これらの実施態様は、１つまたは複数の製品上、あるいは製品内に埋め込まれる１つまたは複数のコンピュータ可読プログラムとして提供することができる。製品は、フロッピー（登録商標）ディスク、ハードディスク、コンパクトディスク、デジタル多目的ディスク、フラッシュメモリカード、ＰＲＯＭ、ＲＡＭ、ＲＯＭ、または磁気テープでよい。一般に、コンピュータ可読プログラムは、任意のプログラミング言語でインプリメントすることができる。使用可能な言語のいくつかの例としては、Ｃ、Ｃ＋＋、Ｃ＃、またはＪＡＶＡ（登録商標）が挙げられる。ソフトウェアプログラムは、１つまたは複数の製品上、または製品内にオブジェクトコードとして記憶することができる。
【図面の簡単な説明】
【０７８２】
【図１Ａ】図１Ａは、ネットワーク環境を表すブロック図である。
【図１Ｂ】図１Ｂは、ネットワーク環境内のリモートのコンピューティング環境の一実施態様を示すブロック図である。
【図１Ｃ】図１Ｃは、記載されている実施態様に関連して有用なコンピュータの実施態様を示すブロック図である。
【図１Ｄ】図１Ｄは、記載されている実施態様に関連して有用なコンピュータの実施態様を示すブロック図である。
【図１Ｅ】図１Ｅは、コンピューティング環境をクライアントに提供するのに適する環境を示すブロック図である。
【図１Ｆ】図１Ｆは、ウェブサービスディレクトリのＧＵＩの発行を介して、ローカルマシンが利用可能な複数のアプリケーションプログラムを提供するためのシステムの一実施態様を示すブロック図である。
【図２】図２は、アプリケーションプログラムの実行方法を選択するために行われるステップの一実施態様を示すフロー図である。
【図３Ａ】図３Ａは、ワールドワイドウェブを介してＰｒｏｇｒａｍ  Ｎｅｉｇｈｂｏｒｈｏｏｄアプリケーションの実行を開始するローカルマシンの一実施態様を示す分解図である。
【図３Ｂ】図３Ｂは、ウェブサービスディレクトリを使用して数えられたアプリケーションプログラムにアクセスするために、ローカルマシンによって行われるステップの一実施態様を示すフロー図である。
【図４Ａ】図４Ａは、ローカルマシンのアプリケーションプログラムにポリシーに基づくアクセスを提供するネットワーク環境の一実施態様のブロック図である。
【図４Ｂ】図４Ｂは、ポリシーエンジンのより詳細な実施態様を示すブロック図である。
【図４Ｃ】図４Ｃは、ローカルマシンに関して受信した情報に基づいてアクセス制御を決定するために、ポリシーエンジンが行うステップの一実施態様を示すフロー図である。
【図４Ｄ】図４Ｄは、複数のアプリケーションセッションに対する承認リモートアクセスが提供されるコンピュータネットワークの一実施態様を示すブロック図である。
【図４Ｅ】図４Ｅは、ローカルマシンを関連するアプリケーションセッションに接続するために、セッションサーバが行うステップの一実施態様を示すブロック図である。
【図５】図５は、クライアントノードを関連するアプリケーションセッションに接続するために、セッションサーバが行うステップの一実施態様を示すフロー図である。
【図６】図６は、アプリケーション一覧を提供する管理サービスを含むリモートマシンの一実施態様を示すブロック図である。
【図７】図７は、アプリケーションプログラムを含む複数のファイルにアクセスするために行われるステップの一実施態様を示すフロー図である。
【図８Ａ】図８Ａは、アプリケーションの互換性およびアプリケーションの適合性の問題が減少したオペレーティングシステムの制御下で動作するコンピュータの一実施態様を示すブロック図である。
【図８Ｂ】図８Ｂは、アプリケーションの互換性およびアプリケーションの適合性の問題が減少したマルチユーザコンピュータの一実施態様を示すブロック図である。
【図８Ｃ】図８Ｃは、プロセスを隔離スコープと関連付けるための方法で行われるステップの一実施態様を示すフロー図である。
【図９】図９は、アプリケーションプログラムを実行するための方法で行われるステップの一実施態様を示すフロー図である。
【図１０】図１０は、リモートマシン上に存在する複数のアプリケーションファイルの一実施態様を示すフロー図である。
【図１１】図１１は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するための方法で行われるステップの一実施態様を示すフロー図である。
【図１２】図１２は、リモートに記憶されたファイルに関連するファイルのメタデータに対する要求にローカルに応答するためのシステムの一実施態様を示すブロック図である。
【図１３】図１３は、ローカルに実行するアプリケーションプログラムに関連するディレクトリ構造内のリモートファイルにアクセスするための方法で行われるステップの一実施態様を示すフロー図である。
【図１４】図１４は、アプリケーションに関連するディレクトリ構造内のファイルにアクセスするためのシステムの一実施態様を示すブロック図である。
【図１５】図１５は、ライセンス管理サブシステムを含むリモートマシンの一実施態様のブロック図である。
【図１６】図１６は、リモートマシン上の管理サービス内の構成要素の一実施態様を示すブロック図である。
【図１７】図１７は、リモートマシンからライセンスを要求し、維持するために行われるステップの一実施態様を示すフロー図である。
【図１８】図１８は、管理サービスによって監視されるセッションと関連し得る状態の一実施態様を示すブロック図である。
【図１９】図１９は、各々のターゲットが、アプリケーションを含む複数のアプリケーションファイルを含む２つのターゲットを含むパッケージの一実施態様を示すブロック図である。
【図２０】図２０は、オペレーティングシステムをリブートすることなくアプリケーションプログラムをインストールするために、ポリシーに基づいて行われるステップの一実施態様を示すフロー図である。
【図２１】図２１は、オペレーティングシステムをリブートすることなく、アプリケーションプログラムをインストールするため、ポリシーに基づく方法で行われるステップの一実施態様を示すフロー図である。
【図２２】図２２は、ローカルマシン上で実行されるスクリプトの一覧の一実施態様を示す。
【図２３】図２３は、隔離環境内でインストーラプログラムを実行するパッケージング機構を含むシステムの一実施態様を示すブロック図である。
【図２４】図２４は、インストーラプログラムの実行が、オペレーティングシステムのリブートを要求する環境で行われるステップの一実施態様を示すフローチャートである。
【図２５】図２５は、パッケージング機構がアプリケーションプログラムをインストールするリモートマシンの一実施態様を示すブロック図である。
【図２６】図２６は、アプリケーションをアプリケーション隔離環境内にインストールするために行われるステップの一実施態様を示すフロー図である。
【図２７】図２７は、統合キャッシングを実行するアプライアンスのアーキテクチャの一実施態様を示すブロック図である。
【図２８Ａ】図２８Ａは、デバイスの動作をパケット処理およびパケット処理タイマーと統合する方法の一実施態様で行われるステップのフロー図である。
【図２８Ｂ】図２８Ｂは、図３Ａの無効化粒度技術を実践する方法の一実施態様で行われるステップのフロー図である。
【図２９Ａ】図２９Ａは、古いオブジェクトを無効化する無効化コマンドを使用する方法の一実施態様で行われるステップのフロー図である。
【図２９Ｂ】図２９Ｂは、オブジェクト群の無効化を合併する方法の一実施態様で行われるステップのフロー図である。
【図２９Ｃ】図２９Ｃは、クライアントの要求が、オブジェクト決定要因に対して構文解析される方法の一実施態様で行われるステップのフロー図である。
【図２９Ｄ】図２９Ｄは、オブジェクト決定要因を使用して、オブジェクト群の無効化を合併する方法の一実施態様で行われるステップのフロー図である。
【図３０】図３０は、接続プーリングの方法の一実施態様で行われるステップのフローチャートである。
【図３１】図３１は、クライアントおよびサーバの要求を翻訳する方法の一実施態様で行われるステップのフローチャートである。
【図３２】図３２は、コンテンツ長パラメータの一実施態様を示す。
【図３３】図３３は、チャンクサイズのフィールドの一実施態様を示す。
【図３４】図３４は、接続プーリングの一実施態様を示すフロー図である。
【図３５】図３５は、コンテンツ長パラメータを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示す詳細なフロー図である。
【図３６】図３６は、コンテンツ長パラメータを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示すフローチャートである。
【図３７】図３７は、チャンクサイズのフィールドを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示す詳細なフロー図である。
【図３８】図３８は、チャンクサイズのフィールドを使用して、クライアントおよびサーバ間の接続プーリングの効率を増加するために行われるステップの一実施態様を示すフローチャートである。
【図３９】図３９は、統合キャッシングの機能を提供するために行われるステップの一実施態様のフローチャートである。
【図４０Ａ】図４０Ａは、クライアント側の加速プログラムの一実施態様のブロック図である。
【図４０Ｂ】図４０Ｂは、クライアント側に加速プログラムを提供するためのアプライアンスの一実施態様のブロック図である。
【図４１Ａ】図４１Ａは、クライアント側に加速プログラムを動的に提供して、自動的にインストールおよび実行するための方法の一実施態様のステップ図である。
【図４１Ｂ】図４１Ｂは、アプリケーションを加速することができるかどうかを決定する方法の一実施態様のステップ図である。
【図４１Ｃ】図４１Ｃは、加速プログラムによる複数の加速技術を実行して、トランスポート層で傍受し、カーネルレベルデータ構造を使用する方法のもう１つの実施態様のステップ図である。
【図４２Ａ】図４２Ａは、第１プログラムを介してクライアント上に加速プログラムを自動的にインストールして実行する方法のもう１つの実施態様のステップ図である。
【図４２Ｂ】図４２Ｂは、仮想プライベートネットワークの接続性を提供し、１つまたは複数の加速技術を実行するための第１プログラムおよび加速プログラムの方法の一実施態様のステップ図である。
【図４３】図４３は、サーバに対するクライアントの通信をリダイレクトして、通信をサーバに伝送するために使用できないと決定された中間手段をバイパスする方法の一実施態様のステップ図である。
【図４４】図４４は、伝達制御プロトコルのバッファリングのクライアント側加速技術を実行する方法の一実施態様のステップ図である。
【図４５Ａ】図４５Ａは、伝達制御プロトコルの接続プーリングのクライアント側加速技術を実行する方法の一実施態様のステップ図である。
【図４５Ｂ】図４５Ｂは、一実施態様の１つまたは複数のトランスポート層接続のプールを介して、複数のアプリケーションにより実行される一連のＨＴＴＰトランザクションの線図である。
【図４６】図４６は、伝達制御プロトコルの多重化のクライアント側加速技術を実行する方法の一実施態様のステップ図である。
【図４７】図４７は、トランスポート層パケットのコンテンツ長さ識別子の一実施態様の線図である。
【図４８】図４８は、複数のチャンクを介して伝送されるメッセージのコンテンツ長さ識別子のもう１つの実施態様の線図である。
【図４９Ａ】図４９Ａは、リモートクライアントに対するコンピューティング環境の提供を加速するためにネットワークされたコンピュータシステムの一例の実施態様を示すブロック図である。
【図４９Ｂ】図４９Ｂは、リモートクライアントに対するコンピューティング環境の提供を加速する方法のステップの一実施態様を示すフロー図である。
【図１Ａ】
2009536377.tif 000008
【図１Ｂ】
2009536377.tif 000009
【図１Ｃ】
2009536377.tif 000010
【図１Ｄ】
2009536377.tif 000011
【図１Ｅ】
2009536377.tif 000012
【図１Ｆ】
2009536377.tif 000013
【図２】
2009536377.tif 000014
【図３Ａ】
2009536377.tif 000015
【図３Ｂ】
2009536377.tif 000016
【図４Ａ】
2009536377.tif 000017
【図４Ｂ】
2009536377.tif 000018
【図４Ｃ】
2009536377.tif 000019
【図４Ｄ】
2009536377.tif 000020
【図４Ｅ】
2009536377.tif 000021
【図５】
2009536377.tif 000022
【図６】
2009536377.tif 000023
【図７】
2009536377.tif 000024
【図８Ａ】
2009536377.tif 000025
【図８Ｂ】
2009536377.tif 000026
【図８Ｃ】
2009536377.tif 000027
【図９】
2009536377.tif 000028
【図１０】
2009536377.tif 000029
【図１１】
2009536377.tif 000030
【図１２】
2009536377.tif 000031
【図１３】
2009536377.tif 000032
【図１４】
2009536377.tif 000033
【図１５】
2009536377.tif 000034
【図１６】
2009536377.tif 000035
【図１７】
2009536377.tif 000036
【図１８】
2009536377.tif 000037
【図１９】
2009536377.tif 000038
【図２０】
2009536377.tif 000039
【図２１】
2009536377.tif 000040
【図２２】
2009536377.tif 000041
【図２３】
2009536377.tif 000042
【図２４】
2009536377.tif 000043
【図２５】
2009536377.tif 000044
【図２６】
2009536377.tif 000045
【図２７】
2009536377.tif 000046
【図２８Ａ】
2009536377.tif 000047
【図２８Ｂ】
2009536377.tif 000048
【図２９Ａ】
2009536377.tif 000049
【図２９Ｂ】
2009536377.tif 000050
【図２９Ｃ】
2009536377.tif 000051
【図２９Ｄ】
2009536377.tif 000052
【図３０】
2009536377.tif 000053
【図３１】
2009536377.tif 000054
【図３２】
2009536377.tif 000055
【図３３】
2009536377.tif 000056
【図３４】
2009536377.tif 000057
【図３５】
2009536377.tif 000058
【図３６】
2009536377.tif 000059
【図３７】
2009536377.tif 000060
【図３８】
2009536377.tif 000061
【図３９】
2009536377.tif 000062
【図４０Ａ】
2009536377.tif 000063
【図４０Ｂ】
2009536377.tif 000064
【図４１Ａ】
2009536377.tif 000065
【図４１Ｂ】
2009536377.tif 000066
【図４１Ｃ】
2009536377.tif 000067
【図４２Ａ】
2009536377.tif 000068
【図４２Ｂ】
2009536377.tif 000069
【図４３】
2009536377.tif 000070
【図４４】
2009536377.tif 000071
【図４５Ａ】
2009536377.tif 000072
【図４５Ｂ】
2009536377.tif 000073
【図４６】
2009536377.tif 000074
【図４７】
2009536377.tif 000075
【図４８】
2009536377.tif 000076
【図４９Ａ】
2009536377.tif 000077
【図４９Ｂ】
2009536377.tif 000078
【国際調査報告】
2009536377.tif 000079
2009536377.tif 000080
2009536377.tif 000081