(57)【要約】  サーバー／クライアントアーキテクチャーでは、サーバーアプリケーションおよびクライアントアプリケーションは、しばしば種々の言語で開発され、各アプリケーションの種々のコンテキストに向けて専門化された種々の環境下（たとえばサーバーにおける低レベルで、性能基準を満たす、プラットフォームに専門化され、ステートレスな命令、およびクライアントにおける高レベルで、フレキシブルで、プラットフォームにとらわれない、ステートフルな言語）で実行され、しばしば種々の装置上で実行される。これらの環境の収束（たとえばＮｏｄｅ．ｊｓを使用するサーバー側のジャバスクリプト）によって、同じ装置上で実行されるクライアントアプリケーションにサービスを提供するサーバーのプロビジョニングができるようになる。ローカルサーバーは、装置上で発生するローカルイベントをモニターすることができ、ローカルイベントをサブスクライブするローカルクライアントに代わって特定のローカルイベントと関連付けられた１つまたは複数のサーバースクリプトを（たとえばサブスクリプションモデルを介して）実行することができる。これらの技法は、クライアントアプリケーションと同じ言語および環境でローカルイベントのサービスを開発できるようにし、ローカルイベントのサービスのプロビジョニングにおいてサーバー側のコードを使用できるようにし得る。
2015501479.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのローカルクライアントアプリケーションを実行するプロセッサーを有する装置上で要求(requests)を満たす(fulfilling)方法であって、
前記装置上で、
少なくとも１つのサーバースクリプト(script)を少なくとも１つのローカルイベントと関連付けるローカルサーバーを生成し、
前記ローカルクライアントアプリケーションから、選択されたローカルイベントを指定するサブスクリプション要求を受け取ると、前記選択されたローカルイベントを前記ローカルクライアントアプリケーションと関連付け、
少なくとも１つのサーバースクリプトおよびローカルクライアントアプリケーションと関連付けられたローカルイベントを検出すると、前記ローカルサーバー内で、前記ローカルクライアントアプリケーションに代わって前記ローカルイベントと関連付けられ、かつそれに関連する前記サーバースクリプトを実行する
ように構成されている命令を実行するステップ
を含む、方法。
【請求項２】
前記ローカルサーバーは、Ｎｏｄｅ．ｊｓモジュールを含むウェブサーバーを含み、
少なくとも１つのサーバースクリプトが、前記ローカルクライアントアプリケーションに代わって前記ウェブサーバーの前記Ｎｏｄｅ．ｊｓモジュールを起動するジャバスクリプトを含む、
請求項１に記載の方法。
【請求項３】
ローカルイベントのセットから選択された前記ローカルイベントは、
前記装置の入力構成要素によるローカル入力の受領(receipt)を示すローカル入力イベントと、
前記装置の検出器構成要素によるローカルユーザーの検出(detection)を示すローカルユーザーイベントと、
前記装置によるローカルデータ処理インスタンスの完了を示すローカル処理イベントと、
クライアントアプリケーションによって前記ローカルサーバーに向けられるクライアント要求と、
を含む、請求項１に記載の方法。
【請求項４】
前記ローカルイベントは、前記装置上での第３のアプリケーションの実行(execution)の間に生じるローカルアプリケーションイベントを含み、
前記ローカルイベントを検出するステップは、前記ローカルアプリケーションイベントを検出するために、前記第３のアプリケーションの前記実行をモニターするステップを含む、
請求項１に記載の方法。
【請求項５】
前記第３のアプリケーションは、アプリケーション固有(application-specific)のイベントを定義し、
前記命令は、さらに、前記ローカルクライアントアプリケーションから、前記第３のアプリケーションの前記アプリケーション固有のイベントを指定するサブスクリプション要求を受け取ると、前記アプリケーション固有のイベントを前記第３のアプリケーションと関連付けるように構成されている、
請求項４に記載の方法。
【請求項６】
前記命令は、前記ローカルクライアントアプリケーションから、目標(target)を指定するサブスクリプション要求を受け取ると、
前記目標は前記装置上に前記ローカルサーバーを含むのかどうかを決定することと、
前記目標は前記装置上に前記ローカルサーバーを含むと決定すると、前記サブスクリプション要求を前記ローカルサーバーに提示することと、
前記目標は前記装置の外部に在るリモートサーバーを含むと決定すると、前記サブスクリプション要求を前記リモートサーバーに送ることと、
を行うようにさらに構成されている、
請求項５に記載の方法。
【請求項７】
前記命令は、第２の装置上で実行されるリモートクライアントアプリケーションからサブスクリプション要求を受け取ると、前記選択されたローカルイベントを前記リモートクライアントアプリケーションと関連付けることと、
少なくとも１つのサーバースクリプトおよびリモートクライアントアプリケーションと関連付けられたローカルイベントを検出すると、前記ローカルサーバー内で、前記リモートクライアントアプリケーションに代わって(on behalf of)前記ローカルイベントと関連付けられた前記サーバースクリプトを実行することと、
を行うようにさらに構成されている、
請求項４に記載の方法。
【請求項８】
前記ローカルサーバーは、それぞれアドレスを指定するサブスクリプション要求に応答し、
それぞれのローカルイベントが、ローカルイベントアドレスと関連付けられ、
前記サブスクリプション要求をクライアントから受け取るステップが、前記クライアントアプリケーションから、ローカルイベントと関連付けられたローカルイベントアドレスを指定するサブスクリプション要求を受け取るステップを含む、
請求項４に記載の方法。
【請求項９】
それぞれのローカルイベントは、構成要素(component)名によって識別可能な(identifiable)、前記装置の少なくとも１つの構成要素と関連付けられ、
ローカルイベントの前記ローカルイベントアドレスは、前記ローカルイベントと関連付けられた前記構成要素の前記構成要素名を含む、
請求項８に記載の方法。
【請求項１０】
前記命令は、
前記ローカルイベントが検出される前に、前記装置の少なくとも１つの処理構成要素へのパワー(power)を減少させることと、
前記ローカルイベントを検出すると、前記少なくとも１つの処理構成要素へのパワーを回復させることと
を行うようにさらに構成されている、
請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願発明の一実施例は、例えば、ローカルサーバーを通じたローカルクライアントアプリケーションのためのイベントサービスに関する。
【背景技術】
【０００２】
[0001]計算分野内では、数多くのシナリオが、クライアント上でアプリケーションを実行できるようにするためのサーバー／クライアントアーキテクチャーに関係する。第１の例として、ウェブサーバー装置が、ウェブブラウザー内で実行させるために、ウェブアプリケーションを含む命令および／またはコンテンツを第２の装置に提供することができる。第２の例として、アプリケーションストアが、第２の装置上で完全に実行することができる展開可能なローカルアプリケーションを含む命令を提供することができる。第３の例として、データベースサーバーが、第２の装置上でのアプリケーションの実行を容易にするために、データを提供することができる。
【０００３】
[0002]これらおよび他のシナリオに鑑みて、サーバー／クライアントアーキテクチャーは、各装置上で実行される専門化された技術に繋がっている。いくつかの場合、そのような専門化は、サーバーおよびクライアントの異なる状況の観点から直接対照的な開発に繋がっている。たとえば、サーバー装置は、サーバーコンテキストに向けて専門化されたコードをしばしば伴い、そのサーバー装置は、たとえば、いくつかのクライアントに代わって並行してアプリケーションを実行する；実行可能で拡張可能な事柄で要求を満たす（たとえば要求を迅速に満たし、ユーザーインターフェースに対する依存を軽減する、または無くすように処理するのを促進するために、高度に最適化されたコードを実行する）；ステートフルな（ｓｔａｔｅｆｕｌ）相互作用を減少させ、そこではサーバーが、第２のトランザクションを履行するために、第１のトランザクションと関連付けられたデータを格納する；かつセキュリティーの脆弱性を緩和するために、異なるクライアントから受け取った要求の実行コンテキストを確認して分離する。同様に、クライアント装置は、クライアントのコンテキストに向けて専門化されたコードをしばしば伴い、そのクライアント装置は、たとえば、特定の装置構成に依存しない、プラットフォームにとらわれない言語で命令をエンコードする；ウェブブラウザー内で実行される命令を構成する；ロバストなユーザーインターフェースをプロビジョニングする；および第２のトランザクションを促進させるために、第１のトランザクションからの情報を持続するようにクライアント上に情報を記憶する（たとえばウェブブラウザーのキャッシュ中に格納されるクッキーの形態で）。これらおよび他のやり方で、サーバーおよびクライアントのコンテキストの専門化は、これらの異なる装置で実行される、極めて異なるタイプの命令に繋がっている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0003]この「発明の概要」は、「発明を実施するための形態」においてさらに後述される概念の選択を簡単な形で紹介するために提供される。この「発明の概要」は、特許請求される主題の重要なファクターまたは本質的な特徴を識別する意図はなく、特許請求される主題の範囲を限定するために使用する意図もない。
【０００５】
[0004]サーバーおよびクライアントのコンテキストの分岐的な専門化によって各タイプの装置の性能が推進される一方で、そのような分岐性のために様々な問題が引き起こされている。１つのそのような例として、サーバーが１つのタイプのコード（たとえばサーバーの能力のために特別に構成される命令）を実行し、クライアントが第２のタイプのコード（たとえば多くの装置上で同等に実行させることができるフレキシブルでプラットフォームにとらわれない命令）を実行した場合、そのような差により、サーバーアプリケーションおよびクライアントアプリケーションの相互間で動作可能な開発が、言語、アプリケーションプログラミングインターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）およびデータ標準の差を起因として複雑になる恐れがある。さらに、開発者は、２つの異なる言語、実行環境およびそれらの間で交換されるデータタイプおよびオブジェクトを変換するための技法を理解する必要がある。その結果、最近の開発は、これらの環境の開発、たとえばＮｏｄｅ．ｊｓモデルの開発および普及に収束してきており、それによって、サーバーコンテキストに専門化された言語構造体およびＡＰＩを有するサーバー側のジャバスクリプト（Ｊａｖａ（登録商標）Ｓｃｒｉｐ）コードが含まれて、それゆえサーバーコードおよびクライアントコードの開発を同じ言語でできるようになり、かつＡＰＩおよびデータ型を共有できるようになる。しかし、そのように収束したサーバーおよびクライアントの開発環境は、通常、サーバー装置上で実行されるサーバーアプリケーションと１つまたは複数のクライアント装置上で実行されるクライアントアプリケーションの相互作用において適用される。
【課題を解決するための手段】
【０００６】
[0005]単一装置上で使用するための収束したサーバーおよびクライアントの開発環境を適用するための技法を本明細書に提示する。特に、そのような技法によって、装置が、装置上で実行されるクライアントアプリケーションに代わってローカルイベントに関連する処理を、同じ装置上に設けられるローカルサーバーによって実行できるようになる。たとえば、装置は、ローカル装置イベントをモニターし、かつ１つまたは複数のローカルイベントをそれにサブスクライブするための、同じ装置上のクライアントアプリケーションによる要求を受け入れるように構成されているローカルサーバー（ウェブサーバーなど）を実行させることができる。ローカルサーバーは、また、１つまたは複数のサーバースクリプトを関連付けることができ、ローカルサーバーは、クライアントアプリケーションがサブスクライブしているローカルイベントの発生を検出すると、ローカル装置に代わってそのローカルイベントと関連付けられたサーバースクリプト（複数可）を実行することができる。
【０００７】
[0006]たとえば、ローカルイベントは、着信した音声通信セッションなどのモバイルイベントを含むことができ、クライアントアプリケーションは、音声通信セッションに対してある特定の処理、たとえばセッションを記録することを要求することができる。しかし、モバイル装置上で実行されるクライアントアプリケーションが、音声通信セッションの着信時に実行されていない可能性があり、それゆえ、そのようなローカルイベントの発生をモニターしていないこともある。あるいは、モバイル装置のセキュリティーモデルによって、通常、クライアンオアプリケーションがセキュリティーまたはサービス品質方策として、そのようなローカルイベントと相互作用しないように禁止することができる（たとえばローカルアプリケーションは、装置の分離構造体内で、たとえばウェブブラウザー内で実行させることがある）。むしろ本明細書に提示する技法によって、クライアントアプリケーションは、同じ装置上のローカルサーバー（絶えず、かつウェブブラウザーの外側で実行される）に対して、着信した音声通信セッションのローカルイベントを識別するサブスクリプション要求を発行することができる。ローカルサーバーは、そのようなイベントを検出すると、クライアントアプリケーションに代わってローカルイベントに関連する１つまたは複数のサーバースクリプトを実行することができる。さらに、サーバースクリプトは、クライアントアプリケーションと同様の開発環境で設計することができる（たとえばサーバースクリプトとローカルクライアントアプリケーションの両方をジャバスクリプトで書くことができ、そこでは、サーバースクリプトは、Ｎｏｄｅ．ｊｓでのサーバー側のＡＰＩを利用する）、それゆえ、これらの相互作用的なアプリケーションの開発が、一貫性があり互換性があるようにして促進される。そのような利点は、本明細書に提示するサーバー／クライアントアーキテクチャーの変形形態によって、達成可能とすることができる。
【０００８】
[0007]前述および関連する目的の達成に向けて、次の記述および付属図面によって、ある種の例示的な態様および実装形態を述べる。これらは、１つまたは複数の態様を採用することができる様々なやり方のいくつかだけを示す。本開示の他の態様、利点および新規な特徴は、付属図面とともに検討すると、次の詳細な説明から明らかになるはずである。
【図面の簡単な説明】
【０００９】
【図１】[0008]クライアント装置およびサーバー装置上に生じるイベントに関連するクライアントアプリケーションの要求を満たすためのクライアント／サーバーアーキテクチャーを示す例としてのシナリオの例示図である。
【図２】[0009]本明細書に提示する技法による、ローカルイベントに関連するクライアントアプリケーションの要求を満たすためのクライアント／サーバーアーキテクチャーを示す例としてのシナリオの例示図である。
【図３】[0010]本明細書に提示する技法による、ローカルイベントに関連するクライアントアプリケーションの要求を満たすように装置を構成する例としての方法の例示図である。
【図４】[0011]本明細書に提示する技法による、ローカルイベントに関連するクライアントアプリケーションの要求を満たすための例としてのシステムを示す構成要素ブロック図である。
【図５】[0012]本明細書に述べるプロビジョニングの１つまたは複数を具体化するように構成されているプロセッサー実行可能命令を含む例としてのコンピューター可読媒体の例示図である。
【図６】[0013]それぞれの構成要素が構成要素アドレスによって識別される、装置の構成要素によって生成されるローカルイベントに、ローカルアプリケーションがサブスクライブできるようにするイベントサブスクリプションモデルを特徴付ける例としてのシナリオの例示図である。
【図７】[0014]装置網の他の装置上で実行されるローカルクライアントアプリケーションとリモートクライアントアプリケーションの両方から受け取られるイベントサブスクリプション要求を受け取り満たすように構成されているローカルサーバーをそれぞれ実行させる装置のセットを含む装置網を特徴付ける例としてのシナリオの例示図である。
【図８】[0015]本明細書に述べるプロビジョニングの１つまたは複数を実施することができる例としての計算環境を例示する図である。
【発明を実施するための形態】
【００１０】
[0016]次に、特許請求される主題が、図面を参照して説明される、図面では、同様の参照番号が、全体にわたって同様の要素を参照するために使用される。次の記述では、説明する目的で、特許請求される主題を完全に理解してもらうために、多数の具体的な細部を述べる。しかし、特許請求される主題は、これらの具体的な細部が無くても、実施することができることは、明らかになり得る。他の事例では、特許請求される主題について述べるのを容易にするために、構造および装置をブロック図の形式で示す。
【００１１】
[0017]Ａ．序論
[0018]計算分野内では、多くのシナリオが、サーバー／クライアントアーキテクチャーを含み、それは、１つまたは複数のクライアントアプリケーションに代わって１つまたは複数のサービスを提供するサーバーアプリケーション（たとえばウェブサーバー）を含む。第１の例として、サービスは、クライアント装置のウェブブラウザー内でレンダリングされるウェブページおよびウェブアプリケーションを含むウェブコンテンツのプロビジョニングを含むことができる。第２の例として、サービスは、様々な装置上で実行可能なアプリケーションのセットを格納し、かつその上で実行させることができる１つまたは複数のアプリケーションを特定の装置に提供するように構成されているアプリケーションの記憶を含むことができる。第３の例として、サービスは、データの記憶（たとえばデータベース中に）およびそれぞれのクライアント装置上で実行される様々な「データ駆動型」のアプリケーション内で使用するためのそのようなデータのプロビジョニングを含むことができる。従来のモデルでは、サーバーアプリケーションは、装置の常駐プロセスとして、サービスをクライアントアプリケーションの提供するために、クライアントアプリケーションによって接続が開始されるのを待ち、クライアントアプリケーションによる要求を受け取り、そのような要求を満たすように動作する。
【００１２】
[0019]多くのそのようなシナリオでは、サーバーアプリケーションは、サーバー装置上で実行され、クライアントアプリケーションは、１つまたは複数のクライアント装置上で実行される。装置は、各役割に適した異なる能力を提示することができる。たとえば、クライアント装置は、ユーザーに代わってクライアントアプリケーションを実行するユーザー指向の装置（たとえばワークステーション、ラップトップ、タブレット、携帯電話または他の電化製品）を含むことができ、そのような相互作用（たとえばタッチ可能な入力装置、高解像度ディスプレイおよび音声構成要素を含む）に向けて専門化することができる。それに反して、サーバー装置は、サービス指向の装置（たとえば専用のディスプレイ構成要素を欠いた「ヘッドレス（ｈｅａｄｌｅｓｓ）」サーバー構成要素）を含むことができ、非常に性能基準を満たすやり方でサービス要求を満足させるように専門化することができる（たとえばハイスループットのプロセッサー、大容量データキャッシュおよび豊富なネットワークリソースを有する）。サーバー装置は、サーバーファームの形で相互運用される、いくつかのサーバー装置を含むことができる。つまり、クライアント装置は、ユーザー経験にアピールするように構成することができ、一方サーバー装置は、サービス要求の取り扱いを迅速に処理し、そのような装置の信頼性を助長するように構成することができる（たとえばサーバーファーム中に設けられるフェイルオーバー能力を通じて）。
【００１３】
[0020]これらおよび他の考慮事項の観点で、サーバーアプリケーションを開発するための技法は、通常、いくつかの注目すべき点で、クライアントアプリケーションを開発するための技法と異なってきている。第１の例として、クライアントアプリケーションは、広範な様々なクライアント装置上で実行されようにしばしば考案され、したがってプラットフォームにとらわれない言語（たとえばジャバスクリプト、それは、いずれものウェブブラウザー内で実行させることが可能である）で開発することができる。対照的に、サーバーアプリケーションは、性能を高めるために、サーバーの特定の構成に向けて高度に調整しカスタマイズする開発技法を使用してしばしば開発される。第２の例として、クライアントアプリケーションは、「ステートフルな（ｓｔａｔｅｆｕｌ）」ように、すなわちクライアントアプリケーションによってサーバー装置に発行される第２の要求に対してコンテキストおよび継続性をもたらすために、クライアントアプリケーションによってサーバー装置に発行される第１の要求に関するある情報を持続するように考案することができる。たとえば、ウェブブラウザーは、サーバーがクライアント装置を後で再び識別できるようにするために、ユーザーのマシン上に「クッキー」を格納するようにしばしば構成されている。対照的に、サーバーアプリケーションは、「ステートレスな（ｓｔａｔｅｌｅｓｓ）」やり方でしばしば考案され、それによって、いずれかの特定の第１のトランザクションに関して格納されるデータは、多くのクライアントアプリケーションに代わって遂行するとき、サーバーアプリケーションのスケーラビリティーを高めるために、減少される。
【００１４】
[0021]図１は、サーバー装置１０２上で実行されるサーバーアプリケーション１０４とクライアント装置１０６上で実行されるクライアントアプリケーション１０８の相互作用を特徴付ける、例としてのシナリオ１００の例示図を提示する。サーバー装置１０２は、ネットワーク（たとえばインターネットまたはローカルエリアネットワーク（ＬＡＮ））に接続することができ、１つまたは複数のクライアントアプリケーション１０８からの接続を待つように構成されている。クライアントアプリケーション１０８は、そのような接続時に、１つまたは複数の要求、たとえばウェブコンテンツ、クライアント装置１０６上で実行可能なアプリケーションまたは「データ駆動型」のアプリケーションによって利用されるデータを求める要求をサーバーアプリケーション１０４に提供することができる。サーバーアプリケーション１０４は、クライアントアプリケーション１０８に代わってそのような要求を満たすことができ、クライアント装置１０６は、そのようなサービスの結果をユーザー１１０に提示することができる。サーバーアプリケーション１０４は、これらの装置の異なる役割を果たすために、しばしば、サーバー装置１０２の特定の能力を利用するように特別に構成されている。対照的に、クライアントアプリケーション１０８は、しばしば、ジャバスクリプトなどの高水準言語で提供され、特定のクライアント装置１０６の能力にかかわりなく、広範な様々なクライアント装置１０６上で実行させることができる。
【００１５】
[0022]具体的な例として、サーバーアプリケーション１０４は、サーバー装置１０２が検出したサーバーイベント１１２、たとえばサーバー装置１０２による新しいデータの受領またはローカル環境の状況のモニタリング（たとえばサーバー装置１０２が位置付けられている環境の気象モニタリングまたはそれを捉えた画像）について、クライアントアプリケーション１０８および／またはクライアント装置１０６に通知するように設けることができる。クライアントアプリケーション１０８は、そのようなサーバーイベント１１２に関する通知を要求することができ、サーバーアプリケーション１０４は、サーバーイベント１１２検出時に、サーバーイベント通知１１４をクライアントアプリケーション１０８に送ることができる。加えて、クライアント装置１０６は、クライアント装置イベント１１６、たとえばユーザー１１０または入力構成要素から受け取られるユーザー入力をモニターすることができ、クライアント装置イベントのモニタリング１１８を実行し、それによって検出して、そのようなサービスをレポートすることができる。たとえば、クライアント装置１０６は、ハードウェアイベントをモニターし、そのようなハードウェアイベントをレポートするクライアント装置イベントに関する通知１２０をクライアントアプリケーション１０８に提供するように構成されているハードウェアドライバーを含むことができる。このように、異なる役割で異なる装置上で実行されるサーバーアプリケーション１０４およびクライアントアプリケーション１０８は、サーバーアプリケーション１０４によって検出されたサーバーイベント１１２およびクライアント装置イベントのモニタリング１１８によって検出されたクライアント装置イベント１１６について、クライアントアプリケーション１０８に知らせるように相互運用することができる。
【００１６】
[0023]しかし、図１の例としてのシナリオ１００で提示したアーキテクチャーは、いくつかの弱点を示す恐れがある。特に、サーバーアプリケーション１０４の開発は、サーバー装置１０２が専門化される性質の点から、様々な装置のために汎用化された言語によるクライアントアプリケーション１０８の開発とは著しく異なる可能性がある。開発環境および言語が異なるので、開発者は、両方の開発環境を理解し、サーバーアプリケーション１０４とクライアントアプリケーション１０８の相互運用に対する差をネゴシエートする必要があり得る（たとえば利用できるアプリケーションプログラミング環境（ＡＰＩ）およびデータフォーマット変換における差に対処する）。そのような差を調和させるために、より最近のサーバーアプリケーション開発モデルは、そのような相互運用のアプリケーションの開発で一貫性をもたらすクライアントアプリケーション開発に収斂してきている。第１の例として、ジャバスクリプトは、サーバーアプリケーションに対して不適切に性能基準を満たすと従来見なされてきたが、開発者コミュニティの間でジャバスクリプが広く熟知されるようになったので、Ｎｏｄｅ．ｊｓでのジャバスクリプトのコードをサーバー側で実行させるジャバスクリプトのモジュールによる開発に繋がってきている。第２の例として、サーバーが、より効率の良いやり方で、たとえばジャバスクリプトを、サーバー装置１０２上でより速く実行させることができるネイティブコードにコンパイルすることによって、高水準言語（ジャバスクリプトなど）を実行できるようにする技法が考案されてきた。したがって、開発者は、サーバーアプリケーション１０４とクライアントアプリケーション１０８の両方を開発するために、同じ言語および同様のＡＰＩを使用することができる。そのように収斂した技術に鑑みて、新しいシナリオでサーバー側のコードを利用する技法を考案することができる。
【００１７】
[0024]Ｂ．提示される技法
[0025]サーバーアプリケーション１０４が、クライアント装置１０６と関連付けられたクライアント装置イベント１１６に関連するサービスを提供することができる１つのそのようなシナリオを本明細書に提示する。特に、サーバーアプリケーション１０４は、装置１０６上で実行することができ、それによって、同じ装置上で実行する１つまたは複数のクライアントアプリケーション１０８にローカルイベント関連のサービスを提供する。たとえば、従来のウェブサーバーは、クライアント装置１０７上で受動的に、しかし連続的に実行することができ、同じクライアント装置１０６上においてウェブブラウザー内で実行する１つまたは複数のローカルクライアントウェブアプリケーションによって開始されるローカルイベントサービスを求める要求を待つことができる。そのような要求は、たとえばローカルイベントについてクライアント装置１０６に通知するステップ、またはクライアントアプリケーション１０８に代わってローカルイベントに関連するある処理を適用するステップを含むことができる。サーバーアプリケーション１０４が、そのようなクライアント装置イベント１１６をモニターし、かつその装置イベント１１６に対する実行を適用できるようにすることによって、このモデルは、このモニタリングおよび計算の負荷をクライアントアプリケーション１０８から取り除くことができ、そのモデルは、高度に相互作用的な、その場その場のやり方でユーザー１１０の要求について実行することができる（たとえばクライアント装置イベント１１６のモニタリングおよび取り扱いは、クライアントアプリケーション１０８がユーザー１１０によって終了された後でさえ、続くことができる）。加えて、このモデルは、クライアント装置イベント１１６とサーバーアプリケーション１０４との相互作用を有効にすることができるが、そのような相互作用は、クライアントアプリケーション１０８が許可することはできない。たとえば、クライアントアプリケーション１０８は、セキュリティーの理由から、クライアントアプリケーション１０８をローカルクライアント装置イベント１１６から分離するウェブブラウザー内で実行することができるが、しかし、クライアントアプリケーション１０８は、サーバーアプリケーション１０４を要求することができ、そのサーバーアプリケーションは、ウェブブラウザーの外側で、許可を受けた能力のより広いセットを用いて実行し、検証でき信頼されるやり方でクライアント装置イベント１１６と相互作用する。
【００１８】
[0026]図２は、本明細書に提示する技法によって構成されるクライアント／サーバーアーキテクチャーを特徴付ける、例としてのシナリオ２００の例示図を提示する。この例としてのシナリオ２００では、クライアント装置１０６は、サーバーアプリケーション１０４と１つまたは複数のクライアントアプリケーション１０８の両方を実行し、クライアントアプリケーション１０８が、クライアントサーバーアプリケーション１０４との相互作用を通じてローカルイベント２０６と相互作用できるようにすることができる。特に、サーバーアプリケーション１０４は、様々なローカルイベント２０６のコンテキスト中で実行されるとき、異なるタイプの処理を行う１つまたは複数のサーバースクリプト２０２を含むことができる。クライアントアプリケーション１０８は、サーバーアプリケーション１０４に対して、クライアント装置１０６内で生じる可能性がある１つまたは複数の特定のローカルイベント２０６を識別するイベントサブスクリプション要求２０４を出すことができる。サーバーアプリケーション１０４は、１つまたは複数のサーバースクリプト２０２をローカルイベント２０６と関連付けることによって、したがって、そのようなローカルイベント２０６が発生したとき、サーバーアプリケーション１０４は、サブスクライブしたクライアントアプリケーション１０８に代わってサーバースクリプト２０２のサーバースクリプトの実行２０８を実行することができて、イベントサブスクリプション要求２０４を満たすことができる。
【００１９】
[0027]図２の例としてのシナリオ２００で提示したアーキテクチャーのモデルは、他のローカルイベント処理モデルに関して様々な利点を可能にすることができる。第１の例として、アーキテクチャーは、サーバーアプリケーション１０４が、ローカルイベント２０６をバックグラウンドで連続的にモニターできるようにすることができ、信用されるサーバースクリプト２０２の実行によって、ローカルイベント２０６が信用されるように処理され、一方、信用されないクライアントアプリケーション１０４は、間欠的に、信用されないやり方で（たとえばウェブブラウザーの分離構造体内で）実行されることができる。第２の例として、広範囲なローカルイベント２０６をモニターし、それに対して処理を適用するように１つのサーバーアプリケーション１０４を提供することは、ローカルイベント２０６の同じセットをモニターするように、いくつかのクライアントアプリケーション１０８のそれぞれを構成することより効率的であることができる。第３の例として、サーバースクリプト２０２は、クライアントアプリケーション１０４と同様の開発環境で開発することができる（たとえば、サーバースクリプト２０２は、Ｎｏｄｅ．ｊｓでのジャバスクリプトのサーバー側のプログラミングモデルを利用することができ、クライアントアプリケーション１０４は、クライアント装置１０２のウェブブラウザー内で実行するクライアント側のジャバスクリプトとして開発することができる）。たとえば、ローカルイベント２０６は、クライアントアプリケーション１０４がそれを直接処理することがしばしば許可されないイベント、たとえば低レベルのハードウェアイベントまたはクライアントアプリケーション１０４がそれと相互作用することを禁じられている、クライアント装置１０２の異なるプロセス内で生じるイベントを含むことができる。第４の例として、これらの技法は、リモート装置上のサービスの呼び出しとして情報を送ることよりはむしろ同じユーザー装置上で情報を処理することによって、ユーザーが流布させたいと望まない可能性がある情報、たとえばユーザーに私的な情報（たとえばユーザーのアイデンティティーおよびロケーション）および／またはセキュリティー情報（たとえばパスワード）の分離を推進する。第５の例として、同じ装置上で実行されるクライアントアプリケーションのサービス中にサーバーによって実行されるアプリケーションのプログラミングシナリオは、新規の計算シナリオを提供することができ、そのようなアプリケーションのまわりで新しいマーケットの開発を可能にすることができる。これらおよび他の利点は、図２の例としてのシナリオ２００で例示したアーキテクチャーおよび本明細書に提示する技法を通じて達成可能とすることができる。
【００２０】
[0028]Ｃ．例示的な実施形態
[0029]図３は、本明細書に提示する技法の第１の例としての実施形態を提示し、それは、プロセッサーを有し、少なくとも１つのローカルクライアントアプリケーション１０８を実行する装置上で要求を満たす例としての方法３００として例示する。例としての方法３００は、たとえば、装置のメモリー構成要素、たとえばメモリー回路、ハードディスクドライブの円盤状の記憶媒体、半導体記憶装置、または磁気または光ディスク中に格納され、かつ装置において実行されたとき、その装置に本明細書に提示する技法に従って動作させるように編成される命令のセットとして、実装することができる。例としての方法３００は、３０２で開始され、装置のプロセッサー上で命令を実行するステップ３０４を含む。具体的には、これらの命令は、少なくとも１つのサーバースクリプト２０２を、装置で生じる可能性がある少なくとも１つのローカルイベント２０６と関連付けるローカルサーバーを生成３０６するように構成することができる。命令は、また、ローカルクライアントアプリケーション１０８から、選択されたローカルイベント２０６を指定するイベントサブスクリプション要求２０４を受け取ると、選択されたローカルイベント２０６をローカルクライアントアプリケーション１０８と関連付ける３０８ように構成されている。命令は、また、少なくとも１つのサーバースクリプト２０２およびローカルクライアントアプリケーション１０８と関連付けられたローカルイベントを検出すると、ローカルサーバー内で、ローカルクライアントアプリケーション１０８に代わってローカルイベント２０６と関連付けられ、かつそれに関連するサーバースクリプト２０２を実行３１０するように構成されている。ローカルクライアントアプリケーション１０８に代わってローカルイベント２０６を、同じ装置上で実行されるローカルサーバーを使用して処理を達成すると、例としての方法３００は、本明細書に提示する技法を達成し、したがって３１２で終了する。
【００２１】
[0030]図４は、本明細書に提示する技法の第２の例としての実施形態を提示し、それは、プロセッサー４０４を有し、少なくとも１つのローカルクライアントアプリケーション１０８を実行する装置４０２上で要求を満たすように構成されている例としてのシステム４０６を特徴付ける、例としてのシナリオ４００として例示する。例としてのシステム４０６は、たとえば、装置４０２のメモリー構成要素中に格納され、かつプロセッサー４０４上で実行されたとき、装置４０２に本明細書に提示する技法に従って動作させるように構成されている命令として実装することができる。例としてのシステム４０６は、少なくとも１つのサーバースクリプト２０２を少なくとも１つのローカルイベント２０６と関連付けるように構成されているローカルサーバー構成要素４０８を含む。例としてのシステム４０６は、また、ローカルサーバーのバインド構成要素４１０を含み、その構成要素は、選択されたローカルイベント２０６を指定するイベントサブスクリプション要求２０４をクライアントアプリケーション１０８から受け取ったとき、選択されたローカルイベント２０６をローカルクライアントアプリケーション１０８と関連付け；かつ少なくとも１つのサーバースクリプト２０２およびクライアントアプリケーション１０８と関連付けられたローカルイベント２０６を検出すると、ローカルサーバー構成要素４０８内で、クライアントアプリケーション１０８に代わってローカルイベント２０６と関連付けられ、かつそれに関連するサーバースクリプト２０２を実行するように構成されている。例としてのシステム４０６は、ローカルイベント２０６の発生をモニターし、そのローカルイベント２０６に応答してクライアントアプリケーション１０８に代わってサーバースクリプト２０２を実行することによって、装置４０２内で本明細書に提示する技法のアプリケーションを達成する。
【００２２】
[0031]なお別の実施形態は、本明細書に提示する技法を適用するように構成されているプロセッサー実行可能命令を含むコンピューター可読媒体を含む。そのようなコンピューター可読媒体は、たとえば、有体形の装置、たとえばメモリー半導体（たとえばスタティックランダムアクセスメモリー（ＳＲＡＭ）、ダイナミックランダムアクセスメモリー（ＤＲＡＭ）および／または同期型ダイナミックランダムアクセスメモリー（ＳＤＲＡＭ）の技術を利用する半導体）、ハードディスクドライブの円盤状の記憶媒体、フラッシュメモリー装置、または磁気または光ディスク（たとえばＣＤ−Ｒ、ＤＶＤ−Ｒまたはフロッピー（登録商標）ディスク）を含み、かつ装置のプロセッサーによって実行されたとき、装置に本明細書に提示する技法を実装させるコンピューター可読命令のセットをエンコードするコンピューター可読記憶媒体を含むことができる。そのようなコンピューター可読媒体は、また、様々なタイプの通信媒体、たとえば様々な物理的な現象（たとえば電磁信号、音波信号または光信号）を通じて、かつ様々な有線のシナリオ（たとえばイーサネット（登録商標）または光ファイバーケーブルを介して）および／または無線のシナリオ（たとえばＷｉＦｉなどの無線ローカルエリアネットワーク（ＷＬＡＮ）、ブルーツゥースなどのパーソナルエリアネットワーク（ＰＡＮ）またはセル形式または無線のネットワーク）の形態で伝搬させることができる信号を含むことができ（コンピューター可読記憶媒体とはっきりと異なる技術のクラスとして）、その通信媒体は、装置のプロセッサーによって実行されたとき、装置に本明細書に提示する技法を実装させるコンピューター可読命令のセットをエンコードする。
【００２３】
[0032]これらの方法で考案することができる例としてのコンピューター可読媒体を図５に例示し、実装形態５００は、コンピューター可読媒体５０２（たとえばＣＤ−Ｒ、ＤＶＤ−Ｒまたはハードディスクドライブの円盤状の記憶媒体）を含み、そこにはコンピューター可読データ５０４がエンコードされる。このコンピューター可読データ５０４は、次いで、本明細書に述べる原理に従って動作するように構成されているコンピューター命令５０６のセットを含む。１つのそのような実施形態では、プロセッサー実行可能命令５０６は、ローカルイベント１０５に関連するクライアントアプリケーション１０８の要求を満たす方法５０８、たとえば図３の例としての方法３００を実行するように構成することができる。別のそのような実施形態では、プロセッサー実行可能命令５０６は、ローカルイベント２０６に関連するクライアントアプリケーション１０８の要求を満たすためのシステム、たとえば図４の例としてのシステム４０６を実装するように構成することができる。このコンピューター可読媒体のいくつかの実施形態は、このように構成されるプロセッサー実行可能命令を格納するように構成されているコンピューター可読記憶媒体（たとえばハードディスクドライブ、光ディスクまたはフラッシュメモリー装置）を含むことができる。本明細書に提示する技法に従って動作するように構成されている、多くのそのようなコンピューター可読媒体は、当業者によって考案することができる。
【００２４】
[0033]Ｄ．変形形態
[0034]本明細書で議論する技法は、多くの態様で変形形態を用いて考案することができ、いくつかの変形形態は、これらおよび他の技法の他の変形形態に関して追加の利点をもたらす、および／または弱点を緩和することができる。さらに、いくつかの変形形態は、組み合わせて実装することができ、いくつかの組み合わせは、相乗的な協調作用を通じて追加の利点を特徴付ける、および／または弱点を緩和することができる。変形形態は、様々な実施形態（たとえば図３の例としての方法３００および図４の例としてのシステム４０６）中に組み込み、そのような実施形態に対して個別の、および／または相乗的な利点を与えることができる。
【００２５】
[0035]Ｄ１．シナリオ
[0036]これらの技法の実施形態の間で変わることができる第１の態様は、そのような技法を利用することができるシナリオに関するものである。
【００２６】
[0037]この第１の態様の第１の変形形態として、本明細書に提示する技法は、多くのタイプの装置４０２、たとえばサーバー、サーバーファーム、ワークステーション、ラップトップ、タブレット、携帯電話、ゲームコンソールおよびネットワーク電化製品とともに利用することができる。そのような装置４０２は、また、様々な計算構成要素、たとえば有線または無線の通信装置；ヒューマン入力装置、たとえばキーボード、マウス、タッチパッド、タッチセンサー式ディスプレイ、マイクロフォンおよびジェスチャーベースの入力構成要素；自動入力装置、たとえばスチールまたはモーションカメラ、全地球測位（ＧＰＳ）装置および他のセンサー；出力装置、たとえばディスプレイおよびスピーカー；および通信装置、たとえば有線および／または無線のネットワーク構成要素を提供することができる。
【００２７】
[0038]この第１の態様の第２の変形形態として、本明細書に提示する技法は、様々なタイプのサーバーアプリケーション１０４、たとえばウェブサーバー、ファイルサーバー、アプリケーションサーバー、メディアサーバー、ピアツーピア分担調整（ｐｅｅｒ−ｔｏ−ｐｅｅｒ  ｓｈａｒｉｎｇ  ｃｏｏｒｄｉｎａｔｉｏｎ）サーバー、データベースサーバー、電子メールサーバー、物理的測定基準モニタリングサーバーおよび監視制御およびデータ収集（ＳＣＡＤＡ：ｓｕｐｅｒｖｉｓｏｒｙ  ｃｏｎｔｒｏｌ  ａｎｄ  ｄａｔａ ａｃｑｕｉｓｉｔｉｏｎ）自動サーバーとともに利用することができる。
【００２８】
[0039]この第１の態様の第３の変形形態として、本明細書に提示する技法は、多くのタイプのクライアントアプリケーション１０８、たとえばウェブブラウザー、ファイル共有アプリケーション、メディアレンダリングアプリケーションおよびデータ駆動型クライアントアプリケーションにサービスを提供するために利用することができる。さらに、クライアントアプリケーション１０８は、様々なコンテキスト、たとえば装置４０２上でのネイティブ実行（ｎａｔｉｖｅ  ｅｘｅｃｕｔｉｏｎ）で、１つまたは複数の管理ランタイムによって推進される管理される実行；仮想環境内の仮想実行、たとえばウェブブラウザー内で実行されるウェブアプリケーション；および分離構造内での分離された実行を実行させることができる。そのようなクライアントアプリケーション１０８、たとえば装置４０２とバンドルされるクライアントアプリケーション１０８；様々なサービス、たとえばネットワークによって提供され、アプリケーションサーバーから読み出されるクライアントアプリケーション；ウェブページ中に埋め込まれたコンテンツ；装置４０２の構成要素によって提供されるハードウェアまたはソフトウェアのドライバー；またはサーバーアプリケーション１０４によって提供されるクライアントアプリケーション１０８は、また、様々な技法を通じて、装置４０２が受け取ることができる。これらおよび他のシナリオは、本明細書に提示する技法に適合することができ、有利にもそれを利用することができる。
【００２９】
[0040]Ｄ２．ローカルイベントおよびサーバースクリプトタイプ
[0041]本明細書に提示する技法の実施形態の間で変わることができる第２の態様は、サーバーアプリケーション１０４がモニターすることができるローカルイベント２０６のタイプと、サーバーアプリケーション１０４が、そのようなローカルイベント２０６の発生時に１つまたは複数のクライアントアプリケーション１０８に代わって実行することができるサーバースクリプト２０２のタイプとを含む。
【００３０】
[0042]この第２の態様の第１の変形形態として、本明細書に提示する技法は、装置４０２上での多くのタイプのローカルイベント２０６、たとえば装置４０２の入力構成要素によるローカル入力の受領を含むローカル入力イベント；装置の検出器によるローカルユーザーから受け取られる相互作用の存在の検出またはそれのアイデンティティーを示すローカルユーザーイベント；装置によるローカルデータ処理インスタンスの完了を示すローカル処理イベント；またはクライアントアプリケーション１０８によるサーバーアプリケーション１０４に向けたイベントサブスクリプション要求２０４のモニタリングに関連することができるものである。１つのそのような例として、ローカルイベント２０６は、装置４０２上での第３のアプリケーション（サーバーアプリケーション１０４およびクライアントアプリケーション１０８以外）、たとえばハードウェアドライバー、オペレーティングシステムの構成要素、別のサーバーアプリケーション１０４または別のクライアントアプリケーション１０８の実行の間に生じるローカルアプリケーションイベントを含むことができる。したがって、サーバーアプリケーション１０４は、ローカルアプリケーションイベント（たとえば第３のアプリケーションのインスタンス化；第３のアプリケーションの一時停止、完了または終了；第３のアプリケーション内で生じる論理的例外）の発生を検出するために、装置４０２上で第３のアプリケーションの実行をモニターすることができ、ローカルアプリケーションイベントと関連付けられた１つまたは複数のサーバースクリプト２０２を実行することができる。さらに、第３のアプリケーションは、第３のアプリケーションにカスタムの１つまたは複数のアプリケーション固有のイベントを定義することができ、サーバーアプリケーション１０４は、別のクライアントアプリケーション１０８に代わって実行するために、１つまたは複数のサーバースクリプト２０２をアプリケーション固有のイベントと関連付けることができる。
【００３１】
[0043]この第２の態様の第２の変形形態として、サーバースクリプト２０２は、ローカルイベント２０６に関連する多くのタイプの処理、たとえばローカルイベント２０６をクライアントアプリケーション１０８にレポートすること、ローカルイベント２０６の発生をログすること、またはローカルイベント２０６の取り扱いの間に追加のロジックを適用することを指定することができる。さらに、サーバースクリプト２０２は、多くのソースから受け取ることができる；たとえば、サーバースクリプト２０２は、サーバーアプリケーション１０４とともに含めることができる、ユーザー１１０が提供することができる、装置４０２に備える、および／またはそれによって自動的に生成することができる、あるいはクライアントアプリケーション１０８または外部のソースから受け取ることができる。さらに、サーバーアプリケーション１０４は、サーバースクリプト２０２の完了時に、クライアントアプリケーション１０８に通知するように構成することができる。たとえば、クライアントアプリケーション１０８によって出されるイベントサブスクリプション要求２０４は、ローカルイベント２０６を検出すると、および／またはローカルイベント２０６と関連付けられたサーバースクリプト（複数可）２０２の実行が完了したとき、アプリケーションのコールバックが起動されるように指定することができる。
【００３２】
[0044]この第２の態様の第３の変形形態として、本明細書に提示する技法は、多くのタイプのサーバースクリプト２０２の実行を含むことができる。この第３の変形形態の第１の例として、そのようなサーバースクリプト２０２は、Ｎｏｄｅ．ｊｓモジュールを起動するサーバー側のジャバスクリプトを含む様々な技術を使用して、ローカルウェブサーバーによって実行されるように設計することができる。
【００３３】
[0045]この第３の変形形態の第２の例として、サーバースクリプト２０２は、装置４０２のプロセスの動作を中断することができるブロック要求を含むことができる。たとえば、サーバースクリプト２０２は、非常に長い計算を含む複雑なロジックを含むことがある、または別のプロセスが、現在独占的に利用しているデータまたはリソースへのアクセスを含むことがある。そのようなブロック要求は、クライアントアプリケーション１０８では持続不可能とすることができる（たとえばブロック要求を発行するウェブアプリケーションは、一時的に、または無期限に中断させることができ、それゆえユーザーインターフェースおよび／またはウェブアプリケーションを含むウェブブラウザーが中断される、および／または処理タイムアウト閾値を超える可能性があり、ウェブアプリケーションを終了させることになる）。その代わりに、クライアントアプリケーション１０８は、そのようなブロック要求をサーバーアプリケーション１０４に委託することができ、サーバースクリプト２０２は、ブロック要求および／またはロジックをブロック要求の後で実行するように指定する。バックグラウンドで実行されるサーバーアプリケーション１０４は、装置４０２のいずれものフォアグラウンドのプロセスを中断することなく、そのようなブロック要求をブロック可能なスレッドとして持続的に実行することができる、および／または延長される期間、容認可能にブロック要求の処理を継続することができる（たとえば、長時間実行されるプロセスの完了またはリソースの利用できるのを待つ）。
【００３４】
[0046]この第３の変形形態の第３の例として、サーバースクリプト２０２は、非同期のプロセスの完了を達成したとき、サーバースクリプトのコールバックが起動されるように指定することができる。サーバースクリプトのコールバックは、サーバースクリプト２０２によって、サーバーアプリケーション１０４によって、ユーザー１１０によって、および／またはクライアントアプリケーション１０８によって指定することができる。１つのそのような例として、クライアントアプリケーション１０８のサブスクリプション要求は、クライアントのユーザーインターフェースイベントと関連付けることができる（たとえば、クライアントアプリケーション１０８は、ユーザー１１０からの入力のある形態を待つことができる）、クライアントアプリケーション１０８は、入力を検出すると、アプリケーションのコールバックが起動されるように指定することができる。サーバーアプリケーション１０８は、サブスクリプション要求２０４を受け取ったとき、クライアントアプリケーション１０８のアプリケーションのコールバックを起動するように、サーバースクリプト２０２を構成する、または生成することができ、サーバースクリプト２０２を、ユーザー入力の検出を含むローカルイベント２０６と関連付けることができる。装置４０２は、そのなかでもたらされるクライアントのユーザーインターフェースイベントを含むクライアントアプリケーション１０８の実行を継続することができ、それゆえ、そのような検出のために入力構成要素をモニターする必要がなく（たとえばポーリングを介して）、クライアントアプリケーション１０８に、ユーザー入力イベントの検出について通知できるようにすることができる。これらおよび他のタイプのローカルイベント２０６および／またはサーバースクリプト２０２は、本明細書に提示するサーバー／クライアントアーキテクチャーおよび技法中に含めることができる。
【００３５】
[0047]Ｄ３．サーバースクリプトのサブスクリプションおよび実行
[0048]これら技法の実施形態の間で変わることができる第３の態様は、方法を含み、その方法によって、サーバーアプリケーション１０８は、それぞれのクライアントアプリケーション１０８からサブスクリプション要求２０４を受け入れる、および／または１つまたは複数のクライアントアプリケーション１０８に代わってローカルイベント２０６と関連付けられたサーバースクリプト（複数可）２０２を実行する。
【００３６】
[0049]この第３の態様の第１の変形形態として、サーバーアプリケーション１０４は、クライアントアプリケーション１０８がそれに対してサブスクライブすることができる、利用できるローカルイベント２０６に関する情報を提供することによって、ローカルイベント２０６についてのクライアントアプリケーション１０８のサブスクリプションを容易にすることができる。たとえば、サーバーアプリケーション１０４は、クライアントアプリケーション１０８からサブスクライブ可能なローカルイベント２０６のセットを識別する要求を受け取ったとき、クライアントアプリケーション１０８がサブスクライブ可能なローカルイベント２０６を列挙することができる。代替えとして、サーバーアプリケーション１０４は、クライアントアプリケーション１０８によってクエリー可能な、サブスクライブ可能なローカルイベント２０６のディレクトリーを単に維持することができる。
【００３７】
[0050]この第３の態様の第２の変形形態として、ローカルサーバーアプリケーション１０４は、多くのやり方でサブスクライブ可能なローカルイベント２０６を識別することができる。１つのそのような例として、それぞれのローカルイベント２０６は、ローカルイベントアドレス、たとえばクライアントアプリケーション１０８が、ローカルサーバーアプリケーション１０４からそれを通じてリソースを要求することができるハイパーテキスト転送プロトコル（ＨＴＴＰ：ｈｙｐｅｒｔｅｘｔ  ｔｒａｎｓｐｏｒｔ  ｐｒｏｔｏｃｏｌ）アドレスと関連付けることができる。ローカルサーバーアプリケーション１０４は、特定のアドレスを指定するクライアント要求を受け取ったとき、そのアドレスが、ローカルイベント２０６に対するサブスクリプション要求と関連付けられたローカルイベントアドレスであるのかどうかを決定することができ、そうである場合、クライアント要求を、ローカルクライアントアプリケーション１０８によって開始されたイベントサブスクリプション要求２０４として取り扱うことができる。さらなるそのような例として、装置４０２のそれぞれの構成要素は、その構成要素の構成要素名を含むローカルイベントアドレスによって識別することができ、ローカルクライアントアプリケーション１０８は、構成要素の構成要素名を含むローカルイベントアドレスを指定するクライアント要求を開始することによって、そのような構成要素を含むローカルイベント２０６をサブスクライブすることができる。
【００３８】
[0051]図６は、本明細書に提示する技法のこれらの変形形態のいくつかを特徴付ける、例としてのシナリオ６００の例示図を提示する。この例としてのシナリオ６００では、装置４０２は、１つまたは複数のローカルクライアントアプリケーション１０８がそれについてサブスクライブすることができるローカルイベント２０６を生成することができる構成要素のセット、たとえばユーザー１１０がポインター入力を生成するように動作可能なマウス構成要素６０２；ユーザー１１０がスチールまたはモーション画像を取るように動作可能なカメラ構成要素６０４；および専門化されたタイプの処理を実行するように構成されているプロセッサー構成要素６０６（たとえばレイトレーシング（ｒａｙ−ｔｒａｃｅｄ）のグラフィックプロセッサー）を含む。装置４０２は、それぞれの構成要素を構成要素アドレス６１２と関連付けることによって、そのようなイベントサブスクリプション要求２０４を満たすように、ローカルサーバーアプリケーション１０４を利用することができる。クライアントアプリケーション１０８は、ローカルサーバーアプリケーション１０４に、イベント列挙要求６０８（たとえば、ローカルクライアントアプリケーション１０８がそれをサブスクライブすることができる、ローカルクライアントアプリケーション１０８にアクセス可能な構成要素を含む、ローカルイベント２０６のタイプを、ローカルサーバーアプリケーション１０４が列挙するように求める要求）を送ることができ、ローカルサーバーアプリケーション１０４は、それぞれの構成要素について、ローカルクライアントアプリケーション１０８が、構成要素によって生成されるローカルイベント２０６をサブスクライブするために指定することができる構成要素アドレス６１２を識別するサブスクライブ可能なイベントの列挙６１０を用いて、応答することができる。ローカルクライアントアプリケーション１０８が、サーバーアプリケーション１０４に、構成要素の構成要素アドレス６１４を指定するイベントサブスクリプション要求２０４を送った場合、そのとき、ローカルサーバーアプリケーション１０４は、ローカルアプリケーション１０８をその構成要素によって生成されるローカルイベント２０６と関連付けることができ、そのようなローカルイベント２０６を検出すると、装置４０２の構成要素によって生成されるローカルイベント２０６と関連付けられ、かつそれに関連するサーバースクリプト２０２を実行することができる。このように、ローカルサーバーアプリケーション１０４は、ローカルクライアントアプリケーション１０８と装置４０２の構成要素との相互作用を可能にし、仲立ちすることができる。
【００３９】
[0052]この第３の態様の第３の変形形態として、装置４０２は、１つまたは複数のローカルクライアントアプリケーション１０８にローカルイベントサブスクリプションサービスを提供するローカルサーバーアプリケーション１０４を提供することに加えて、また、他の装置４０２上で実行される他のアプリケーションを含むことができる（たとえば従来のマルチデバイスのサーバー／クライアントアーキテクチャーも含むように、本明細書で提供されるローカルサービスモデルを拡張する）。第１のそのような例として、装置４０２は、ローカルクライアントアプリケーション１０８が、ローカルサーバーアプリケーション１０４またはリモート装置上で実行されるリモートサーバーアプリケーションのどちらかをサブスクリプション要求の対象にすることができるようにし得る。装置４０２は、ローカルクライアントアプリケーション１０８のイベントサブスクリプション要求２０４の対象がローカルサーバーアプリケーション１０４であると決定すると、イベントサブスクリプション要求２０４をローカルサーバーアプリケーション１０４に提示することができるが；しかし、装置４０２は、イベントサブスクリプション要求２０４の対象がリモート装置のリモートサーバーアプリケーションを含むと決定すると、そのサブスクリプション要求２０４をリモート装置に転送することができる。代替実施形態または追加実施形態として、ローカルサーバーアプリケーション１０４は、ローカルクライアントアプリケーション１０８によって提供されたイベントサブスクリプション要求２０４を受け取りそれにサービスを提供することに加えて、第２の装置上で実行されるリモートクライアントアプリケーションから受け取られるイベントサブスクリプション要求２０４を受け取ることができ、リモートアプリケーションがサブスクライブされたローカルイベント２０６を検出すると、第２の装置上で実行されるリモートクライアントアプリケーションに代わってローカルイベント２０６と関連付けられ、かつそれに関連する１つまたは複数のサーバースクリプト（複数可）２０２を実行することによって、そのようなイベントサブスクリプション要求２０４を満たすことができる。１つのそのような例として、装置網として相互運用される装置のセットのそれぞれ上にローカルサーバーアプリケーション１０４を提供することが大いに有利であり得て、そこでは、各ローカルサーバーアプリケーション１０４は、同じ装置４０２上でローカルに実行されるローカルクライアントアプリケーション１０８、ならびに装置網の他の装置４０２上で実行されるリモートクライアントアプリケーションに代わって、ローカルイベント２０６に対するイベントサブスクリプション要求２０４にサービスを提供するように構成されている。
【００４０】
[0053]図７は、本明細書に提示する技法によって装置網７０２を含むいくつかの装置７０４の相互運用を特徴付ける、例としてのシナリオ７００の例示図を提示する。この例としてのシナリオ７００では、装置網７０２のそれぞれの装置７０４は、各装置７０４内で生じるローカルイベント２０６に関する情報を共有するために、互いに通信し合うことができる（たとえば有線または無線のネットワークを通じて）。この目的で、各装置７０４は、同じ装置７０４上で実行されるローカルクライアントアプリケーション１０８によってだけでなく、装置網７０２の別の装置７０４上で実行されるリモートクライアントアプリケーションによっても提供されるイベントサブスクリプション要求２０４を受け取り満たすように構成されているサーバーアプリケーション１０４を含むことができる。さらに、第１の装置７０４が、装置網７０２の第２の装置７０４上で実行されるリモートサーバーアプリケーションを要求の目標として指定するイベントサブスクリプション要求２０４をローカルクライアントアプリケーション１０８から受け取ったとき、第１の装置７０４は、そのイベントサブスクリプション要求２０４を第２の装置に転送することができる。サーバーアプリケーション１０４は、ローカルイベント２０６の発生を検出すると、ローカルクライアントアプリケーション１０８および他の装置７０４上で実行されるリモートクライアントアプリケーションを識別することができ、各そのようなサブスクライブしたクライアントアプリケーション１０８に代わってローカルイベント２０６と関連付けられた１つまたは複数のサーバースクリプト２０２のサーバースクリプト実行２０８を開始させることができる。したがって、この変形形態によって、本明細書に提示するローカルイベントサービスのモデルが、本明細書に提示する技法によって他の装置７０４上で実行される他のクライアントアプリケーション１０６を含むように拡張される。
【００４１】
[0054]この第３の態様の第４の変形形態として、装置４０２は、装置４０２、たとえばバッテリー容量が限られて、および／または低消費電力の制限内で動作するモバイル装置、または処理および／またはメモリーを節約して使用する場合、より高い装置性能を発揮するプロセッサーのリソースを節約して使用するように、ローカルサーバーアプリケーション１０４および／またはローカルクライアントアプリケーション（複数可）１０８の実行を調節することができる。
【００４２】
[0055]この第４の態様の第１の変形形態として、ローカルサーバーアプリケーション１０８は、イベントサブスクリプション要求２０４が１つまたは複数のクライアントアプリケーション１０８から保留になっているときだけ、実行することができる。たとえば、装置４０２は、イベントサブスクリプション要求２０４を受け取ると、ローカルサーバーアプリケーション１０４が実行されているのかどうかを決定することができ、そうでない場合、イベントサブスクリプション要求２０４を満たすために、ローカルサーバーアプリケーション１０４の実行を起動することができる。代替実施形態または追加実施形態として、装置４０２は、ローカルサーバーアプリケーション１０４が検出することが可能であるローカルイベント２０６に対してイベントサブスクリプション要求がないことを検出すると、一時的に、または無期限にローカルサーバーアプリケーション１０４の実行を終了させることができる。このように、装置４０２は、その場その場でローカルサーバーアプリケーション１０４を動作させることができ、ローカルサーバーアプリケーション１０４が使用中でないとき、別な形で装置４０２のリソースを節約して使うことができる。
【００４３】
[0056]この第４の態様の第２の変形形態として、装置４０２のそれぞれの処理構成要素は、ローカルイベント２０６が検出されたときだけ、利用することができる。たとえば、ローカルイベント２０６が、入力構成要素を通じて受け取られるユーザー入力の処理を含む場合、装置４０２は、そのようなローカルイベント２０６が生じていないとき、その処理構成要素のパワーを抑えることができる。さらに、そのような処理は、処理構成要素と関連付けられたローカルイベント２０６に対する１つまたは複数のクライアントアプリケーション１０８のサブスクリプションを条件とすることができる。たとえば、装置４０２が、タッチセンサー式ディスプレイ構成要素を通じて受け取られるタッチ入力を解釈するように構成されている処理構成要素を含む場合、装置４０２は、タッチセンサー式ディスプレイ構成要素がタッチ入力を受け取っていないとき、その処理構成要素に供給するパワーを減少させる、または無くすことができ、任意選択で、いずれかのクライアントアプリケーション１０８が、現在、タッチセンサー式ディスプレイ構成要素を通じたタッチ入力を受け取り処理するように構成されているのかどうかをさらに条件とすることができる。そのような技法は、本明細書に提示する技法によって装置のリソース（たとえばパワー、プロセッサー、メモリーおよび通信容量）の節約を容易にすることができる。サーバースクリプト２０２のサブスクリプションおよび実行のこれらおよび他の変形形態は、本明細書に提示する技法によって、様々なローカルイベント２０６の検出に応答して、かつそれと関連付けられて、１つまたは複数のクライアントアプリケーション１０８に代わってサーバーアプリケーション１０４が利用することができる。
【００４４】
[0057]Ｅ．計算環境
[0058]図８および次の議論によって、本明細書に述べるプロビジョニングの１つまたは複数についての実施形態を実装するのに適切な計算環境に関して簡単に概括的な説明を提供する。図８の動作環境は、適切な動作環境の単に例の１つあり、動作環境の使用または機能性の範囲に対していずれもの限定を示唆する意図はない。例の計算装置は、ただしこれらに限定されないが、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドまたはラップトップ装置、モバイル装置（たとえば携帯電話、携帯情報端末（ＰＤＡ）、メディアプレーヤーなど）、マルチプロセッサーシステム、家庭用電化製品、ミニコンピューター、メインフレームコンピューター、上記のシステムまたは装置のいずれかを含む分散型計算環境などを含む。
【００４５】
[0059]必要ではないが、実施形態を、１つまたは複数の計算装置によって実行される「コンピューター可読命令」の概括的なコンテキストで述べる。コンピューター可読命令は、コンピューター可読媒体を介して分散させることができる（以下で論じる）。コンピューター可読命令は、プログラムモジュール、たとえば関数、オブジェクト、アプリケーションプログラミングインターフェース（ＡＰＩ）、データ構造などとして実装することができ、それは、特定のタスクを実行する、または特定の抽象データ型を実装する。通常、コンピューター可読命令の機能性は、様々な環境下で所望のように結合する、分散させることができる。
【００４６】
[0060]図８は、本明細書に提供する１つまたは複数の実施形態を実装するように構成されている計算装置８０２を含むシステム８００の例を例示する。１つの構成では、計算装置８０２は、少なくとも１つの処理ユニット８０６およびメモリー８０８を含む。計算装置の正確な構成およびタイプに依存して、メモリー８０８は、揮発性（たとえばＲＡＭなど）、不揮発性（たとえばＲＯＭ、フラッシュメモリーなど）またはその２つのある組み合わせとすることができる。この構成は、図８に点線８０４によって例示する。
【００４７】
[0061]他の実施形態では、装置８０２は、追加の特徴および／または機能性を含むことができる。たとえば、装置８０２は、また、ただしこれらに限定されないが、磁気記憶装置、光記憶装置などを含む、追加の記憶装置（たとえば取り外し可能な、および／または取り外しできない）を含むことができる。そのような追加の記憶装置は、図８に記憶装置８１０によって例示する。一実施形態では、本明細書に提供する１つまたは複数の実施形態を実装するコンピューター可読命令が、記憶装置８１０中に存在することができる。記憶装置８１０は、また、オペレーティングシステム、アプリケーションプログラムなどを実装する他のコンピューター可読命令を格納することができる。コンピューター可読命令は、たとえば、処理ユニット８０６によって実行するためにメモリー８０８中にロードすることができる。
【００４８】
[0062]用語「コンピューター可読媒体」は、本明細書で使用するとき、コンピューター記憶媒体を含む。コンピューター記憶媒体は、情報、たとえばコンピューター可読命令または他のデータを記憶するために、いずれかの方法または技術で実装される揮発性および不揮発性、取り外し可能な、および取り外しできない媒体を含む。メモリー８０８および記憶装置８１０は、コンピューター記憶媒体の例である。コンピューター記憶媒体は、ただしこれらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶装置、あるいは所望の情報を格納するために使用することができ、装置８０２がアクセスすることができる、いずれもの他の媒体を含む。いずれものそのようなコンピューター記憶媒体は、装置８０２の一部とすることができる。
【００４９】
[0063]装置８０２は、また、装置８０２が他の装置と通信することを可能にする通信接続部（複数可）８１６を含むことができる。通信接続部（複数可）８１６は、ただしこれらに限定されないが、モデム、ネットワークインターフェースカード（ＮＩＣ）、統合ネットワークインターフェース、無線周波送信機／受信機、赤外線ポート、ＵＳＢ接続部、または計算装置８０２を他の計算装置に接続するための他のインターフェースを含むことができる。通信接続部（複数可）８１６は、有線接続部または無線接続部を含むことができる。通信接続部（複数可）８１６は、通信メディアを送信する、および／または受信することができる。
【００５０】
[0064]用語「コンピューター可読媒体」は、通信メディアを含むことができる。通信メディアは、通常、搬送波または他の移送メカニズムなどの「変調されるデータ信号」の形態でコンピューター可読命令または他のデータを具体化し、いずれもの情報配信メディアを含む。用語「変調されるデータ信号」は、情報を信号中にエンコードするように、その特性の１つまたは複数が設定される、または変化する信号を含むことができる。
【００５１】
[0065]装置８０２は、入力装置（複数可）８１４、たとえばキーボード、マウス、ペン、音声入力装置、タッチ入力装置、赤外線カメラ、ビデオ入力装置および／またはいずれもの他の入力装置を含むことができる。出力装置（複数可）８１２、たとえば１つまたは複数のディスプレイ、スピーカー、プリンターおよび／またはいずれもの他の出力装置も、装置８０２中に含めることができる。入力装置（複数可）８１４および出力装置（複数可）８１２は、有線接続部、無線接続部またはそのいずれもの組み合わせを介して装置８０２に接続することができる。一実施形態では、別の計算装置からの入力装置または出力装置は、計算装置８０２用の入力装置（複数可）８１４および出力装置（複数可）８１２として使用することができる。
【００５２】
[0066]計算装置８０２の構成要素は、様々な相互接続部、たとえばバスによって接続することができる。そのような相互接続部は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）、たとえばＰＣＩエクスプレス、ユニバーサルシリアルバス（ＵＳＢ）、ファイアワイア（Ｆｉｒｅｗｉｒｅ）（ＩＥＥＥ１３９４）、光バス構造などを含むことができる。別の実施形態では、計算装置８０２の構成要素は、ネットワークによって相互接続することができる。たとえば、メモリー８０８は、ネットワークよって相互接続され、異なる物理的な記憶場所に位置決めされる複数の物理的なメモリーユニットから構成することができる。
【００５３】
[0067]当業者は、コンピューター可読命令を格納するために利用される記憶装置は、ネットワークにわたって分散させることができることを理解されるはずである。たとえば、ネットワーク８１８を介してアクセス可能な計算装置８２０は、本明細書で提供する１つまたは複数の実施形態を実装するコンピューター可読命令を格納することができる。計算装置８０２は、計算装置８２０にアクセスし、実行するためにコンピューター可読命令の一部、またはそのすべてをダウンロードすることができる。代替実施形態として、計算装置８０２は、必要に応じてコンピューター可読命令の複数の部分をダウンロードすることができる、またはいくらかの命令は、計算装置８０２で、いくらかの命令は、計算装置８２０で実行することができる。
【００５４】
[0068]Ｆ．用語の使用法
[0069]構造上の特徴および／または方法論的な動作に固有の言語で主題を述べてきたが、添付の特許請求の範囲で定義される主題は、上記に述べた具体的な特徴または動作に必ずしも限定されないことを理解すべきである。それどころか、上記に述べた具体的な特徴および動作は、特許請求の範囲を実施する例の形態として開示されたものである。
【００５５】
[0070]用語「構成要素」、「モジュール」、「システム」、「インターフェース」などは、本出願で使用するとき、概して、コンピューター関連の実体、あるいはハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアを指すことを意図する。たとえば、構成要素は、ただしこれらに限定されないが、プロセッサー上で動作するプロセス、プロセッサー、オブジェクト、実行ファイル、実行スレッド、プログラムおよび／またはコンピューターとすることができる。例示として、コントローラー上で動作するアプリケーションとコントローラーの両方は、構成要素とすることができる。１つまたは複数の構成要素は、プロセスおよび／または実行スレッド内に常駐することができ、構成要素は、１つのコンピューター上にローカライズする、および／または２つ以上のコンピューターの間で分散させることができる。
【００５６】
[0071]さらにまた、特許請求される主題は、方法、機器または標準のプログラミングおよび／またはエンジニアリング技法を使用して製造品目として実装することができ、それによって、開示する主題を実装するようにコンピューターを制御するソフトウェア、ファームウェア、ハードウェア、またはそのいずれもの組み合わせを生成する。用語「製造品目」は、本明細書で使用するとき、いずれかのコンピューター可読装置、通信事業者またはメディアからアクセス可能なコンピュータープログラムを包含すると意図する。もちろん、当業者は、特許請求される主題の範囲または趣旨から逸脱せずに、この構成に対して多くの変更を行うことができることを認識されるはずである。
【００５７】
[0072]実施形態の様々な動作が、本明細書で提供されている。一実施形態では、述べた動作の１つまたは複数は、１つまたは複数のコンピューター可読媒体上に格納されるコンピューター可読命令の構成要素になることができ、それは、計算装置によって実行された場合、計算装置に述べた動作を実行させることになる。動作のいくつか、またはそのすべてを述べた順序は、これらの動作が必然的に順序に依存すると暗示していると解釈すべきでない。この記述の恩恵を受ける当業者は、代替の順序付けを理解されるはずである。さらに、動作のすべてが、本明細書で提供する各実施形態中に必ずしも存在しないことを理解されるはずである。
【００５８】
[0073]さらに、言葉「例としての、例示的な（ｅｘｅｍｐｌａｒｙ）」は、例、事例または例示するものとして働くことを意味するように本明細書で使用する。「例としての」として本明細書に述べたいずれもの態様および設計は、他の態様または設計より必ずしも有利であると解釈すべきでない。むしろ、言葉「例としての、例示的な」の使用は、具体的な様子で概念を提示するためと意図する。用語「ｏｒ」は、この出願で使用するとき、排他的な「ｏｒ」よりはむしろ包含的な「ｏｒ」を意味すると意図する。すなわち、他に指定のない限り、またはコンテキストから明らかでない限り、「Ｘは、ＡまたはＢを用いる」は、自然の包含的な置換のいずれも意味すると意図する。つまり、ＸがＡを用いる、ＸがＢを用いる、またはＸがＡとＢの両方を用いる場合、「ＸがＡまたはＢを用いる」は、前述の事例のいずれでも成立する。さらに、冠詞「ａ」、「ａｎ」は、この出願および添付の特許請求の範囲で使用するとき、他に指定のない限り、または単数形を対象とすることがコンテキストから明らかでない限り、概して、「１つまたは複数の」を意味すると解釈することができる。
【００５９】
[0074]また、１つまたは複数の実装形態に関して本開示を示し述べてきたが、同等の代替形態および変更形態が、この明細書および付属の図面を読み理解したことに基づき、当業者の心に浮かぶことになるはずである。本開示は、そのような変更形態および代替形態のすべてを含み、次の特許請求の範囲によってのみ限定される。特に、上記に述べた構成要素（たとえば要素、リソースなど）によって実行される様々な機能に関して、そのような構成要素を述べるために使用する用語は、他に示されていない限り、たとえ本明細書に例示した本開示の実装例としての実装形態の機能を実行する開示した構造に構造上同等でなくても、述べた構成要素（たとえば機能的に同等である）の指定された機能を実行する、いずれもの構成要素に対応すると意図する。加えて、本開示の具体的な特徴は、いくつかの実装形態の１つだけに関して開示している場合があり、そのような特徴は、いずれもの所与の、または特定の適用に所望のように、有利なようになり得るように他の実装形態の１つまたは複数の他の特徴と組み合わせることができる。さらにまた、用語「含む（ｉｎｃｌｕｄｅ）」、「有する（ｈａｖｉｎｇ）」、「有する（ｈａｓ）」、「備える（ｗｉｔｈ）」またはその変形を、発明を実施するための形態または特許請求の範囲中のどちらかで使用する限りにおいて、そのような用語は、用語「備える、含む（ｃｏｍｐｒｉｓｉｎｇ）」と同様に包含的であると意図する。
【図１】
2015501479.tif 000003
【図２】
2015501479.tif 000004
【図３】
2015501479.tif 000005
【図４】
2015501479.tif 000006
【図５】
2015501479.tif 000007
【図６】
2015501479.tif 000008
【図７】
2015501479.tif 000009
【図８】
2015501479.tif 000010
【国際調査報告】
2015501479.tif 000011
2015501479.tif 000012