(57)【要約】  リモートアクセスシステムにおいて、サービスからクライアントへ送られるメッセージのフローを制御するクライアントサイドフロー制御メカニズム。メッセージがサービスシーケンスＩＤを含んでいる場合、クライアントにメッセージを送ることができる。クライアントが、サービスからのメッセージを処理すると、クライアントはクライアントシーケンスＩＤによって応答する。ＳＳＩ値とＣＳＩ値は、送信キューのメッセージ数を決定する。サービスは、現行のＳＳＩとＣＳＩの間の差とストップウインドウ値を比較する。その差がストップウインドウ値を超えていれば、サービスからクライアントへのメッセージの送信はオフにされる。クライアントは、メッセージを処理する間は、ＣＳＩ承認を送り続ける。その差がストップウインドウ値を下回ると、サービスからクライアントへのメッセージの送信はオンにされる。
2016537884.tif 000002
【特許請求の範囲】
【請求項１】
リモートアクセスシステムにおけるクライアントサイドのフロー制御の提供方法であって、
サービスからクライアントにメッセージを送ることであって、前記サービスは前記クライアントによって遠隔からアクセスされ、前記メッセージはサービスシーケンスＩＤ（ＳＳＩ）を含む、送ること、
関連付けられた特定のＳＳＩを有するメッセージの前記クライアントによる処理が完了したことに応答して前記サービスにおいてクライアントシーケンスＩＤ（ＣＳＩ）を前記クライアントから受信すること、
前記クライアントに対して送信された現行のＳＳＩと前記クライアントから受信された前記現行ＣＳＩとの差を前記サービスで決定すること、及び
前記差が所定のストップウインドウ値より大きい場合に前記サービスから前記クライアントへの通信をオフにすること、を含む、方法。
【請求項２】
請求項1に記載の方法であって、
続いて、前記現行のＳＳＩと前記クライアントから受信された後続のＣＳＩの差を前記サービスで決定すること、及び
前記差が所定のスタートウインドウ値より小さい場合に前記サービスから前記クライアントへの通信をオンにすること、を更に含む、前記方法。
【請求項３】
請求項２に記載の方法であって、前記所定のスタートウインドウ値は、前記所定のストップウインドウ値より小さい、前記方法。
【請求項４】
請求項２〜３のいずれかに記載の方法であって、ネットワーク条件の１つと前記クライアントの処理能力に応じて、前記所定のスタートウインドウ値または前記所定のストップウインドウ値を動的に調整すること、を更に含む、前記方法。
【請求項５】
請求項１〜４のいずれかに記載の方法であって、前記現行ＳＳＩとＣＳＩ値を前記決定することを実行するために、前記サービスで維持すること、を更に含む、前記方法。
【請求項６】
請求項１〜５のいずれかに記載の方法であって、
前記クライアントでクライアントレイヤを提供すること、
前記サービスに関連付けられたサービスレイヤを提供することであって、前記サービスレイヤは、前記クライアントから受信したメッセージのためにサービス受信キューと前記クライアントに向けられたメッセージのサービス送信キューを有する、提供すること、及び
前記クライアントと前記サービスの間で送られるメッセージの通信プロキシとしてサーバレイヤを提供することであって、前記サーバレイヤは、前記クライアントに向けられたメッセージのアウトバウンドクライアントキューを含む、提供すること、を更に含む、前記方法。
【請求項７】
請求項６に記載の方法であって、前記サービスから前記クライアントへの前記通信がオフのとき、前記サービス送信キューのキューメッセージを更に含む、前記方法。
【請求項８】
請求項６〜７のいずれかに記載の方法であって、前記サービスレイヤに提供されたサービスレイヤＳＤＫにおける前記決定を実行すること、を更に含む、前記方法。
【請求項９】
請求項６〜８のいずれかに記載の方法であって、
特定のＳＳＩを有するメッセージが前記クライアントによって承認されなかったことを決定することによって前記クライアントと前記サービスの間の通信の障害を検出すること、及び
前記障害の検出により、前記特定のＳＳＩを有する前記メッセージを再送すること、を更に含む、前記方法。
【請求項１０】
請求項６〜９のいずれかに記載の方法であって、前記サービス送信キューから前記メッセージを再送すること、を更に含む、前記方法。
【請求項１１】
請求項１〜１０のいずれかに記載の方法であって、
前記クライアントと前記ＳＳＩを使用する前記サービスの間における通信の障害を検出すること、及び
前記障害を検出することによって、前記クライアントによって承認されなかったことが決定された特定のＳＳＩを有するメッセージを再送すること、を更に含む、前記方法。
【請求項１２】
請求項１〜１１のいずれかに記載の方法であって、
アプリケーションサーバ上で実行する管理されていないサービスとして前記サービスを提供すること、
第１通信接続によって前記サービスと及び第２通信接続によって前記クライアントと通信するリモートアクセスサーバ上で実行するサーバリモートアクセスプログラムを提供すること、
前記第２通信接続によって前記リモートアクセスサーバで前記クライアントからの接続を受信すること、及び
前記決定することに従い、前記サービスから前記クライアントへメッセージを送信すること、を更に含む、前記方法。
【請求項１３】
請求項１２に記載の方法であって、異なるノードとして、前記アプリケーションサーバと前記リモートアクセスサーバを提供すること、を更に含む、前記方法。
【請求項１４】
クライアントサイドフロー制御の提供方法であって、
サービスからクライアントにメッセージを送ることであって、前記メッセージは、前記サービスから前記クライアントに送られる複数のメッセージ内の前記メッセージの相対位置を表わすために前記サービスによって増分される追跡メカニズムを含む、送ること、
前記追跡メカニズムによりメッセージの処理が完了したことを示す前記クライアントからの応答を前記サービスで受信すること、
前記クライアントでのメッセージの前記処理が第１の所定値を超えて遅延しているかどうかを前記応答から前記サービスで決定すること、及び
前記クライアントが前記所定値を超えて遅延している場合に前記サービスから前記クライアントへの通信をオフにすること、を含む、方法。
【請求項１５】
請求項１４に記載の方法であって、
後続の応答を前記サービスで受信すること、及び
前記サービスにおいて前記後続の応答から前記クライアントでのメッセージの前記処理が最早第２の所定値を超えて遅れていないかどうかを決定すること、及び
前記サービスから前記クライアントへの通信をオンにすること、を更に含む、前記方法。
【請求項１６】
請求項１５に記載の方法であって、前記第２の所定値は前記第１の所定値より小さい、前記方法。
【請求項１７】
請求項１５〜１６のいずれかに記載の方法であって、ネットワーク条件の1つ及び前記クライアントの処理能力に従って前記第１の所定値または前記第２の所定値を動的に調整すること、を更に含む、前記方法。
【請求項１８】
サービスからクライアントへのメッセージ送信のクライアントサイドのフロー制御の提供装置であって、
前記クライアントと前記サービスの間で送信されるメッセージの通信プロキシとしてサーバレイヤを有するリモートアクセスサーバであって、前記サーバレイヤは前記クライアントに向けられたメッセージのアウトバウンドクライアントキューを含む、リモートアクセスサーバと、
前記サービスに関連付けられたサービスレイヤを実行する第２サーバであって、前記サービスレイヤは前記クライアントから受信されたメッセージのサービス受信キューと前記クライアントに向けられたメッセージのサービス送信キューを有する、第２サーバと、を含み、
前記クライアントに向けられた前記メッセージは、サービスシーケンスＩＤ（ＳＳＩ）を含み、前記クライアントから受信した前記メッセージは、前記メッセージに関連付けられた特定のＳＳＩを有するメッセージの前記クライアントの処理完了を示すクライアントシーケンスＩＤ（ＣＳＩ）を含み、及び
前記サービスは、現行のＳＳＩと前記クライアントから受信された前記ＣＳＩの差が前記サービスから前記クライアントへの通信をオフにする所定のストップウインドウ値より大きいかどうかを決定する、装置。
【請求項１９】
請求項１８に記載の装置であって、前記サービスが、前記現行のＳＳＩと前記ＣＳＩとの差が前記サービスから前記クライアントへの通信をオンにする所定のスタートウインドウ値より小さいかどうかを更に決定する、前記装置。
【請求項２０】
請求項１８〜１９のいずれかに記載の装置であって、前記所定のスタートウインドウ値は前記所定のストップウインドウ値より小さい、前記装置。
【請求項２１】
請求項１９〜２０のいずれかに記載の装置であって、前記スタートウインドウ値または前記ストップウインドウ値はネットワーク条件の1つと前記クライアントの処理能力に従って動的に調整される、前記装置。
【請求項２２】
請求項１８に記載の装置であって、前記メッセージは、前記サービスから前記クライアントへの前記通信がオフのときにサービス送信キューにおいて追加される、前記装置。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本特許出願は、２０１３年１１月６日に出願された「リモートアクセス環境におけるクライアントサイドのフロー制御方法」と題する米国仮特許出願第６１／９００,９４０号及び２０１３年１１月２９日に出願された「クライアントサーバリモートアクセス環境におけるエンドツエンドフロー制御を用いたサーバサービス分離方法」と題する米国仮特許出願第６１／９１０,１８９号に対する優先権を主張するものであり、当該特許出願の開示は、それらの全体が参照により本明細書に組み込まれる。
【背景技術】
【０００２】
サービスに対するユビキタスリモートアクセスは、広帯域無線ネットワークアクセスが発展し、利用が可能になった結果として、ありふれたものとなった。そのため、ユーザは増え続けている様々なクライアントデバイス（例えば、モバイルデバイス、タブレットコンピューティングデバイス、ラップトップ／ノートブック／デスクトップコンピュータなど）を使用してサービスにアクセスしている。リモートサーバは、３Ｇや４Ｇのモバイルデータネットワーク、ＷｉＦｉ及びＷｉＭａｘのような無線ネットワーク、有線ネットワークなどを含む多様なネットワーク上でサービスとクライアントとの間のデータやその他の情報を含んでいるメッセージを伝送することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
サービスから接続されたクライアントにメッセージを送るネットワーク帯域幅は十分であっても、クライアントが十分迅速にメッセージを処理できない場合には、問題が生じる。例えば、アプリケーションプログラミングインターフェース（ＡＰＩ）によっては、ネットワーキングがプッシュ型に基づいていることもある。そのため、クライアントが何もしていないか、あるいはバックグラウンドタスクを実行している間、クライアントでは追加のメッセージが送られ、キューに追加されてもよい。多すぎるメッセージが送られ、クライアントが迅速に処理できないと、エラーが生じることもある。
【課題を解決するための手段】
【０００４】
リモートアクセスシステムにおけるフロー制御を提供するためのシステムと方法が以下に開示される。本開示の態様に従って、本方法は、サービスからクライアントへメッセージを送ることであって、サービスはクライアントによって遠隔からアクセスされ、メッセージはサービスシーケンスＩＤ（ＳＳＩ）を含む、送ること、サービスにおいて、関連付けられた特定のＳＳＩを有するメッセージのクライアントによる処理の完了に応じてクライアントからクライアントシーケンスＩＤ（ＣＳＩ）を受信すること、クライアントに送られる現行のＳＳＩとクライアントから受信される現行のＣＳＩの差をサービスにおいて決定すること、その差が所定の停止ウインドウ値を超える場合にサービスからクライアントへの通信をオフにすることを含んでもよい。
【０００５】
本開示の他の態様に従って、記述されるクライアントサイドフロー制御の提供方法は、サービスからクライアントへメッセージを送ることであって、メッセージはサービスからクライアントへ送られた複数のメッセージ中の当該メッセージの相対位置を表すためにサービスによって増分される第１シーケンス番号を含む、送ること、サービスにおいて、第１シーケンスより小さい番号の第２シーケンス番号を有するメッセージの処理の完了を示すクライアントからの応答を受信すること、クライアントにおけるメッセージの処理が第１所定値より遅れているかどうかをサービスにおいて応答から決定すること、クライアントが所定値を超えて遅れている場合にサービスからクライアントへの通信をオフにすることを含んでもよい。
【０００６】
本開示の更に他の態様に従って、サービスからクライアントへメッセージを送るクライアントサイドのフロー制御を提供する装置が記述されている。本装置は、クライアントとサービスの間で送られたメッセージの通信プロキシとしてサーバレイヤを備えたリモートアクセスサーバであって、サーバレイヤはクライアントに向けられたメッセージのアウトバウンドクライアントキューを含む、リモートアクセスサーバと、サービスに関連付けられたサービスレイヤを実行する第２サーバであって、サーバレイヤはクライアントから受信されたメッセージのサービス受信キューとクライアントに向けられたメッセージのサービス送信キューを有する、第２サーバとを含んでもよい。クライアントに向けられたメッセージはサービスシーケンスＩＤ（ＳＳＩ）を含んでもよく、クライアントから受信されたメッセージは、関連付けられた特定のＳＳＩを有するメッセージの処理がクライアントにより完了したことを示すクライアントシーケンスＩＤ（ＣＳＩ）を含んでもよい。サービスは、現行のＳＳＩとクライアントから受信したＣＳＩ間の差が、サービスからクライアントへの通信をオフにする所定のストップウインドウ値を超えているかどうかを決定してもよい。
【０００７】
本開示の更に他の態様に従って、リモートアクセスシステムにけるクライアントサイドのフロー制御を提供する方法が記述されている。本方法は、サービスからクライアントへメッセージを送ることであって、サービスはクライアントによって遠隔からアクセスされ、メッセージはサービスシーケンスＩＤ（ＳＳＩ）を含む、送ること、クライアントシーケンスＩＤ（ＣＳＩ）に関連付けられたＳＳＩを有するメッセージの処理がクライアントにより完了したことに応答してクライアントからＣＳＩを受信すること、クライアントに送られた現行のＳＳＩとクライアントから受信されたＣＳＩの差をサービスにおいて決定すること、その差が所定のストップウインドウ値を超えている場合にサービスからクライアントへの通信をオフにすることを含んでもよい。
【０００８】
その他のシステム、方法、特徴及び／または利益は、次の図面と発明の詳細な説明を精査すると、この分野の通常の知識を有する者にとって明らかとなるであろう、または明らかとなり得る。そのようなシステム、方法、特徴及び／または利益の全ては、この記述のうちに含まれ、添付の請求項によって保護されることを意図している。
【図面の簡単な説明】
【０００９】
図面のコンポーネントは、必ずしもお互いに相対的なスケールになっていない。同様な参照数字は、幾つかの表示を通して対応する部分を表わしている。
【図１】本開示による例示の階層化アーキテクチャを示す図である。
【図２】図１のアーキテクチャ内で実行される例示のオペレーションのフローダイアグラムである。
【図３】図１のアーキテクチャ内で実行される例示のオペレーションのフローダイアグラムである。
【図４Ａ】図１で示されているような階層化アーキテクチャでのサービスに対するクライアントリモートアクセスについて例示のサーバーサービスモデルを示すものである。
【図４Ｂ】図１で示されているような階層化アーキテクチャでのサービスに対するクライアントリモートアクセスについて例示のサーバーサービスモデルを示すものである。
【図５】例示のコンピューティングデバイスを示すものである。
【発明を実施するための形態】
【００１０】
特に定義をしない限り、本明細書で使用される全ての技術用語及び科学用語は、この分野の通常の知識を有する者が共通に理解しているものと同じ意味を有している。本明細書に記述されている方法及び材料と同様または均等なものは、本開示の実施や試験で使用することができる。実装については遠隔でアクセスするサービスについて記述されるが、この分野の通常の知識を有する者にとって、実装は当該実装に限定されず、リモートデバイスを介してのアプリケーション及びデータを含め、任意のタイプのサービスに遠隔でアクセスすることに適用できることは明らかであろう。
【００１１】
上述の概要を前置きとして、ここで、本開示による階層化アーキテクチャを例示している図１を参照する。階層化アーキテクチャは、アプリケーションサーバ１０６上で実行するサービスからの情報のフローについて、クライアント１０２がリモートアクセスサーバ１０４を介して制御を可能にするクライアントフロー制御メカニズムを実装する。図１に示されているように、システムにはクライアントレイヤ１１２、サーバレイヤ１１４及びサービスレイヤ１１６の３層がある。本開示によると、階層化アーキテクチャは、データやアプリケーションサーバ１０６からのその他の情報を含んでいるメッセージを処理するクライアントの能力の特殊性を説明するメッセ―ジのキューを含んでいる。クライアントレイヤ１１２は、クライアント１０２にあり、サーバレイヤ１１４と接続するために使用される。典型的には、クライアントレイヤ１１２は、クライアント１０２でユーザインターフェースを提供するために使用される、例えば、ウエブブラウザ、専用アプリケーションなどのクライアントアプリケーションを含んでいる。クライアント１０２は、リモートアクセスサーバ１０４に通信ネットワーク１２５によって接続される、例えば、ＩＰＨＯＮＥ（登録商標）、ＡＮＤＲＯＩＤ（登録商標）ベースデバイス、タブレットデバイスまたはデスクトップ／ノートブックパーソナルコンピュータなどの無線携帯デバイスであってもよい。
【００１２】
リモートアクセスサーバ１０４は、クライアント１０２を、例えば、医療アプリケーソンとすることができる、アプリケーションサーバ１０６に接続するために使用されるサーバリモートアクセスプログラムを含むことができる。サーバリモートアクセスプログラムの実施例は、ＰＵＲＥＷＥＢであり、カナダ国アルバータ州カルガリー市のカルガリーサイエンティフィック社から上市されている。サーバリモートアクセスプログラムは、図１のアーキテクチャにわたる接続の集約とアプリケーションプロセス管理をオプションとして提供されてもよい。リモートアクセスサーバ１０４は、通信接続１２６によってアプリケーションサーバ１０６に接続することができる。アプリケーションサーバ１０６がリモートアクセスサーバ１０４以外のコンピューティングデバイス上で稼働する場合、通信接続１２６は通信ネットワークでよい。例えば、通信接続１２６はＴＣＰ／ＩＰ通信ネットワーク、ＶＰＮ接続、専用接続などでよい。アプリケーションサーバ１０６が、リモートアクセスサーバとして、同じノードまたはコンピュータ上で稼働する場合、通信接続１２６は、ＴＣＰ／ＩＰソケット接続、共有メモリスペース、共有ファイルロケーションなどでよい。
【００１３】
サーバレイヤ１１４は、以下に記述されるように、クライアント１０２からサービスレイヤ１１６にプロキシ通信をする働きをする。クライアントレイヤ１１２は、リモートアクセスサーバ１０４から受信されるメッセージのクライアント受信キュー１２０を含んでおり、そのメッセージは、クライアント１０２が論理的に接続されるアプリケーションサーバ１０６に代わって送信される。クライアントレイヤ１１２は、また、リモートアクセスサーバ１０４のサーバレイヤ１１４における受信キュー１２３に送るメッセージのクライアント送信キュー１２２を含んでいる。メッセージは、最終的には、例えば、アプリケーションサーバ１０６に向けられてもよい。
【００１４】
サービスレイヤ１１６の例（例えば、サービスに関連付けられる）は、サーバレイヤ１１４に接続し、アプリケーションサーバ１０６からそのサービスに論理的に関連付けられたクライアント１０２への通信を代行する。サービスレイヤ１１６は、クライアント１０２の代わりにリモートアクセスサーバ１０４から受信するメッセージのサービス受信キュー１２８を含んでいる。各メッセージはクライアント１０２の独特の識別子によってラベルが付けられてもよい。サービスレイヤ１１６は、また、リモートアクセスサーバ１０４のサーバレイヤ１１４におけるクライアントキュー１２４に送るメッセージのサービス送信キュー１３０を含んでいる。サービス送信キュー１３０の各メッセージは、また、クライアント１０２の独特の識別子によってラベルが付けられてもよい。更にサービスのタイプに関する詳細については、図４Ａ及び４Ｂを参照して提示する。
【００１５】
本開示のクライアントフロー制御メカニズムは、サーバ１０４とクライアント１０２の間のネットワーク接続がメッセージ追跡システムによって決定されるように飽和したとき、サービスにメッセージの送信を停止させるサービスレイヤ１１６に実装されるサービスソフトウエア開発キット〈ＳＤＫ〉の一部として含まれてもよい。図２を参照して以下に記述するように、クライアントに送られる現行のサービスシーケンスＩＤ（ＳＳＩ）と各接続セッションのためにクライアントから受信される現行のクライアントシーケンスＩＤ（ＣＳＩ）を追跡するためにシーケンスカウンタを加えてもよい。クライアントレイヤ１１２は、サービスシーケンスＩＤ（ＳＳＩ）を有するアプリケーションサーバ１０６について、サービスの実行に伴うメッセージを待つ。クライアントがＳＳＩを有するメッセージを受信し処理するときはいつでも、サービスに承認としてクライアントシーケンスＩＤ（ＣＳＩ）を送る。サービスシーケンスＩＤ（ＳＳＩ）とクライアントシーケンスＩＤ（ＣＳＩ）の差が、所定のＯｆｆＷｉｎｄｏｗＳｉｚｅ値より大きいとき、クライアント１０２への送信はオフにすることができる。換言すれば、ＳＳＩとＣＳＩの組み合わせは、キュー１２０、１２４及び１３０におけるメッセージの数がＯｆｆＷｉｎｄｏｗＳｉｚｅ値より大きいことを示している。サービスシーケンスＩＤ（ＳＳＩ）とクライアントシーケンスＩＤ（ＳＳＩ）の差が、ＯｎＷｉｎｄｏｗＳｉｚｅ値を下回るとき、クライアント１０２への送信はオンにすることができる。そのため、サービスは、そのメッセージ処理において、クライアントにどのくらい遅れているかを決定することができる。ＯｎＷｉｎｄｏｗＳｉｚｅ値は、サービスがより多くのデータを送る前に、クライアントが「追いつく」ことができるようにする。
サービスシーケンスＩＤ：ＳＳＩ
クライアントシーケンスＩＤ：ＣＳＩ
フロー制御メッセージ
ＣＳＩ            ＳＳＩ
クライアント送信オン（初期）                  ０                ０
サービスがシーケンスＩＤを送信する
クライアントが受信／処理する                  ０                １
承認
クライアントが更新シーケンスＩＤを送信する
サービスが受信／処理する                      １                １
ＳＳＩ−ＣＳＩ＞ストップウインドウサイズであれば
クライアント送信オフ
ＳＳＩ−ＣＳＩ＜スタートウインドウサイズであれば
クライアント送信オン
ストップウインドウサイズ≧スタートウインドウサイズ
【００１６】
図２はクライアントサイドのフロー制御を提供するオペレーションフローダイアグラム２００である。２０２では、セッションがその送信状態を「オン」にして始まる。そのため、クライアント１０２とアプリケーションサーバ１０６上のサービス実行との間の通信が確立し、メッセージが流れている。２０４では、サービスがサービスシーケンスＩＤ（ＳＳＩ）を有するメッセージをクライアントに送る。ＳＳＩは、アプリケーションサーバ１０６によって送られ、その数が増分する識別子である。上述の通り、アプリケーションサーバ１０６のサービスがクライアント１０２へパケットのメッセージを送るたびに、クライアント１０２にシーケンスＩＤを送信する。２０６では、ＳＳＩを有するインバウンドのメッセージがクライアントによって処理され、クライアントシーケンスＩＤ（ＣＳＩ）が生成される。上述で指摘したように、ＣＳＩは、クライアント１０２によって処理されるメッセージに含まれるＳＳＩを反映したものであり得る。２０８では、クライアントは、サービスにＣＳＩを有する承認メッセージを送る。本開示の態様に従って、クライアント１０２によって送信されるＣＳＩは、クライアント１０２がアプリケーションサーバ１０６からのメッセージを処理した後に送信される。例えば、ＳＳＩが「１」であれば、クライアント１０２は、アプリケーションサーバ１０６への承認メッセージにＣＳＩとして「１」を反映することができる。
【００１７】
２１０では、サービスは、現行のＳＳＩと現行のＣＳＩの差を決定する。アプリケーションサーバ１０６は、その現行のＳＳＩとＣＳＩ値を維持する。これらの値の差は、クライアント１０２が圧倒されるか、またはアプリケーションサーバ１０６の後で遅れているのかを決定するために、アプリケーションサーバ１０６によって使用することができる。２１２では、ＳＳＩとＣＳＩの差がストップウインドウサイズ(例えば、ＯｆｆＷｉｎｄｏｗＳｉｚｅ値)より大きく、現行の送信状態が「オン」であれば、セッションは、２０３で「オフ」の送信状態に設定される。この送信状態変化は、アプリケーションサーバ１０６が、クライアント１０２に追加のメッセージを送るのを停止させる。クライアント１０２はメッセージを処理し続ける間に、クライアント１０２は、ＣＳＩを更新するメッセージを送ることができるので、アプリケーションサーバ１０６は、ＳＳＩとＣＳＩ値の追跡を継続する。送信状態がオフであるが、メッセージは、サービスレイヤ１１６においてサービス送信キュー１３０のキューに加えられる。クライアント１０２が、クライアント受信キュー１２０のキューに加えられたメッセージの処理を継続する２０６で処理は継続する。
【００１８】
２１２では、ＳＳＩとＣＳＩの差がストップウインドウサイズより大きくないならば、処理は、サービスが数の増分されたＳＳＩを有するクライアントへ次のメッセージを送る２０４に戻る。アプリケーションサーバ１０６は、クライアント１０２へサービス送信キュー１３０の次のメッセージを送る。処理は、上述の通り、継続する。
【００１９】
２１２で、現行の送信状態が「オフ」であれば、２１４でＳＳＩとＣＳＩの差がスタートウインドウサイズ（例えば、ＯｎＷｉｎｄｏｗＳｉｚｅ値）より小さいかどうかが決定される。そうでないならば、処理は２０６に戻り、そこでクライアント１０２は、クライアント受信キュー１２０の次のメッセージを処理する。２１４で、ＳＳＩとＣＳＩの差がスタートウインドウサイズより小さければ、クライアントは、サービスからのメッセージを処理する準備が整い、２０２で送信状態は「オン」に設定される。
【００２０】
上述のオペレーションフローにおいて、例示のストップウインドウ（ＯｆｆＷｉｎｄｏｗＳｉｚｅ）値は、５である。注目されるのは、この値は、クライアント１０２とアプリケーションサーバ１０６の間の通信セッションに割り当てられる重みに基づいて調整されてもよいということである。例示のスタートウインドウ（ＯｎＷｉｎｄｏｗＳｉｚｅ）値は２である。実装によっては、送信がオンとオフの間で急速に変転する状況を防ぐために、ストップウインドウ値とスタートウインドウ値が異なることがある。
【００２１】
更に、他の実装によれば、スタートとストップウインドウ値は、例えば、クライアント１０２の実行履歴、使用される通信ネットワークのタイプ（例えば、イーサーネット対セルラーデータ）などに基づいて動的に調整することができる。スタートウインドウ値とストップウインドウ値の差は、アプリケーションサーバ１０６とクライアント１０２の間の送信が首尾よく行われる場合に、もっと大きくすることができ、送信に支障がある場合に、より小さくすることができる。
【００２２】
このため、上述の通り、アプリケーションサーバ１０６は、クライアント１０２からの情報に基づき、全てのフロー制御の決定を行う。更に、プロセス２００は、クライアント１０２に遅延が存在することをアプリケーションサーバ１０６において知らせる際の遅延を防ぐ。こうすることによって、メッセージをクライアント１０２の品質／実行に順応させる。例えば、クライアント１０２が遅れ、メッセージを十分迅速に処理できなくなった場合であっても、図２のフロー制御メカニズムは、ネットワークがメッセージを完全に送信できるとしても、メッセージの送信を中止する。
【００２３】
上述によると、図２のオペレーションフローは、通信接続１２６の送信特性を説明するためにも使用することができる。例えば、通信接続１２６は、コンピューティングデバイスの高い帯域の内部システムバスを提供できない。従って、オペレーションフロー２００は、アプリケーションサーバ１０６とリモートアクセスサーバ１０４の間の通信期間に生じ得る呼出し時間に対応する。
【００２４】
他の実装によると、オペレーションフロー２００は、ＳＳＩ及び／またはＣＳＩを認識しないまたは送らないサービス及び／またはクライアント間の相互運用性を提供することができる。例えば、アプリケーションサーバ１０６がＳＳＩを送らない場合、クライアント１０２はＣＳＩを送らないように順応することになろう。また、サービスがＳＳＩを送るが、クライアント１０２がＣＳＩで応えない場合、サービスはクライアントが使用可能となっていないと想定することになろう。
【００２５】
実装によっては、２以上のクライアントデバイスがリモートアクセスサーバ１０４を使用してサービスと共同セッションで共同して相互に対話することができるものもある。リモートアクセスサーバ１０４は、アプリケーションサーバ１０６に関連付けられたディスプレイデータの同期表示を提供する状態モデルを利用することができる。フロー制御は、クライアント毎に実装されてもよい。特定のクライアントに対して送信がオフの場合、送信がオン状態に戻ったとき、そのクライアントは、共同セッションの他のクライアントとの表示を再同期するために、メッセージをスキップしてもよい。
【００２６】
図３はサービスとＳＳＩとＣＳＩを利用する論理的に接続されたクライアントの間で関連付けられた信頼できるメッセージ送信を提供するオペレーションのフローダイアグラム３００を示している。例えば、実装によっては、クライアントからのＣＳＩ応答が使用されて、クライアント１０２によってどのメッセージが成功裏に受信されたかをアプリケーションサーバ１０６が知るものもある。３０２では、サービスがＳＳＩを有するメッセージをクライアントに送る。次いで、３０２で、クライアントは、ＣＳＩ値を有するメッセージをサービスに送る。アプリケーションサーバ１０６がこのメッセージを受信した場合、３０６で、アプリケーションサーバ１０６は、関連するＳＳＩ値に関連付けられたメッセージをサービス送信キュー１３０から安全に取り除くことができる。しかし、ＣＳＩが受信されていなければ、サービスは、対応するＳＳＩを有するメッセージを再送することができる（３０８）。同様に、プロセス３０２〜３０８は、クライアントでも使用できる。例えば、アプリケーションサーバ１０６が、クライアント１０２にメッセージを送るたびに、以前のＳＳＩ値に関連付けられたメッセージをクライアント送信キュー１２２から安全に取り除くために受信ＳＳＩ値を使用することができる。そのため、ＳＳＩとＣＳＩ値は、アプリケーションサーバ１０６とクライアント１０２の間の信頼できる通信を提供するために使用できる。
【００２７】
図４Ａと図４Ｂを参照すると、これらの図は、上述したクライアントサイドフロー制御メカニズムを実装することができる図１に示されているような階層化アーキテクチャにおいて、サービスに対するクライアントリモートアクセスの代替モデルの実施例を示している。図４Ａは、クライアントデバイスが通信をするリモートアクセス及びアプリケーションサーバと同じシステムまたはコンピューティングデバイス上にサービスが配置される「管理されたサービス」１１５を示している。この事例では、サーバが、クライアントが接続及び切断するたびにサービスを開始し停止することによって、アプリケーション／プロセスのライフサイクルを制御するように、サービスの管理がなされる。図４Ｂは、統合されたリモートアクセス及びアプリケーションサーバとは異なったシステムノードにあるサーバ上にサービスが配置され、アプリケーション／プロセスのライフサイクルが最早リモートアクセスサーバによって管理されていない、「管理されていないサービス」１１７を示している。
【００２８】
図４Ａと図４Ｂにおいて、サーバリモートアクセスプログラムは、接続配列やアプリケーションマネジメントを提供する。更に、両方の管理されたサービス１１５と管理されていないサービス１１７は、図２のクライアントサイドフロー制御及び／または図３の信頼できるメッセージングを実装することができる。例えば、図４Ｂの環境が実装され、通信接続１２６が、管理されていないサービス１１７とリモートアクセスサーバ１０４との間で通信障害を起こす状況を経験すると、図２のフロー制御メカニズムによるＳＳＩ及びＣＳＩ値の追跡は、状況がもっと好転するまで、通信をオフにするために管理されていないサービス１１７によって使用されてもよい。
【００２９】
図４Ａに示されているように、クライアント１０２は、リモートアクセス及びサーバレイヤ１１４とサービスレイヤ１１６を含むアプリケーションサーバ１０３と通信することができるクライアントレイヤ１１２を有する。クライアント１０２は、通信ネットワーク１２５によってリモートアクセス及びアプリケーションサーバ１０３に接続されてもよい。リモートアクセス及びアプリケーションサーバ１０３は、サーバレイヤ１１４において実行するサーバリモートアクセスプログラムを含むことができる。サーバリモートアクセスプログラムは、サービスレイヤ１１６において実行する管理されたサービス１１５（例えば、アプリケーション）にクライアント１０２を接続するために使用される。リモートアクセス及びアプリケーションサーバ１０３内で、サーバレイヤ１１４のサーバリモートアクセスプログラムは、ＴＣＰソケット接続を使用し、例えば、リモートアクセス及びアプリケーションサーバ１０３のシステムバスによって、サービスレイヤ１１６のサービスに接続することができる。このため、サーバリモートアクセスプログラムとサービスの間の帯域幅は極めて高い。クライアント１０２とリモートアクセス及びアプリケーションサーバ１０３の実施例は、図５に示されている。
【００３０】
図４Ｂを参照すると、管理されていないサービス配置の実施例が図示されている。このような環境で、リモートアクセスサーバ１０４は、サーバリモートアクセスプログラムが実行されるサーバレイヤ１１４を含んでいる。アプリケーションサーバ１０６は、サービスまたはアプリケーションが実行されるサービスレイヤ１１６を含んでいる。図４Ｂの環境では、サービス（管理されていないサービス１１７として示されている）が、サーバリモートアクセスプログラムを実行し、通信接続１２６によってリモートアクセスサーバ１０４と通信するコンピューティングデバイス以外のコンピューティングデバイス上に提供される。このため、サービスはサーバとは分離したノード上にある。リモートアクセスサーバ１０４とアプリケーションサーバ１０６の実施例が図５に示されている。
【００３１】
図４Ｂでは、クライアント１０２は、通信接続１２５によって、リモートアクセスサーバ１０４に接続している。アプリケーションサーバ１０６は、所定のインターネットプロトコル（ＩＰ）アドレス及び／またはソケットで、またはリモートアクセスサーバ１０４に関連付けられたユニフォームリソースロケータ（ＵＲＬ）を使用して、リモートアクセスサーバ１０４に接続することができ、リモートアクセスサーバ１０４上で実行するサーバリモートアクセスプログラムにサービスあるいはアプリケーションを登録する。外部のエンティティ（エンドユーザまたは他のプロセスもしくはアプリケーション）がリモートアクセスサーバ１０４の外で管理されていないサービス１１７を開始する。管理されていないサービス１１７は、スタートアップすると、サーバサービスソケット接続を使用してリモートアクセスサーバ１０４に接続し、クライアントが接続できるキューに加えられた管理されていないアプリケーションとしてセッションを確立する。
【００３２】
図５は、例示的実施形態と態様が実装される例示のコンピューティング環境を示している。コンピューティングシステム環境は、適切なコンピューティング環境の一実施例であり、使用や機能性の範囲についてなんらの限定をも示唆することを意図していない。
【００３３】
多くの他の汎用または特定用途のコンピューティングシステム環境あるいは構成が使用できる。周知のコンピューティングシステム、環境及び／または使用に適切な構成の実施例は、パーソナルコンピュータ、サーバ、ハンドヘルドあるいはラップトップデバイス、マルチプロセッサシステム、マイクロプロセッサベースシステム、ネットワークパーソナルコンピュータ（ＰＣ）、マイクロコンピュータ、メインフレームコンピュータ、組み込みシステム、それらのシステムまたはデバイスのいずれかを備える分散コンピューティング環境などを含むが、それらに限定されない。
【００３４】
コンピュータによって実行されるプログラムモジュールなどのコンピュータが実行可能な命令を使用することができる。一般に、プログラムモジュールは、特定のタスクを実行するまたは特定のアブストラクトデータタイプを実装するルーティン、プログラム、オブジェクト、コンポーネント、データストラクチャなどを含む。分散コンピューティング環境は、タスクが通信ネットワークまたは他のデータ送信媒体を通して結合されるリモート処理デバイスによって実行される場合に、使用することができる。分散コンピューティング環境において、プログラムモジュールや他のデータは、メモリストレージデバイスを含むローカル及びリモートコンピュータストレージ媒体の両方にあってもよい。
【００３５】
図５について、以下に記述する態様を実装する例示のシステムは、コンピューティングデバイス５００などのコンピューティングデバイスを備えている。その最も基本的な構成においては、コンピューティングデバイス５００は、典型的には、少なくとも１つの処理ユニット５０２とメモリ５０４を含んでいる。正確な構成及びコンピューティングデバイスのタイプによるが、メモリ５０４は揮発性（ランダムアクセスメモリ（ＲＡＭ）など）、不揮発性（読み出し専用メモリ（ＲＯＭ）、フラッシュメモリなど）またはその２つのなんらかの組み合わせであってもよい。この最も基本的な構成が点線５０６によって図５に例示されている。
【００３６】
コンピューティングデバイス５００は、追加の特徴／機能性を持つことができる。例えば、コンピューティングデバイス５００は、磁気または光学ディスクあるいはテープを含むが、これらに限定されない追加のストレージ（取り外し可能及び／または取り外し不能）を含んでもよい。そのような追加のストレージが、図５において、取り外し可能ストレージ５０８及び取り外し不能ストレージ５１０によって例示されている。
【００３７】
コンピューティングデバイス５００は、典型的には、様々な有体的なコンピュータ可読媒体を含む。コンピュータ可読媒体は、デバイス５００によってアクセスできる任意の利用可能な有体的媒体であってよく、揮発性及び不揮発性、取り外し可能及び／または取り外し不能媒体の両方を含んでいる。
【００３８】
有体的コンピュータストレージ媒体は、コンピュータ可読命令、データストラクチャ、プログラムモジュールまたは他のデータなどの情報の保存の任意の方法または技術で実装される揮発性及び不揮発性、取り外し可能及び／または取り外し不能媒体を含むものである。メモリ５０４、取り外し可能ストレージ５０８及び取り外し不能ストレージ５１０は、全てコンピュータストレージ媒体の実施例である。有体的コンピュータストレージ媒体は、ＲＡＭ、ＲＯＭ、電気的に消去可能なプログラム読み出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリまたは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多様性ディスク（ＤＶＤ）または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージあるいは他の磁気ストレージデバイス、もしくは所望の情報を保存するために使用でき、かつ、コンピューティングデバイス５００によってアクセスできる任意の他の媒体を含むが、これらに限定されない。任意のその種のコンピュータストレージ媒体は、コンピューティングデバイス５００の一部であり得る。
【００３９】
コンピューティングデバイス５００は、デバイスが他のデバイスと通信可能になる通信接続５１２を含んでいる。コンピューティングデバイス５００は、また、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイスなどの入力デバイス５１４を有する。ディスプレイ、スピーカ、プリンタなどの出力デバイス５１６も含むことができる。全てのこれらのデバイスはこの分野で周知であって、ここで長々と考察する必要はない。
【００４０】
ここで記述されているいろいろな手法は、ハードウエアまたはソフトウエア、適切であればそれらの両方の組み合わせに関連付けて、実装することができる。従って、ここで開示されている主題の方法と装置、あるいはそれらのある特定の態様または部分は、フロッピーディスケット、ＣＤ−ＲＯＭ、ハードドライブ、あるいは任意の他のマシーン可読ストレージ媒体などの有体的媒体に実施されたプログラムコード（すなわち、命令）の形態を取ることができ、プログラムコードがコンピュータなどのマシーンに読み込まれ、実行されるとき、当該マシーンは現在開示している主題を実施する装置となる。プログラマブルコンピュータ上でプログラムコードを実行する場合、コンピューティングデバイスは、一般的には、プロセッサ、プロセッサによって可読のストレージ媒体（揮発性及び不揮発性メモリ及び／またはストレージエレメントを含む）、少なくとも１つの入力デバイスと少なくとも１つの出力デバイスを含んでいる。1つまたは複数のプログラムは、例えば、アプリケーションプログラミングインターフェース（ＡＰＩ）、再使用可能なコントロールなどの使用を介して、現在開示されている主題に関連して記述されているプロセスを実装し、または使用することができる。そのようなプログラムは、コンピュータシステムと通信するために、高いレベルの手続型またはオブジェクト指向プログラミング言語で実装できる。しかし、プログラムは、所望により、アッセンブリまたはマシーン言語で実装することができる。いずれにしても、その言語は、コンパイルされるか解釈される言語でよく、ハードウエア実装と組み合わせることができる。
【００４１】
主題は構造的特徴及び／または方法論的行動に特化している言葉で記述されているが、添付の特許請求範囲で定義されている主題は、上述の特定の特徴や行動に必ずしも限定される訳ではない。むしろ、上述の特定の特徴と行動は、特許請求の範囲を実施する例示の形態として開示されている。
【符号の説明】
【００４２】
１０２  クライアント
１０３  アプリケーションサーバ
１０４  リモートアクセスサーバ
１０６  アプリケーションサーバ
１１２  クライアントレイヤ
１１４  サーバレイヤ
１１６  サービスレイヤ
１１７  サービス
１２０  クライアント受信キュー
１２２  クライアント送信キュー
１２４  クライアントキュー
１２８  サービス受信キュー
１３０  サービス送信キュー
【図１】
2016537884.tif 000003
【図２】
2016537884.tif 000004
【図３】
2016537884.tif 000005
【図４Ａ】
2016537884.tif 000006
【図４Ｂ】
2016537884.tif 000007
【図５】
2016537884.tif 000008
【国際調査報告】
2016537884.tif 000009
2016537884.tif 000010
2016537884.tif 000011