(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023055635
(43)【公開日】2023-04-18
(54)【発明の名称】オープン通信プロトコルを指定およびテストすること
(51)【国際特許分類】
H04L 51/066 20220101AFI20230411BHJP
H04L 51/04 20220101ALI20230411BHJP
G06F 8/00 20180101ALI20230411BHJP
G06F 8/41 20180101ALI20230411BHJP
【FI】
H04L51/066
H04L51/04
G06F8/00
G06F8/41 170
【審査請求】未請求
【請求項の数】20
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2022140199
(22)【出願日】2022-09-02
(31)【優先権主張番号】17/465,148
(32)【優先日】2021-09-02
(33)【優先権主張国・地域又は機関】US
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.ERLANG
(71)【出願人】
【識別番号】515333190
【氏名又は名称】ワッツアップ エルエルシー
(74)【代理人】
【識別番号】110002974
【氏名又は名称】弁理士法人World IP
(72)【発明者】
【氏名】フルージエ, アルノー
(72)【発明者】
【氏名】ナフマン, ジョージ
(57)【要約】 (修正有)
【課題】オープン通信プロトコルを指定およびテストするためのシステム、方法、装置、およびコンピュータプログラム製品を提供する。
【解決手段】方法は、クライアントデバイスのプロセッサ上で実行しているメッセージングクライアントによって、メッセージングクライアントのための複数の仕様ファイルのうちの第1の仕様ファイルに基づいて、要求スタンザを生成し1002、第1の仕様ファイルによって指定された1つまたは複数のパラメータに基づいて要求スタンザを検証し1004、要求スタンザのための1つまたは複数の応答ハンドラを呼び出し1006、1つまたは複数の応答ハンドラによってサーバから応答スタンザを受信し1008、1つまたは複数の応答ハンドラによって、応答スタンザを処理し1010、1つまたは複数の応答ハンドラの処理の出力を表示する1012。
【選択図】
図10
【特許請求の範囲】
【請求項1】
クライアントデバイスのプロセッサ上で実行しているメッセージングクライアントによって、前記メッセージングクライアントのための複数の仕様ファイルのうちの第1の仕様ファイルに基づいて、要求スタンザを生成することと、
前記メッセージングクライアントによって、前記第1の仕様ファイルによって指定された1つまたは複数のパラメータに基づいて前記要求スタンザを検証することと、
前記メッセージングクライアントによって、前記要求スタンザのための応答ハンドラを呼び出すことと、
前記メッセージングクライアントによって、サーバから応答スタンザを受信することと、
前記応答ハンドラによって、前記応答スタンザを処理することと、
前記メッセージングクライアントによって、前記応答ハンドラの前記処理の出力を表示することと
を含む、方法。
【請求項2】
前記サーバが、前記プロセッサ上で実行している前記メッセージングクライアントのモックサーバ構成要素を備え、前記モックサーバが、
前記要求スタンザの1つまたは複数の属性を、前記サーバのための複数の仕様ファイルのうちの第1の仕様ファイルにマッチさせることと、
前記サーバのための前記第1の仕様ファイルに基づいて前記応答スタンザを生成することと、
前記応答スタンザを前記メッセージングクライアントに提供することと
によって前記応答スタンザを生成する、請求項1に記載の方法。
【請求項3】
コンパイラによって、前記メッセージングクライアントのための前記複数の仕様ファイルに基づいて前記メッセージングクライアントを生成することと、
前記コンパイラによって、前記サーバのための前記複数の仕様ファイルに基づいて前記モックサーバを生成することと、
前記コンパイラによって、前記サーバのための前記複数の仕様ファイルに基づいてサーバメッセージングアプリケーションを生成することと
をさらに含む、請求項2に記載の方法。
【請求項4】
前記応答スタンザを受信するより前に、
前記メッセージングクライアントによって、前記要求スタンザを符号化して、複数のバイトを含むバイトアレイにすることと、
前記メッセージングクライアントによって、前記バイトアレイの前記複数のバイトのうちの少なくとも1つのバイトを暗号化することと、
前記メッセージングクライアントによって、前記少なくとも1つの暗号化されたバイトを含む前記バイトアレイを前記サーバに送信することと
をさらに含む、請求項1に記載の方法。
【請求項5】
前記メッセージングクライアントによって、前記メッセージングクライアントのための前記第1の仕様ファイルに基づいて別の要求スタンザを生成することと、
前記メッセージングクライアントの検証構成要素によって、前記メッセージングクライアントのための前記第1の仕様ファイルに基づいて前記別の要求スタンザを無効にすることと、
前記メッセージングクライアントによって、前記別の要求スタンザをドロップすることであって、前記プロセッサに、前記別の要求スタンザを処理することを控えさせる、前記別の要求スタンザをドロップすることと
をさらに含む、請求項1に記載の方法。
【請求項6】
前記サーバから第2の応答スタンザを受信することと、
前記メッセージングクライアントによって、前記第2の応答スタンザの一意の識別子がレジストリに記憶されていないと決定することと、
前記メッセージングクライアントによって、前記第2の応答スタンザのための1つまたは複数のリモートプロシージャコールと、前記第2の応答スタンザのための前記1つまたは複数のリモートプロシージャコールのための前記応答ハンドラとを決定するためにデシジョンツリーを呼び出すことと、
前記メッセージングクライアントによって、前記第2の応答スタンザを処理するために、前記第2の応答スタンザのための前記1つまたは複数のリモートプロシージャコールと、前記1つまたは複数のリモートプロシージャコールのための前記応答ハンドラとを呼び出すことと
をさらに含む、請求項1に記載の方法。
【請求項7】
前記メッセージングクライアントのための前記第1の仕様ファイルが、ミックスイン要素を備え、前記第1の仕様ファイルの少なくとも1つの他の要素が、前記ミックスイン要素への参照を含み、前記メッセージングクライアントと前記サーバとが、オープン通信プロトコルに従って通信する、請求項1に記載の方法。
【請求項8】
命令を含む非一時的なコンピュータ可読記憶媒体であって、前記命令は、クライアントデバイスのプロセッサによって実行されたとき、前記プロセッサに、
前記プロセッサ上で実行しているメッセージングクライアントによって、前記メッセージングクライアントのための複数の仕様ファイルのうちの第1の仕様ファイルに基づいて、要求スタンザを生成することと、
前記メッセージングクライアントによって、前記第1の仕様ファイルによって指定された1つまたは複数のパラメータに基づいて前記要求スタンザを検証することと、
前記メッセージングクライアントによって、前記要求スタンザのための応答ハンドラを呼び出すことと、
前記メッセージングクライアントによって、サーバから応答スタンザを受信することと、
前記応答ハンドラによって、前記応答スタンザを処理することと、
前記メッセージングクライアントによって、前記応答ハンドラの前記処理の出力を表示することと
を行わせる、コンピュータ可読記憶媒体。
【請求項9】
前記サーバが、前記プロセッサ上で実行している前記メッセージングクライアントのモックサーバ構成要素を備え、前記モックサーバが、
前記要求スタンザの1つまたは複数の属性を、前記サーバのための複数の仕様ファイルのうちの第1の仕様ファイルにマッチさせることと、
前記サーバのための前記第1の仕様ファイルに基づいて前記応答スタンザを生成することと、
前記応答スタンザを前記メッセージングクライアントに提供することと
によって前記応答スタンザを生成する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項10】
前記命令が、前記プロセッサを
前記プロセッサ上で実行しているコンパイラによって、前記メッセージングクライアントのための前記複数の仕様ファイルに基づいて前記メッセージングクライアントを生成することと、
前記コンパイラによって、前記サーバのための前記複数の仕様ファイルに基づいて前記モックサーバを生成することと、
前記コンパイラによって、前記サーバのための前記複数の仕様ファイルに基づいてサーバメッセージングアプリケーションを生成することと
を行うようにさらに構成する、請求項9に記載のコンピュータ可読記憶媒体。
【請求項11】
前記命令が、前記プロセッサを、前記応答スタンザを受信するより前に、
前記メッセージングクライアントによって、前記要求スタンザを符号化して、複数のバイトを含むバイトアレイにすることと、
前記メッセージングクライアントによって、前記バイトアレイの前記複数のバイトのうちの少なくとも1つのバイトを暗号化することと、
前記メッセージングクライアントによって、前記少なくとも1つの暗号化されたバイトを含む前記バイトアレイを前記サーバに送信することと
を行うようにさらに構成する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項12】
前記命令は、前記プロセッサを
前記メッセージングクライアントによって、前記メッセージングクライアントのための前記第1の仕様ファイルに基づいて別の要求スタンザを生成することと、
前記メッセージングクライアントの検証構成要素によって、前記メッセージングクライアントのための前記第1の仕様ファイルに基づいて前記別の要求スタンザを無効にすることと、
前記メッセージングクライアントによって、前記別の要求スタンザをドロップすることであって、前記プロセッサに、前記別の要求スタンザを処理することを控えさせる、前記別の要求スタンザをドロップすることと
を行うようにさらに構成する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項13】
前記命令は、前記プロセッサを
前記サーバから第2の応答スタンザを受信することと、
前記メッセージングクライアントによって、前記第2の応答スタンザの一意の識別子がレジストリに記憶されていないと決定することと、
前記メッセージングクライアントによって、前記第2の応答スタンザのための1つまたは複数のリモートプロシージャコールと、前記第2の応答スタンザのための前記1つまたは複数のリモートプロシージャコールのための前記応答ハンドラとを決定するためにデシジョンツリーを呼び出すことと、
前記メッセージングクライアントによって、前記第2の応答スタンザを処理するために、前記第2の応答スタンザのための前記1つまたは複数のリモートプロシージャコールと、前記1つまたは複数のリモートプロシージャコールのための前記応答ハンドラとを呼び出すことと
を行うようにさらに構成する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項14】
前記メッセージングクライアントのための前記第1の仕様ファイルが、ミックスイン要素を備え、前記第1の仕様ファイルの少なくとも1つの他の要素が、前記ミックスイン要素への参照を含み、前記メッセージングクライアントと前記サーバとが、オープン通信プロトコルに従って通信する、請求項8に記載のコンピュータ可読記憶媒体。
【請求項15】
プロセッサと、
命令を記憶したメモリと
を備えるコンピューティング装置であって、前記命令が、前記プロセッサによって実行されたとき、前記プロセッサを
前記プロセッサ上で実行しているメッセージングクライアントによって、前記メッセージングクライアントのための複数の仕様ファイルのうちの第1の仕様ファイルに基づいて、要求スタンザを生成することと、
前記メッセージングクライアントによって、前記第1の仕様ファイルによって指定された1つまたは複数のパラメータに基づいて前記要求スタンザを検証することと、
前記メッセージングクライアントによって、前記要求スタンザのための応答ハンドラを呼び出すことと、
前記メッセージングクライアントによって、サーバから応答スタンザを受信することと、
前記応答ハンドラによって、前記応答スタンザを処理することと、
前記メッセージングクライアントによって、前記応答ハンドラの前記処理の出力を表示することと
を行うように構成する、コンピューティング装置。
【請求項16】
前記サーバが、前記プロセッサ上で実行している前記メッセージングクライアントのモックサーバ構成要素を備え、前記モックサーバが、
前記要求スタンザの1つまたは複数の属性を、前記サーバのための複数の仕様ファイルのうちの第1の仕様ファイルにマッチさせることと、
前記サーバのための前記第1の仕様ファイルに基づいて前記応答スタンザを生成することと、
前記応答スタンザを前記メッセージングクライアントに提供することと
によって前記応答スタンザを生成する、請求項15に記載のコンピューティング装置。
【請求項17】
前記命令が、前記プロセッサを
コンパイラによって、前記メッセージングクライアントのための前記複数の仕様ファイルに基づいて前記メッセージングクライアントを生成することと、
前記コンパイラによって、前記サーバのための前記複数の仕様ファイルに基づいて前記モックサーバを生成することと、
前記コンパイラによって、前記サーバのための前記複数の仕様ファイルに基づいてサーバメッセージングアプリケーションを生成することと
を行うようにさらに構成する、請求項16に記載のコンピューティング装置。
【請求項18】
前記命令が、前記プロセッサを、前記応答スタンザを受信するより前に、
前記メッセージングクライアントによって、前記要求スタンザを符号化して、複数のバイトを含むバイトアレイにすることと、
前記メッセージングクライアントによって、前記バイトアレイの前記複数のバイトのうちの少なくとも1つのバイトを暗号化することと、
前記メッセージングクライアントによって、前記少なくとも1つの暗号化されたバイトを含む前記バイトアレイを前記サーバに送信することと
を行うようにさらに構成する、請求項15に記載のコンピューティング装置。
【請求項19】
前記命令は、前記プロセッサを
前記メッセージングクライアントによって、前記メッセージングクライアントのための前記第1の仕様ファイルに基づいて別の要求スタンザを生成することと、
前記メッセージングクライアントの検証構成要素によって、前記メッセージングクライアントのための前記第1の仕様ファイルに基づいて前記別の要求スタンザを無効にすることと、
前記メッセージングクライアントによって、前記別の要求スタンザをドロップすることであって、前記プロセッサに、前記別の要求スタンザを処理することを控えさせる、前記別の要求スタンザをドロップすることと
を行うようにさらに構成する、請求項15に記載のコンピューティング装置。
【請求項20】
前記メッセージングクライアントのための前記第1の仕様ファイルが、ミックスイン要素を備え、前記第1の仕様ファイルの少なくとも1つの他の要素が、前記ミックスイン要素への参照を含み、前記メッセージングクライアントと前記サーバとが、オープン通信プロトコルに従って通信し、前記命令は、前記プロセッサを
前記サーバから第2の応答スタンザを受信することと、
前記メッセージングクライアントによって、前記第2の応答スタンザの一意の識別子がレジストリに記憶されていないと決定することと、
前記メッセージングクライアントによって、前記第2の応答スタンザのための1つまたは複数のリモートプロシージャコールと、前記第2の応答スタンザのための前記1つまたは複数のリモートプロシージャコールのための前記応答ハンドラとを決定するためにデシジョンツリーを呼び出すことと、
前記メッセージングクライアントによって、前記第2の応答スタンザを処理するために、前記第2の応答スタンザのための前記1つまたは複数のリモートプロシージャコールと、前記1つまたは複数のリモートプロシージャコールのための前記応答ハンドラとを呼び出すことと
を行うようにさらに構成する、請求項15に記載のコンピューティング装置。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
本出願は、その全開示が参照により本明細書に組み込まれる、2021年9月2日に出願された、「Specifying And Testing Open Communication Protocols」と題する米国非仮出願第17/465,148号の優先権を主張する。
【0002】
メッセージングシステムは、オープン通信プロトコルを使用し得る。しかしながら、しばしば、オープン通信プロトコルは、形式仕様言語(formal specification language)によって定義されない。代わりに、これらのプロトコルは、しばしば、非公式にドキュメント化される。形式仕様言語の欠如は、所与のメッセージングシステムのためのエンジニアリング作業を制約し得る。たとえば、形式仕様言語の欠如は、メッセージングシステムにおける不整合につながり得、これは、エラー、バグ、およびセキュリティ脆弱性につながり得る。これらおよび他の問題はまた、メッセージングシステムを開発および維持するために必要とされるリソースおよび時間の量を増加させる。
【発明の概要】
【0003】
一態様では、方法が、クライアントデバイスのプロセッサ上で実行しているメッセージングクライアントによって、メッセージングクライアントのための複数の仕様ファイルのうちの第1の仕様ファイルに基づいて、要求スタンザ(stanza)を生成することと、メッセージングクライアントによって、第1の仕様ファイルによって指定された1つまたは複数のパラメータに基づいて要求スタンザを検証(validate)することと、メッセージングクライアントによって、要求スタンザのための応答ハンドラを呼び出すことと、メッセージングクライアントによって、サーバから応答スタンザを受信することと、応答ハンドラによって、応答スタンザを処理することと、メッセージングクライアントによって、応答ハンドラの処理の出力を表示することとを含む。他の実施形態が説明される。
【0004】
任意の特定の要素または行為の説明を容易に識別するために、参照番号中の1つまたは複数の最上位の数字(digit)は、その要素が最初に導入される図番号を指す。
【図面の簡単な説明】
【0005】
【
図1】一実施形態による、主題の一態様を示す図である。
【
図2】一実施形態による、主題の一態様を示す図である。
【
図3】一実施形態による、主題の一態様を示す図である。
【
図4】一実施形態による、主題の一態様を示す図である。
【
図5】一実施形態による、主題の一態様を示す図である。
【
図6】一実施形態による、主題の一態様を示す図である。
【
図7】一実施形態による、主題の一態様を示す図である。
【
図8】一実施形態による、主題の一態様を示す図である。
【
図9】一実施形態による、主題の一態様を示す図である。
【
図10】一実施形態による、ルーチン1000を示す図である。
【
図11】一実施形態による、例示的なメッセージングサービス1100を示す図である。
【
図12】一実施形態による、コンピュータアーキテクチャ1200を示す図である。
【
図13】一実施形態による、通信アーキテクチャ1300を示す図である。
【発明を実施するための形態】
【0006】
本明細書で開示される実施形態は、オープンメッセージングプロトコルを使用するメッセージングシステムにおいて送出されるメッセージを形式的に指定し、実装し、テストするための技法を提供する。これらのメッセージは、本明細書では「スタンザ」と呼ばれることがあり、これらは、すべてのクライアントサーバ通信を含む。一般に、メッセージングシステムによって提供される複数の特徴を形式的に指定するために、1つまたは複数の仕様ファイルが定義され得る。所与の仕様ファイルは、仕様ファイルに従って実装されるメッセージングシステムの1つまたは複数の特徴のためのすべてのシナリオを含み得る。定義されると、コンパイラが、所与の仕様ファイルを、メッセージングクライアントおよび/または対応するサーバ側アプリケーションにおいて稼働することができる実行可能コードにコンバートし得る。生成されたコードは、スタンザを構築するためにメッセージングシステムによって使用され、それにより、メッセージングシステムが有効なスタンザのみを構築することを保証し得る。さらに、コードは、所与のスタンザのすべての入力および他の要素が有効であることを確認(verify)するためにスタンザをパースするために使用され得る。実行可能コードはまた、クライアントが、悪意のあるスタンザを他のクライアントに送出するのを防ぐためにサーバ側で検証を実施し得る。そうすることは、バッファオーバーフロー、悪意のある攻撃、および/または他のセキュリティ脆弱性の活用を防ぎ得る。
【0007】
いくつかの実施形態では、生成されたコードは、着信スタンザの成分要素からそのスタンザの識別情報を決定するアルゴリズムをさらに含み得る。アルゴリズムは、コードが、どの仕様ファイルがスタンザのプロパティを定義するかを決定することを可能にする。識別されると、コードは、その仕様ファイルを使用して、スタンザが仕様ファイルに準拠することを保証するためにスタンザを検証し得る。
【0008】
本明細書で開示される実施形態は、クライアントアプリケーションがモックサーバ(mock server)構成要素を含む、高度テスト機構をさらに提供し得る。概して、クライアントアプリケーションは、モックサーバ構成要素に要求を送信し得る。モックサーバ構成要素は、モックサーバ構成要素が実際のサーバ側アプリケーションであるかのようにクライアントに応答し得る。そうすることは、手動および/または自動テストが、サーバへの動作ネットワーク接続を必要とすることなしに独立して行われることを可能にする。さらに、モックサーバ構成要素は、仕様ファイルによって生成されたコードを使用して実装されるので、モックサーバ構成要素によって生成されたすべての応答スタンザが有効である。
【0009】
次いで図面を参照するが、全体にわたって同様の参照番号が同様の要素を参照するために使用される。以下の説明では、説明の目的で、その完全な理解を提供するために、多数の具体的な詳細が記載される。しかしながら、新規の実施形態は、これらの具体的な詳細なしに実施され得る。他の事例では、構造およびデバイスが、その説明を容易にするためにブロック図の形態で示される。その意図は、請求される主題に矛盾しないあらゆる修正、均等物、および代替案を包括することである。
【0010】
図および付随する説明では、指示「a」および「b」および「c」(ならびに同様の指示子)は、任意の正の整数を表す変数であることを意図される。したがって、たとえば、ある実装形態がa=5と値を設定する場合、構成要素123-1~123-a(または123a)として示される構成要素123の完全なセットは、構成要素123-1、123-2、123-3、123-4、および123-5を含み得る。実施形態はこのコンテキストに限定されない。
【0011】
以下の図を参照しながら、開示される実施形態のための動作がさらに説明される。図のうちのいくつかは、論理フローを含み得る。本明細書で提示されるそのような図は、特定の論理フローを含み得るが、論理フローは、本明細書で説明される一般的な機能性がどのように実装され得るかの一例を提供するにすぎないことが諒解され得る。さらに、別段に規定されていない限り、所与の論理フローが、提示される順序で必ずしも実行されなければならないとは限らない。その上、いくつかの実施形態では、論理フローに示されるすべての行為が必要とされ得るとは限らない。さらに、所与の論理フローは、ハードウェア要素、プロセッサによって実行されるソフトウェア要素、またはそれらの任意の組合せによって実装され得る。実施形態はこのコンテキストに限定されない。
【0012】
図1は、システム100を示す概略図である。概して、システム100は、複数の仕様ファイル102と、コンパイラ104とを含む。仕様ファイル102を記憶し、サーバメッセージングアプリケーション106およびクライアントメッセージングアプリケーション108を生成するためにコンパイラ104を実行するためのコンピューティングシステムは、明快のために図示されていない。
【0013】
仕様ファイル102は、エンドツーエンド暗号化(E2EE)メッセージングシステムなど、メッセージングシステムの構成要素によって生成されたメッセージまたはスタンザのための要件を形式的に指定する。メッセージングシステムは、仕様ファイル102に基づいてコンパイラ104によって生成された、クライアントメッセージングアプリケーション108と、対応するサーバメッセージングアプリケーション106とを含み得る。従来、クライアントメッセージングアプリケーション108とサーバメッセージングアプリケーション106とは、XMPPプロトコルなど、オープン通信プロトコルに従ってスタンザを使用して通信し得る。したがって、仕様ファイル102は、サーバメッセージングアプリケーション106およびクライアントメッセージングアプリケーション108によって提供される特徴のセキュリティ、信頼性、およびスケーラビリティを改善するために、スタンザのための仕様を形式的に定義し得る。実施形態はこれらのコンテキストに限定されない。
【0014】
集合的に、仕様ファイル102は、サーバメッセージングアプリケーション106およびクライアントメッセージングアプリケーション108によって提供されるすべての特徴のためのすべての可能なシナリオを含んでいる。いくつかの実施形態では、仕様ファイル102は、サーバメッセージングアプリケーション106のための別個の仕様ファイル102と、クライアントメッセージングアプリケーション108のための別個の仕様ファイル102とを含み得る。いくつかの実施形態では、仕様ファイル102は、拡張可能マークアップ言語(XML)に従って書き込まれ得る。いくつかの実施形態では、各仕様ファイル102は、1つの要求要素と、0個またはそれ以上の応答要素と、名前属性と、発信元属性とを含む(たとえば、サーバメッセージングアプリケーション106、クライアントメッセージングアプリケーション108、および/またはモックサーバ110は、仕様ファイル102によって指定された制約を使用して構築される所与のスタンザの発信元である)。いくつかの実施形態では、要求要素は、子要素として単一の要求スタンザを有する。いくつかの実施形態では、応答要素は、子要素として1つの応答スタンザを有し得る。他の実施形態では、応答要素は、0個の子要素を有する。仕様ファイル102が複数の応答を含む場合、各応答は、それぞれの名前属性を含み得る。実施形態はこのコンテキストに限定されない。
【0015】
コンパイラ104は、実行可能プログラムを作成するために、人間によって可読な高レベル言語を下位レベル言語(たとえば、アセンブリ言語)になど、あるプログラミング言語で書き込まれたソースコードを別の言語に変換する、任意のタイプのコンピュータプログラムである。たとえば、仕様ファイル102をコンパイルすることによって、コンパイラ104は、サーバメッセージングアプリケーション106、クライアントメッセージングアプリケーション108、サーバメッセージングアプリケーション106の検証構成要素112、クライアントメッセージングアプリケーション108の検証構成要素112、サーバメッセージングアプリケーション106のレジストリ114、クライアントメッセージングアプリケーション108のレジストリ114、およびクライアントメッセージングアプリケーション108のモックサーバ110の1つまたは複数の構成要素を生成し得る。いくつかの実施形態では、コンパイラ104は、アプリケーションおよび/またはそれらの構成要素のためのアプリケーションレベルネットワークインターフェースを生成し得る。コンパイラ104は、任意のプログラミング言語に従って動作し得る。たとえば、コンパイラ104は、C言語、Erlang、Javaなどでコードを生成し得る。実施形態はこのコンテキストに限定されない。
【0016】
概して、コンパイラ104は、クライアントメッセージングアプリケーション108および検証構成要素112のための強く型付けされたクラスを生成し得る。仕様ファイル102に基づいて、コンパイラ104は、有効なスタンザのみが構築され得ることを保証するためにコードを含む、サーバメッセージングアプリケーション106およびクライアントメッセージングアプリケーション108の構成要素を生成し得る。検証構成要素112は、仕様ファイル102によって指定された1つまたは複数のルール、テンプレート、あるいは任意の他の要件またはパラメータに従って、サーバメッセージングアプリケーション106およびクライアントメッセージングアプリケーション108によって生成された任意のスタンザを検証するように構成され得る。たとえば、仕様ファイル102が、スタンザが特定のデータタイプ(たとえば、文字、ストリングなど)を含むことを必要とする場合、検証構成要素112は、スタンザがそのデータタイプを含むことを保証するためにスタンザを処理し得る。スタンザが、必要とされるデータタイプを含まない場合、検証構成要素112は、スタンザを無効にし(たとえば、ドロップし)、スタンザのさらなる処理を控え得る。他の場合、検証構成要素112は、スタンザのさらなる処理を許可し得る。
【0017】
レジストリ114は、クライアントメッセージングアプリケーション108および/またはサーバメッセージングアプリケーション106によって生成されたスタンザのための複数のリモートプロシージャコール(RPC)の指示を記憶するデータストアである。そうすることは、クライアントメッセージングアプリケーション108および/またはサーバメッセージングアプリケーション106が、応答が予想される要求を追跡することを可能にする。レジストリ114中の各エントリが、「スタンザID」と呼ばれることがあるスタンザの一意のキーを含み得る。いくつかの実施形態では、スタンザIDは、クライアントメッセージングアプリケーション108および/またはサーバメッセージングアプリケーション106によって生成されたスタンザのインスタンスを一意に識別する。言い方を変えれば、各スタンザが、一意のスタンザIDに関連し、同じメッセージの複数のインスタンスが、異なる一意のスタンザIDに関連する。たとえば、現在時間を返すためにクライアントメッセージングアプリケーション108によって生成された第1のスタンザのスタンザIDが「12345」である場合、クライアントメッセージングアプリケーション108は、「12345」のスタンザIDの指示をレジストリ114に記憶し得る。同様に、クライアントメッセージングアプリケーション108が、現在時間を返すために第2のスタンザを生成する場合、第2のスタンザのスタンザIDは「67890」であり得る。いくつかの実施形態では、レジストリ114は、スタンザIDに関連するRPCの指示および任意の応答ハンドラ(たとえば、時間を返すようにとの要求、および任意の関連する応答ハンドラ)を含み得る。さらに、所与の要求または応答タイプが、「SMAX ID」と呼ばれることがある一意の識別子に関連し得る。したがって、スタンザは、スタンザを一意に識別するスタンザIDと、スタンザの要求および/または応答タイプを一意に識別するSMAX IDとを含み得る。したがって、レジストリ114は、スタンザのSMAX IDの指示を含み得る。
【0018】
検証構成要素112は、スタンザのスタンザIDおよび/またはSMAX IDを使用して、たとえば、1つまたは複数の対応する仕様ファイル102によって定義された、スタンザのための要件を決定し得る。しかしながら、いくつかの実施形態では、スタンザはSMAX IDを含まないことがあり、スタンザIDは認識されないことがある。有利には、検証構成要素112は、スタンザのコンテンツに基づいて、スタンザのための任意のルール、RPC、応答ハンドラ、および任意の他の属性を決定するように構成されたデシジョンツリーアルゴリズムを実装し得る。そうすることは、スタンザのSMAX IDが指定されておらず、スタンザIDが認識されない(たとえば、レジストリ114中に存在しない)場合でも、検証構成要素112が所与のスタンザを確認することを可能にする。さらに、そうすることは、検証構成要素112が、関連するRPCのための適切な応答ハンドラを決定することを可能にする。いくつかの実施形態では、1つの応答ハンドラが呼び出される。応答ハンドラは、可能な「障害」応答ハンドラを含む任意のタイプの応答ハンドラを含み得る。たとえば、「障害」応答ハンドラは、無効な応答が受信され、および/または応答が受信されない(たとえば、サーバがクライアントに応答する前にネットワーク接続が失われた)ときに呼び出され得る。有利には、障害応答ハンドラは、アプリケーションコードを書き込むことをより容易にする。
【0019】
仕様ファイル102は、さらに、異なるクライアントサーバ対話を指定し得る。たとえば、コンパイラ104は、開発者による手動または自動テストを可能にするために、仕様ファイル102に基づいてコードを生成し得る。いくつかの実施形態では、クライアントサーバ対話は、サーバメッセージングアプリケーション106とクライアントメッセージングアプリケーション108との間のものである。しかしながら、有利には、クライアントメッセージングアプリケーション108のモックサーバ110は、サーバメッセージングアプリケーション106の機能性をエミュレートするように構成される。そうすることは、たとえば、サーバメッセージングアプリケーション106とクライアントメッセージングアプリケーション108との間のネットワーク接続が利用可能でないときに有益であり得る。そうすることは、開発者が、サーバメッセージングアプリケーション106への動作ネットワーク接続を必要とすることなしに独立してテストを稼働することを可能にする。さらに、サーバメッセージングアプリケーション106は、クライアントメッセージングアプリケーション108ほどには最新でないことがある。しかしながら、モックサーバ110を含むことによって、モックサーバ110は、クライアントメッセージングアプリケーション108とのテストを処理するために必要とされる直近および最新の機能性を含むように構成され得る。
【0020】
コンパイラ104は、分析のために追加のメタデータ(図示せず)をさらに生成し得る。たとえば、コンパイラ104は、分析のために仕様ファイル102をフラット化するために、「include」文を拡張し、および/または間接参照を削除し得る。コンパイラ104はまた、1つまたは複数の仕様ファイル102に対してドキュメント化における例を検証するマークダウン検証器を実装し得る。コンパイラ104は、ツールおよび分析モジュールを作ることを容易にする構造化照会言語(SQL)コードをも生成し得る。さらにまた、コンパイラ104は、コンパイラ104によって生成されたコードの任意の部分のグラフィカル可視化を生成するために使用され得るドキュメントを生成し得る。たとえば、コンパイラは、任意のコード部分のグラフィカル可視化を生成するためにGraphviz(登録商標)ツールによって使用され得るDOT言語でドキュメントを生成し得る。
【0021】
図2は、様々な実施形態による、システム200を示す。示されているように、システム200は、ネットワーク206を介して通信可能に結合された、1つまたは複数のクライアントデバイス202と1つまたは複数のサーバ204とを含む。クライアントデバイス202およびサーバ204は、各々、それぞれのプロセッサ208とメモリ210とを含む。示されているように、クライアントデバイス202は、コンパイラ104によって生成されたクライアントメッセージングアプリケーション108のインスタンスを含み、サーバ204は、インスタンスサーバメッセージングアプリケーション106を含む。示されているように、クライアントメッセージングアプリケーション108は、1つまたは複数の仕様ファイル102の要件に従ってフォーマットされた要求スタンザ212を生成し得る。クライアントメッセージングアプリケーション108は、次いで、要求スタンザ212をサーバ204に送信し得る(とはいえ、いくつかの実施形態では、クライアントメッセージングアプリケーション108は、要求スタンザ212をモックサーバ110に送信し得る)。
【0022】
同様に、サーバメッセージングアプリケーション106は、要求スタンザ212に応答して応答スタンザ214を生成し得る。応答スタンザ214は、1つまたは複数の仕様ファイル102に基づき得る。サーバメッセージングアプリケーション106は、次いで、応答スタンザ214をクライアントメッセージングアプリケーション108に送信し得る。しかしながら、上述のように、モックサーバ110は、応答スタンザ214を生成し、応答スタンザ214をサーバメッセージングアプリケーション106に提供し得る。仕様ファイル102は、特定の要求/応答ペアについて説明するので、検証構成要素112は、スタンザが有効である(たとえば、仕様ファイル102によって指定されたすべての要件に準拠する)ことを保証するために、スタンザ212および/またはスタンザ214を処理し得る。有利には、サーバメッセージングアプリケーション106と(モックサーバ110を含む)クライアントメッセージングアプリケーション108とは同じ言語のサポートを実装することができるので、この言語でコードを生成するために新しい仕様ファイル102が使用され得、開発者は、同じ場合に対してそれらのソースコードをテストすることができる。
【0023】
さらに、サーバメッセージングアプリケーション106および/またはモックサーバ110も要求スタンザを生成し得る。そのような例では、クライアントメッセージングアプリケーション108は、サーバメッセージングアプリケーション106および/またはモックサーバ110によって生成された要求スタンザに対する応答スタンザを返し得る。たとえば、ユーザがグループメッセージングスレッドに追加され得る。そのような例では、サーバメッセージングアプリケーション106および/またはモックサーバ110は、クライアントメッセージングアプリケーション108への通知要求スタンザを生成し得、クライアントメッセージングアプリケーション108は、応答して肯定応答スタンザで応答することが予想される。
【0024】
図3は、様々な実施形態による、現在時間をクライアントメッセージングアプリケーション108に返すための例示的な仕様ファイル102-1の一部分を示す概略
図300である。概して、開発者または他の使用が、要求部分302と、第1の応答部分304と、第2の応答部分306とを含む、例示的な仕様ファイル102-1を定義し得る。概して、要求部分302は、現在時間をサーバメッセージングアプリケーション106に要求するための1つまたは複数のパラメータを指定する。同様に、応答部分304は、「成功」条件、たとえば、サーバメッセージングアプリケーション106が現在時間をクライアントメッセージングアプリケーション108に返すことが可能であるときについての1つまたは複数のパラメータを含む。応答部分306は、「エラー」条件、たとえば、サーバメッセージングアプリケーション106が要求を処理する際にエラーに遭遇し、したがって、現在時間をクライアントメッセージングアプリケーション108に返すことができないときについての1つまたは複数のパラメータを含む。実施形態はこれらのコンテキストに限定されない。
【0025】
いくつかの実施形態では、仕様ファイル102は、仕様ファイル102の基礎をなすルールに従う要素名のための異なるルールを有し得る。たとえば、仕様ファイル102がXMLで書き込まれる場合、要素名は数字から始まらないことがある。したがって、数字から始まる要素名など、異なる要素名の使用を可能にするために、さもなければ1つまたは複数のルールに違反する名前のために名前空間が作成され得る。そのような実施形態では、名前空間の各メンバーが、アンダースコア文字など、あらかじめ定義された文字から始まり得る(たとえば、名前「2fac」は、「<badname:_2fac>」としてXMLで書き込まれ得る)。クライアントメッセージングアプリケーション108および/またはサーバメッセージングアプリケーション106がそのような要素名に遭遇したとき、アンダースコアは、マッチング、注入、検証、およびコード確認のために削除され得る。そうすることは、名前「2fac」が仕様ファイル102中で使用されることを可能にする。
【0026】
さらに、いくつかの実施形態では、仕様ファイル102は別の仕様ファイル102への参照を含み得る。たとえば、第1の仕様ファイル102中で「include」文を使用することは、第2の仕様ファイル102のコンテンツをインポートし得る、などである。動作中、第2の仕様ファイル102がインポートされるとき、第1の仕様ファイル102中の「include」文は、第2の仕様ファイル102の実際のコンテンツと置き換えられ得る。
【0027】
図4は、様々な実施形態による、仕様ファイル102-2の一部分を示す概略
図400である。より詳細には、仕様ファイル102-2は、スタンザのための追加の構造を定義するためのやり方を提供する、1つまたは複数の「ミックスイン」を示す。しばしば、値が一緒にバンドルされ得る。ミックスインは、2つまたはそれ以上のスタンザの組合せが、コード再使用を可能にし、高レベル概念を表現し、異なる値を一緒にバンドルすることを可能にする。さらに、ミックスインは、複数の場所におけるコードの複製をなくすために使用され得る。しかしながら、2つまたはそれ以上のミックスインが要素によって指定されるとき、2つまたはそれ以上のミックスインは適合しなければならない。言い方を変えれば、ミックスインは、同じ属性および/または要素値に異なるタイプを割り当てることができない。しかしながら、いくつかの実施形態では、ミックスインは、異なるストリングタイプ値を、同じ属性、または異なる一般的なクライアント識別子値に割り当て得る。さらに、ミックスインは、相互排他的な特徴の異なるバンドルの中から選択するための技法を提供する。
【0028】
図4の部分402は、支払いのための例示的なミックスイン要素を示す。いくつかの実施形態では、ミックスイン要素402の1つまたは複数の属性が随意であり得る。たとえば、ミックスイン要素402の「時間フォーマット」属性が随意であり得る。そのような例では、随意の「時間フォーマット」属性が指定されていない場合、デフォルト時間フォーマットが使用され得る。部分404、406、および408は、購入され得る異なるアイテム、すなわち、それぞれ、シャツ、ズボン、およびジャケットのための仕様を定義し得る。有利には、各部分402、404、および406は、支払いミックスイン要素402を組み込む。そうすることは、各部分402、404、および406が、各部分402、404、および406内でミックスイン要素402の特徴を明確に具陳することなしにミックスイン要素402の特徴を含むことを可能にする。言い方を変えれば、部分402、404、および406は、部分402、404および406の各々内でミックスイン要素402の仕様を反復または複製することなしに、ミックスイン要素402の特徴を含む。そうすることは、仕様ファイル102-2をコンパイルし、ならびに/あるいは対応するサーバメッセージングアプリケーション106および/またはクライアントメッセージングアプリケーション108をコンパイルおよび実行するために必要とされる、算出、リソース、および時間の量を低減することによって、システム性能を改善する。
【0029】
図5は、様々な実施形態による、仕様ファイル102に基づいてコンパイラ104によって生成されたコードの一部分を示す概略
図500である。
図4に示されたコードは、サーバメッセージングアプリケーション106および/またはクライアントメッセージングアプリケーション108中で実装され得る。
図4に示されたコードは、サーバメッセージングアプリケーション106が現在時間をクライアントメッセージングアプリケーション108に返す、前の例を続け得る。示されているように、ハンドラ部分502が、2つの応答ハンドラ、たとえば、現在時間が(仕様ファイル102の「成功」部分304に基づいて)クライアントメッセージングアプリケーション108に返されるときについての第1のハンドラと、(仕様ファイル102の「エラー」部分306に基づいて)エラーに遭遇したときについての第2のハンドラとを含む。
【0030】
要求部分504が、時間をサーバメッセージングアプリケーション106および/またはモックサーバ110に要求するためにクライアントメッセージングアプリケーション108によって使用されるコードの少なくとも一部分を含む。同様に、応答部分506が、現在時間をクライアントメッセージングアプリケーション108に返すためにサーバメッセージングアプリケーション106および/またはモックサーバ110によって使用されるコードの少なくとも一部分を含む。実施形態はこれらのコンテキストに限定されない。
【0031】
図6は、様々な実施形態による、モックサーバ110のための仕様ファイル102の少なくとも一部分を示す概略
図600である。概して、使用中のとき、モックサーバ110は、クライアントメッセージングアプリケーション108によって生成されたスタンザをインターセプトし、モックサーバ110のための仕様ファイル102によって指定された処理を実施し、クライアントメッセージングアプリケーション108に提供される応答を注入し得る。処理を実施するために、モックサーバ110は、スタンザのコンテンツを1つまたは複数のスタンザテンプレートと比較し得、たとえば、テンプレートは、仕様ファイル102および/または仕様ファイル102に基づいてコンパイラ104によって生成されたコードに基づく。たとえば、スタンザが、要求部分602中の値にマッチする属性を含む場合、モックサーバ110は、スタンザを検証するためのルールを決定し得る。モックサーバ110は、次いで、1つまたは複数のルールに基づいてスタンザを検証し得る。スタンザが検証される場合、モックサーバ110は、スタンザの一意のIDの指示ならびに任意の関連するRPCおよび/または応答ハンドラをレジストリ114に記憶し得る。
【0032】
示されているように、要求部分602が、現在時間をサーバメッセージングアプリケーション106に要求するためにクライアントメッセージングアプリケーション108によって生成されるべき要求スタンザのための1つまたは複数のパラメータを含む。要求部分602は、モックサーバ110が有効な応答を識別するために使用する1つまたは複数の要素を含む。たとえば、要求部分602がマッチした場合、応答部分604は、有効な応答(たとえば、現在時間)を定義する。モックサーバ110は、次いで、応答部分604の定義に基づいて応答スタンザを生成し、応答をクライアントメッセージングアプリケーション108に提供し得る。
【0033】
図7は、様々な実施形態による、例示的なスタンザを示す概略
図700である。示されているように、概略
図700は、クライアントメッセージングアプリケーション108によって生成された要求スタンザ702と、サーバメッセージングアプリケーション106および/またはクライアントメッセージングアプリケーション108のモックサーバ110によって生成された応答スタンザ704とを含む。スタンザ702、704は、1つまたは複数の仕様ファイル102に基づいてコンパイラ104によって生成されたコードに基づいて生成され得る。図示された例では、要求スタンザ702は、概して、現在時間を返すようにとの要求に関係し、応答スタンザ704は、現在時間を指示する応答である。
【0034】
たとえば、クライアントメッセージングアプリケーション108のグラフィカルユーザインターフェース(GUI)が、現在時間が表示され得る一部分を含み得る。したがって、要求スタンザ702は、プログラム的におよび/またはクライアントメッセージングアプリケーション108中で現在時間を表示することを指定するユーザ入力に応答して、生成され得る。受信されると、サーバメッセージングアプリケーション106は、適切な応答、たとえば、現在時間を含む応答スタンザ704を決定するために、702を処理し得る。受信されると、クライアントメッセージングアプリケーション108は、現在時間を表示するために応答スタンザ704を処理し得る。実施形態はこれらのコンテキストに限定されない。
【0035】
図8は、開示される実施形態に従う、例示的な流れ
図800を示す。流れ
図800は、クライアントデバイス202上で実行しているクライアントメッセージングアプリケーション108および/またはサーバ204上で実行しているサーバメッセージングアプリケーション106によって実施される動作を含み得る。
図8に示された動作は、一例としてサーバメッセージングアプリケーション106を含み得るが、モックサーバ110が、
図8中のサーバメッセージングアプリケーション106に関連する動作を実施し得る。実施形態はこれらのコンテキストに限定されない。
【0036】
示されているように、ブロック802において、ユーザが、所望の動作を実施するためにクライアントメッセージングアプリケーション108と対話し得る。たとえば、ユーザは、連絡先情報を閲覧すること、クライアントメッセージングアプリケーション108のページにアクセスすること、現在時間を閲覧することなど、任意の好適な目的のためにクライアントメッセージングアプリケーション108のGUI要素を選択し得る。ブロック804において、クライアントメッセージングアプリケーション108は、関連する動作のための仕様ファイル102に従って発信要求スタンザを生成する。そうすることは、スタンザのための仕様ファイル102に基づいてスタンザの1つまたは複数の属性とスタンザの1つまたは複数の子要素とを定義することを含み得る。たとえば、発信要求スタンザは、現在時間を受信するようにとの要求に基づき得、発信要求スタンザの属性は定義され得る。ブロック806において、クライアントメッセージングアプリケーション108の検証構成要素112は、1つまたは複数のルールに基づいてスタンザを検証する。検証構成要素112がスタンザを検証する場合、検証構成要素112は、スタンザの一意のIDの指示ならびに任意の関連するRPCおよび/またはRPCのための応答ハンドラをレジストリ114に記憶し得る。クライアントメッセージングアプリケーション108および/または検証構成要素112は、次いで、任意の識別された応答ハンドラを呼び出し得る。しかしながら、一意のIDが識別されない場合、検証構成要素112は、必要な応答ハンドラを呼び出すためにデシジョンツリー構成要素を呼び出し得る。
【0037】
ブロック808において、クライアントメッセージングアプリケーション108は、ブロック804において生成されたスタンザに対してWAP符号化を実施し得る。概して、WAP符号化は、スタンザの各要素がアレイの1つまたは複数のバイトを使用して表される、バイトのコンパクトなアレイにXMLベースのスタンザをコンバートするための符号化方式である。そうすることは、ネットワークを介して送信されるデータの量を低減する。いくつかの実施形態では、スタンザの共通の値が1つまたは複数の辞書エントリによって置き換えられ得る。たとえば、スタンザ中のURLの一部分(たとえば、example.com)が、辞書中で指定されたURLの部分のためのあらかじめ定義された値にコンバートされ得る。いくつかの実施形態では、WAP符号化は、ユニコード変換フォーマット-8ビット(UTF-8)符号化を含む。いくつかの実施形態では、スタンザ中のユーザ識別子(たとえば、username@example.com)が、特殊トークンを使用することによって区別され得、それらは、次いで、バイトストリームに符号化される。
【0038】
ブロック810において、クライアントメッセージングアプリケーション108は、符号化されたスタンザの1つまたは複数の部分を暗号化し得る。暗号化は、ノイズプロトコルフレームワーク、トランスポートレイヤセキュリティ(TLS)など、任意の好適な暗号化方式に従って実施され得る。ブロック812において、クライアントメッセージングアプリケーション108は、たとえば、伝送制御プロトコル(TCP)を使用して、暗号化されたスタンザをネットワーク206を介してサーバ204に送信する。サーバ204上で実行しているサーバメッセージングアプリケーション106は、次いで、暗号化されたスタンザを受信し、要求に対応する応答スタンザ、たとえば、現在時間の指示を伴う応答スタンザを生成し得る。応答スタンザは、符号化され、暗号化され、クライアントメッセージングアプリケーション108に送信され得る。
【0039】
ブロック814において、クライアントメッセージングアプリケーション108は、サーバメッセージングアプリケーション106から応答スタンザを受信し得る。ブロック816において、クライアントメッセージングアプリケーション108は、応答スタンザの任意の暗号化された部分を解読し得る。ブロック818において、クライアントメッセージングアプリケーション108は、応答スタンザを復号し得る。ブロック820において、クライアントメッセージングアプリケーション108は、レジストリ114を用いて要求スタンザのためのエントリをディスパッチする。上述のように、スタンザのスタンザIDがレジストリ114中で識別された場合、クライアントメッセージングアプリケーション108は、任意の関連する応答ハンドラ(たとえば、現在時間を含み得る、サーバの応答スタンザを処理するための応答ハンドラ)を呼び出し得る。そうではなく、スタンザのSMAX IDが指定されず、スタンザIDが識別されない場合、クライアントメッセージングアプリケーション108は、適切な応答ハンドラを決定し、呼び出すために、検証構成要素112のデシジョンツリーを呼び出し得る。応答ハンドラが呼び出されると、スタンザのためのエントリは、レジストリ114から削除され得る。ブロック822において、クライアントメッセージングアプリケーション108は、サーバメッセージングアプリケーション106から受信された応答スタンザに基づいて応答を生成する。たとえば、応答は、クライアントメッセージングアプリケーション108のGUI中で表示されるべき現在時間を含み得る。ブロック824において、ユーザは、クライアントメッセージングアプリケーション108におけるフィードバックおよび/または任意の他の入力を随意に提供し得る。
【0040】
図9は、開示される実施形態に従う、例示的な流れ
図900を示す。流れ
図900は、クライアントデバイス202上で実行しているクライアントメッセージングアプリケーション108および/またはサーバ204上で実行しているサーバメッセージングアプリケーション106によって実施される動作を含み得る。
図9に示された動作は、一例としてサーバメッセージングアプリケーション106を含み得るが、モックサーバ110が、
図9中のサーバメッセージングアプリケーション106に関連する動作を実施し得る。実施形態はこれらのコンテキストに限定されない。
【0041】
示されているように、ブロック902において、クライアントメッセージングアプリケーション108は、1つまたは複数の命令を生成し、ブロック904において、命令のためのスタンザを生成し得る。そうすることは、スタンザのための仕様ファイル102に基づいてスタンザの1つまたは複数の属性とスタンザの1つまたは複数の子要素とを定義することを含み得る。ブロック906において、検証構成要素112は、1つまたは複数のルールに従ってスタンザを検証し得る。検証される場合、検証構成要素112は、スタンザのためのスタンザIDの指示ならびに1つまたは複数のRPCおよび/または応答ハンドラをレジストリ114に記憶し得る。ブロック908において、スタンザと任意のRPCとが決定される。ブロック910において、スタンザと任意のRPCとは、エンベロープに符号化され、これは、サーバメッセージングアプリケーション106に送信され得る。しかしながら、スタンザが検証されない、たとえば、スタンザが1つまたは複数のルールに準拠しない場合、検証構成要素112は、スタンザをドロップし、スタンザのさらなる処理を控え得る。そうすることは、有効にフォーマットされたスタンザのみがメッセージングシステム200において送信されることを保証する。
【0042】
サーバメッセージングアプリケーション106は、次いで、ブロック912においてエンベロープを処理し得る。ブロック914において、サーバメッセージングアプリケーション106は、応答エンベロープを生成し得、これは、クライアントメッセージングアプリケーション108に送信される。ブロック916において、クライアントメッセージングアプリケーション108は、エンベロープを復号および/または解読して、サーバメッセージングアプリケーション106からの応答スタンザを決定し得る。ブロック918において、検証構成要素112は、ブロック916において決定された応答スタンザを検証し得る。そうすることは、応答スタンザの一意のスタンザIDを含むレジストリ114中のエントリを識別することを含み得る。エントリが識別されず、SMAX IDがスタンザ中で指定されていない場合、検証構成要素112は、応答スタンザのための任意のRPCおよび/または応答ハンドラを決定するためにデシジョンツリーアルゴリズムを呼び出し得る。そうすることは、検証構成要素112が、応答スタンザを処理するために応答スタンザのための適切な応答ハンドラを呼び出すことを可能にする。検証構成要素112は、さらに、ブロック920において、任意の出力を1つまたは複数のログファイルに記憶し得る。ブロック922において、検証されたスタンザに基づいて、応答が応答ハンドラによって生成される。そうすることは、適切な応答がクライアントメッセージングアプリケーション108において実現されることを可能にする。
【0043】
図10は、開示される実施形態に従う、例示的なルーチン1000を示す。流れルーチン1000は、クライアントデバイス202上で実行しているクライアントメッセージングアプリケーション108および/またはサーバ204上で実行しているサーバメッセージングアプリケーション106によって実施される動作を含み得る。
図10に示された動作は、一例としてサーバメッセージングアプリケーション106を含み得るが、モックサーバ110が、
図109中のサーバメッセージングアプリケーション106に関連する動作を実施し得る。実施形態はこれらのコンテキストに限定されない。
【0044】
ブロック1002において、ルーチン1000は、クライアントデバイスのプロセッサ上で実行しているクライアントメッセージングアプリケーション108によって、クライアントメッセージングアプリケーション108のための複数の仕様ファイル102のうちの第1の仕様ファイル102に基づいて、要求スタンザを生成する。ブロック1004において、ルーチン1000は、クライアントメッセージングアプリケーション108の検証構成要素112によって、第1の仕様ファイル102によって指定された1つまたは複数のパラメータに基づいて要求スタンザを検証する。ブロック1006において、ルーチン1000は、クライアントメッセージングアプリケーション108の検証構成要素112によって、要求スタンザのための1つまたは複数の応答ハンドラを呼び出す。ブロック1008において、ルーチン1000は、クライアントメッセージングアプリケーション108によって、サーバメッセージングアプリケーション106および/またはモックサーバ110など、サーバから応答スタンザを受信する。ブロック1010において、ルーチン1000は、1つまたは複数の応答ハンドラによって、応答スタンザを処理する。ブロック1012において、ルーチン1000は、クライアントメッセージングアプリケーション108によって、1つまたは複数の応答ハンドラの処理の出力を表示する。
【0045】
上述のように、上記で説明された実施形態は、メッセージングシステムによって実施され得、その一例が、次に、
図11を参照しながら説明される。
【0046】
図11は、例示的な実施形態とともに使用するのに好適なメッセージングサービス1100の様々な機能を実装する複数のサーバの一実施形態を示す。メッセージングサービス1100の様々な実施形態において、作業および機能の異なる分配が使用され得ることが諒解されよう。
【0047】
メッセージングサービス1100は、ドメイン名フロントエンド1102を備え得る。ドメイン名フロントエンド1102は、ドメイン名システム(DNS)においてメッセージングサービス1100に関連する1つまたは複数のドメイン名を割り当てられ得る。ドメイン名フロントエンド1102は、着信接続を受信し、その着信接続を、様々なメッセージングサービスを提供するサーバに分配し得る。
【0048】
メッセージングサービス1100は、1つまたは複数のチャットサーバ1106を備え得る。(1つまたは複数の)チャットサーバ1106は、チャットメッセージなどのユーザ間メッセージング更新を受信および送信するためのフロントエンドサーバを備え得る。着信接続は、作業負荷分散に基づいてドメイン名フロントエンド1102によって(1つまたは複数の)チャットサーバ1106に割り当てられ得る。
【0049】
メッセージングサービス1100は、バックエンドサーバ1144を備え得る。バックエンドサーバ1144は、(1つまたは複数の)フロントエンドチャットサーバ1106のチャット動作をサポートする特化したタスクを実施し得る。複数の異なるタイプのバックエンドサーバ1144が使用され得る。異なるバックエンドサーバ1144へのタスクのタイプの割り当ては、異なる実施形態において変化し得ることが諒解されよう。いくつかの実施形態では、専用サーバによって提供されるバックエンドサービスのうちのいくつかが、単一のサーバ、または、本明細書で説明される実施形態において異なるサーバ間で分割される複数のタスクを各々が実施するサーバのセットに、組み合わせられ得る。同様に、いくつかの実施形態では、本明細書で説明される専用バックエンドサーバ1144のうちのいくつかのタスクが、異なるサーバグループの異なるサーバ間で分割され得る。
【0050】
メッセージングサービス1100は、1つまたは複数のオフライン記憶サーバ1108を備え得る。1つまたは複数のオフライン記憶サーバ1108は、現在オフラインのメッセージングクライアントについてのメッセージングコンテンツを、それらのメッセージングクライアントが再接続するときのために、保留して記憶し得る。
【0051】
メッセージングサービス1100は、1つまたは複数のセッションサーバ1110を備え得る。1つまたは複数のセッションサーバ1110は、接続されたメッセージングクライアントのセッション状態を維持し得る。
【0052】
メッセージングサービス1100は、1つまたは複数のプレゼンスサーバ1114を備え得る。1つまたは複数のプレゼンスサーバ1114は、メッセージングサービス1100についてのプレゼンス情報を維持し得る。プレゼンス情報は、所与のユーザがオンラインメッセージングクライアントを有し、チャットのために利用可能であるか否か、オンラインメッセージングクライアントを有するが現在はそこから離れているかどうか、オンラインメッセージングクライアントを有しないかどうか、ならびに任意の他のプレゼンス状態を指示するユーザ固有情報に対応し得る。
【0053】
メッセージングサービス1100は、1つまたは複数のプッシュ記憶サーバ1112を備え得る。1つまたは複数のプッシュ記憶サーバ1112は、プッシュ要求をキャッシュし、そのプッシュ要求をメッセージングクライアントに送信し得る。プッシュ要求は、メッセージングクライアントを起動させるために、メッセージング更新が利用可能であることをメッセージングクライアントに通知するために、およびメッセージングクライアントとのサーバ側主体の(server-side-driven)対話を他の方法で実施するために使用され得る。
【0054】
メッセージングサービス1100は、1つまたは複数のグループサーバ1116を備え得る。1つまたは複数のグループサーバ1116は、グループのリストを維持し、グループにユーザを追加し、グループからユーザを削除し、グループチャットメッセージの受信、キャッシング、およびフォワーディングを実施し得る。
【0055】
メッセージングサービス1100は、1つまたは複数のブロックリストサーバ1130を備え得る。1つまたは複数のブロックリストサーバ1130は、ユーザ固有ブロックリストを維持し得、ユーザ固有着信ブロックリストは、各ユーザについて、そのユーザにメッセージを送信することを禁じられている1人または複数の他のユーザを指示する。代替または追加として、1つまたは複数のブロックリストサーバ1130は、各ユーザについて、そのユーザがメッセージを送信することを禁じられている1人または複数の他のユーザを指示するユーザ固有発信ブロックリストを維持し得る。着信ブロックリストと発信ブロックリストとは、組み合わせて、たとえばデータベースに記憶され得、着信ブロックリストと発信ブロックリストとは、ブロック情報の同じリポジトリの異なる見方を表すことが諒解されよう。
【0056】
メッセージングサービス1100は、1つまたは複数の最後に見られた情報サーバ1118を備え得る。1つまたは複数の最後に見られた情報サーバ1118は、最後に見られたロケーション、ステータス、メッセージングクライアント、およびメッセージングサービス1100へのユーザの最後に見られた接続の他の要素を指示する情報を受信、記憶、および維持し得る。
【0057】
メッセージングサービス1100は、1つまたは複数のキーサーバ1120を備え得る。1つまたは複数のキーサーバは、公開キー/秘密キーによる暗号化通信のための公開キーをホストし得る。
【0058】
メッセージングサービス1100は、1つまたは複数のプロフィール写真サーバ1122を備え得る。1つまたは複数のプロフィール写真サーバ1122は、メッセージングサービス1100の複数のユーザについてのプロフィール写真を記憶し、取出しのために利用可能にし得る。
【0059】
メッセージングサービス1100は、1つまたは複数のスパムロギングサーバ1132を備え得る。1つまたは複数のスパムロギングサーバ1132は、知られているスパムおよびスパムの疑いのあるもの(たとえば、不要メッセージ、特に販売促進の性質のもの)をログに記録し得る。1つまたは複数のスパムロギングサーバ1132は、メッセージがスパムであるかどうかを決定し、いくつかの実施形態では、疑われるスパム送信者(スパムメッセージを送出するユーザ)に対する処罰措置を実施するために、メッセージを分析するように動作可能であり得る。
【0060】
メッセージングサービス1100は、1つまたは複数の統計サーバ1134を備え得る。1つまたは複数の統計サーバは、メッセージングサービス1100の動作とメッセージングサービス1100のユーザの挙動とに関係する統計情報をコンパイルし、記憶し得る。
【0061】
メッセージングサービス1100は、1つまたは複数のウェブサーバ1136を備え得る。1つまたは複数のウェブサーバ1136は、ウェブブラウザとのハイパーテキスト転送プロトコル(HTTP)およびハイパーテキスト転送プロトコルセキュア(HTTPS)接続に関与し得る。
【0062】
メッセージングサービス1100は、1つまたは複数のチャット活動監視サーバ1138を備え得る。1つまたは複数のチャット活動監視サーバ1138は、メッセージングサービス1100のユーザによる不正な挙動または推奨されない挙動を決定するためにユーザのチャットを監視し得る。1つまたは複数のチャット活動監視サーバ1138は、スパムロギングサーバ1132およびブロックリストサーバ1130と協働し得、1つまたは複数のチャット活動監視サーバ1138は、スパムまたは他の推奨されない挙動を識別し、スパムロギングサーバ1132にスパム情報を提供し、適切な場合にはブロックリストサーバ1130にブロッキング情報を提供する。
【0063】
メッセージングサービス1100は、1つまたは複数の同期サーバ1140を備え得る。1つまたは複数の同期サーバ1140は、メッセージングサービス1100におけるユーザのための連絡先を決定するために、メッセージングサービス1100を、モバイルフォン上のアドレス帳など、メッセージングクライアントからの連絡先情報と同期させ得る。
【0064】
メッセージングサービス1100は、1つまたは複数のマルチメディアサーバ1142を備え得る。1つまたは複数のマルチメディアサーバは、メッセージングクライアント間を移動中のマルチメディア(たとえば、画像、ビデオ、オーディオ)、オフラインエンドポイントのためにキャッシュされたマルチメディアを記憶し得、マルチメディアのトランスコーディングを実施し得る。
【0065】
メッセージングサービス1100は、1つまたは複数の支払いサーバ1124を備え得る。1つまたは複数の支払いサーバ1124は、ユーザからの支払いを処理し得る。1つまたは複数の支払いサーバ1124は、支払いの実施のために外部サードパーティサーバに接続し得る。
【0066】
メッセージングサービス1100は、1つまたは複数の登録サーバ1126を備え得る。1つまたは複数の登録サーバ1126は、メッセージングサービス1100の新しいユーザを登録し得る。
【0067】
メッセージングサービス1100は、1つまたは複数の音声中継サーバ1128を備え得る。1つまたは複数の音声中継サーバ1128は、ボイスオーバーインターネットプロトコル(VoIP)呼の実施のためにメッセージングクライアント間でVoIP音声通信を中継し得る。
【0068】
いくつかの実施形態では、メッセージングサービス1100は、送出デバイスが受信デバイスによる解読のための情報を暗号化する、エンドツーエンド暗号化(E2EE)メッセージングサービスであり得る。メッセージングサービス1100の中間サーバは、E2EEセッションのセットアップを支援し得、デバイス間の通信の配信を容易にし得るが、通信のコンテンツを解読する(したがって、通信のコンテンツにアクセスする)ことができないことがある。E2EE環境では、非E2EE環境においてサーバによって実施されるであろうプロシージャにいくつかの調整(これらのプロシージャをなくすこと、それらを調整すること、またはそれらをクライアントデバイスのうちの1つまたは複数に移動すること)が行われる必要があり得る。
【0069】
図12は、前に説明された様々な実施形態を実装するのに好適な例示的なコンピュータアーキテクチャ1200の一実施形態を示す。一実施形態では、コンピュータアーキテクチャ1200は、システム100および/またはシステム200を含むか、あるいはシステム100および/またはシステム200の一部として実装され得る。
【0070】
本出願において使用される場合、「システム」および「構成要素」という用語は、ハードウェア、ハードウェアとソフトウェアとの組合せ、ソフトウェア、または実行中のソフトウェアのいずれかである、コンピュータ関連エンティティを指すことを意図し、それらの例が、例示的なコンピューティングコンピュータアーキテクチャ1200によって提供される。たとえば、構成要素は、限定はしないが、プロセッサ上で実行しているプロセス、プロセッサ、ハードディスクドライブ、(光学および/または磁気記憶媒体の)複数の記憶ドライブ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであり得る。例示として、サーバ上で実行しているアプリケーションとサーバの両方が構成要素であり得る。1つまたは複数の構成要素がプロセスおよび/または実行スレッド内に常駐することができ、構成要素は、1つのコンピュータ上に局在することができ、および/または2つまたはそれ以上のコンピュータ間で分散され得る。さらに、構成要素は、動作を協調させるように、様々なタイプの通信媒体によって互いに通信可能に結合され得る。協調は、情報の一方向または双方向の交換を伴い得る。たとえば、構成要素は、通信媒体上で通信される信号の形態で情報を通信し得る。情報は、様々な信号線に割り振られる信号として実装され得る。そのような割り振りでは、各メッセージが信号である。ただし、さらなる実施形態は、代替的にデータメッセージを採用し得る。そのようなデータメッセージは、様々な接続にわたって送出され得る。例示的な接続は、パラレルインターフェース、シリアルインターフェース、およびバスインターフェースを含む。
【0071】
コンピューティングアーキテクチャ1200は、1つまたは複数のプロセッサ、マルチコアプロセッサ、コプロセッサ、メモリユニット、チップセット、コントローラ、周辺機器、インターフェース、発振器、タイミングデバイス、ビデオカード、オーディオカード、マルチメディア入出力(I/O)構成要素、電源など、様々な一般的なコンピューティング要素を含む。しかしながら、実施形態は、コンピューティングアーキテクチャ1200による実装に限定されない。
【0072】
図12に示されているように、コンピューティングアーキテクチャ1200は、プロセッサ1212と、システムメモリ1204と、システムバス1206とを含む。プロセッサ1212は、様々な市販のプロセッサのいずれかであり得る。
【0073】
システムバス1206は、限定はしないが、システムメモリ1204を含むシステム構成要素のためのインターフェースをプロセッサ1212に提供する。システムバス1206は、様々な市販のバスアーキテクチャのいずれかを使用してメモリバス(メモリコントローラを有するかまたは有しない)、周辺バス、およびローカルバスにさらに相互接続し得るいくつかのタイプのバス構造のいずれかであり得る。インターフェースアダプタが、スロットアーキテクチャを介してシステムバス1206に接続し得る。例示的なスロットアーキテクチャは、限定はしないが、アクセラレーテッドグラフィックスポート(AGP)、カードバス、(拡張)業界標準アーキテクチャ((E)ISA)、マイクロチャネルアーキテクチャ(MCA)、NuBus、周辺構成要素相互接続(拡張)(PCI(X))、PCIエクスプレス、パーソナルコンピュータメモリカード国際組織(PCMCIA)などを含み得る。
【0074】
コンピューティングアーキテクチャ1200は、様々な製造品を含むかまたは実装し得る。製造品は、論理を記憶するためのコンピュータ可読記憶媒体を含み得る。コンピュータ可読記憶媒体の例は、揮発性メモリまたは不揮発性メモリ、取外し可能または非取外し可能メモリ、消去可能または非消去可能メモリ、書き込み可能または書き換え可能メモリなどを含む、電子データを記憶することが可能な任意の有形媒体を含み得る。論理の例は、ソースコード、コンパイルされたコード、解釈されたコード、実行可能コード、静的コード、動的コード、オブジェクト指向コード、視覚コードなど、任意の好適なタイプのコードを使用して実装される実行可能コンピュータプログラム命令を含み得る。実施形態はまた、1つまたは複数のプロセッサによって読み取りおよび実行されて、本明細書で説明される動作の実施を可能にし得る、非一時的コンピュータ可読媒体に含まれているかまたは非一時的コンピュータ可読媒体上にある命令として、少なくとも部分的に実装され得る。
【0075】
システムメモリ1204は、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、ダブルデータレートDRAM(DDRAM)、同期DRAM(SDRAM)、スタティックRAM(SRAM)、プログラマブルROM(PROM)、消去可能なプログラマブルROM(EPROM)、電気的に消去可能なプログラマブルROM(EEPROM)、フラッシュメモリ、強誘電性ポリマーメモリなどのポリマーメモリ、オーボニックメモリ(ovonic memory)、相変化または強誘電性メモリ、シリコン-酸化物-窒化物-酸化物-シリコン(SONOS)メモリ、磁気カードまたは光カード、独立ディスクの冗長アレイ(RAID)ドライブなどのデバイスのアレイ、ソリッドステートメモリデバイス(たとえば、USBメモリ、ソリッドステートドライブ(SSD))および情報を記憶するのに好適な任意の他のタイプの記憶媒体など、1つまたは複数の高速メモリユニットの形態の様々なタイプのコンピュータ可読記憶媒体を含み得る。
図12に示されている図示の実施形態では、システムメモリ1204は、不揮発性1208および/または揮発性1210を含むことができる。基本入出力システム(BIOS)が不揮発性1208に記憶され得る。
【0076】
コンピュータ1202は、内部(または外部)ハードディスクドライブ1230、取外し可能な磁気ディスク1220からの読取りまたは取外し可能な磁気ディスク1220への書込みを行うための磁気ディスクドライブ1216、および取外し可能な光ディスク1232(たとえば、CD-ROMまたはDVD)からの読取りまたは取外し可能な光ディスク1232への書込みを行うための光ディスクドライブ1228を含む1つまたは複数の低速メモリユニットの形態で、様々なタイプのコンピュータ可読記憶媒体を含み得る。ハードディスクドライブ1230、磁気ディスクドライブ1216および光ディスクドライブ1228は、それぞれ、HDDインターフェース1214、およびFDDインターフェース1218および光ディスクドライブインターフェース1234によって、システムバス1206に接続され得る。外部ドライブ実装のためのHDDインターフェース1214は、ユニバーサルシリアルバス(USB)およびIEEE1394インターフェース技術の少なくとも一方または両方を含むことができる。
【0077】
ドライブおよび関連するコンピュータ可読媒体は、データ、データ構造、コンピュータ実行可能命令などの揮発性の記憶および/または不揮発性の記憶を提供する。たとえば、オペレーティングシステム1222、1つまたは複数のアプリケーション1242、他のプログラムモジュール1224、およびプログラムデータ1226を含むいくつかのプログラムモジュールが、ドライブおよび不揮発性1208、および揮発性1210に記憶され得る。一実施形態では、1つまたは複数のアプリケーション1242、他のプログラムモジュール1224、およびプログラムデータ1226は、たとえば、仕様ファイル102、コンパイラ104、サーバメッセージングアプリケーション106、クライアントメッセージングアプリケーション108、モックサーバ110、検証構成要素112、およびレジストリ114など、システム100およびシステム200の様々なアプリケーションおよび/または構成要素を含むことができる。
【0078】
ユーザは、1つまたは複数のワイヤ/ワイヤレス入力デバイス、たとえば、キーボード1250、およびマウス1252などのポインティングデバイスを通してコンピュータ1202にコマンドおよび情報を入力することができる。他の入力デバイスは、マイクロフォン、赤外線(IR)リモートコントロール、無線周波数(RF)リモートコントロール、ゲームパッド、スタイラスペン、カードリーダ、ドングル、指紋リーダ、グローブ、グラフィックタブレット、ジョイスティック、キーボード、網膜リーダ、タッチスクリーン(たとえば、容量型、抵抗型など)、トラックボール、トラックパッド、センサー、スタイラスなどを含み得る。これらのおよび他の入力デバイスは、多くの場合、システムバス1206に結合された入力デバイスインターフェース1236を通してプロセッサ1212に接続されるが、パラレルポート、IEEE1394シリアルポート、ゲームポート、USBポート、IRインターフェースなど、他のインターフェースによって接続され得る。
【0079】
モニタ1244または他のタイプの表示デバイスも、ビデオアダプタ1246など、インターフェースを介してシステムバス1206に接続される。モニタ1244は、コンピュータ1202の内部または外部にあり得る。モニタ1244に加えて、コンピュータは通常、スピーカー、プリンタなど、他の周辺出力デバイスを含む。
【0080】
コンピュータ1202は、(1つまたは複数の)リモートコンピュータ1248など、1つまたは複数のリモートコンピュータへのワイヤおよび/またはワイヤレス通信を介した論理接続を使用して、ネットワーク化された環境において動作し得る。(1つまたは複数の)リモートコンピュータ1248は、ワークステーション、サーバコンピュータ、ルータ、パーソナルコンピュータ、ポータブルコンピュータ、マイクロプロセッサベースの娯楽機器、ピアデバイス、または他の一般的なネットワークノードであり得、通常、コンピュータ1202に関して説明された要素のうちの多くまたは全部を含むが、簡潔にするために、メモリおよび/または記憶デバイス1258のみが示されている。示される論理接続は、ローカルエリアネットワーク1256および/またはより大きなネットワーク、たとえば、ワイドエリアネットワーク1254へのワイヤ/ワイヤレス接続性を含む。そのようなLANおよびWANネットワーキング環境は、事務所や会社において一般的であり、イントラネットなどの企業規模のコンピュータネットワークを容易にし、コンピュータネットワークはすべて、グローバル通信ネットワーク、たとえば、インターネットに接続し得る。
【0081】
ローカルエリアネットワーク1256ネットワーキング環境において使用されるとき、コンピュータ1202は、ワイヤおよび/またはワイヤレス通信ネットワークインターフェースあるいはネットワークアダプタ1238を通してローカルエリアネットワーク1256に接続される。ネットワークアダプタ1238は、ローカルエリアネットワーク1256へのワイヤおよび/またはワイヤレス通信を容易にすることができ、ローカルエリアネットワーク1256は、ネットワークアダプタ1238のワイヤレス機能性と通信するために配設されたワイヤレスアクセスポイントをも含み得る。
【0082】
ワイドエリアネットワーク1254ネットワーキング環境において使用されるとき、コンピュータ1202は、モデム1240を含むことができるか、またはワイドエリアネットワーク1254上の通信サーバに接続されるか、またはインターネットを介してなど、ワイドエリアネットワーク1254上での通信を確立するための他の手段を有する。内部または外部にあり、ワイヤおよび/またはワイヤレスデバイスであり得る、モデム1240は、入力デバイスインターフェース1236を介してシステムバス1206に接続する。ネットワーク化された環境では、コンピュータ1202に関して示されたプログラムモジュール、またはその部分は、リモートメモリおよび/または記憶デバイス1258に記憶され得る。示されているネットワーク接続は例示であり、コンピュータ間で通信リンクを確立する他の手段が使用され得ることが諒解されよう。
【0083】
コンピュータ1202は、ワイヤレス通信(たとえば、IEEE802.11オーバージエア変調技法)において動作可能に配設されるワイヤレスデバイスなど、IEEE802規格ファミリーを使用するワイヤードおよびワイヤレスデバイスまたはエンティティと通信するように動作可能である。これは、とりわけ、少なくともWi-Fi(登録商標)(またはワイヤレスフィデリティ)、WiMax(登録商標)、およびBluetooth(登録商標)ワイヤレス技術を含む。したがって、通信は、従来のネットワークと同じように、あらかじめ定義された構造であり得るか、または、単に少なくとも2つのデバイス間のアドホック通信であり得る。Wi-Fiネットワークは、セキュアで信頼性が高く高速のワイヤレス接続性を提供するためにIEEE802.11(a、b、g、nなど)と称される無線技術を使用する。Wi-Fiネットワークは、コンピュータを互いに、インターネットに、および(IEEE802.3関連媒体および機能を使用する)ワイヤネットワークに接続するために使用され得る。
【0084】
図1~
図10を参照しながら前に説明されたデバイスの様々な要素は、様々なハードウェア要素、ソフトウェア要素、またはその両方の組合せを含み得る。ハードウェア要素の例は、デバイス、論理デバイス、構成要素、プロセッサ、マイクロプロセッサ、回路、プロセッサ、回路要素(たとえば、トランジスタ、抵抗器、キャパシタ、インダクタなど)、集積回路、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、デジタル信号プロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、メモリユニット、論理ゲート、レジスタ、半導体デバイス、チップ、マイクロチップ、チップセットなどを含み得る。ソフトウェア要素の例は、ソフトウェア構成要素、プログラム、アプリケーション、コンピュータプログラム、アプリケーションプログラム、システムプログラム、ソフトウェア開発プログラム、機械プログラム、オペレーティングシステムソフトウェア、ミドルウェア、ファームウェア、ソフトウェアモジュール、ルーチン、サブルーチン、関数、メソッド、プロシージャ、ソフトウェアインターフェース、アプリケーションプログラムインターフェース(API)、命令セット、コンピューティングコード、コンピュータコード、コードセグメント、コンピュータコードセグメント、ワード、値、シンボル、またはそれらの任意の組合せを含み得る。しかしながら、実施形態がハードウェア要素を使用して実装されるか、および/またはソフトウェア要素を使用して実装されるかの決定は、望まれる計算速度、電力レベル、熱耐性、処理サイクル予算、入力データレート、出力データレート、メモリリソース、データバス速度、および他の設計または性能の制約など、所与の実装形態について望まれる任意の数の要因に応じて変化し得る。
【0085】
図13は、上記の様々な実施形態を実装するのに好適な例示的な通信アーキテクチャ1300を示すブロック図である。通信アーキテクチャ1300は、送信機、受信機、トランシーバ、無線機、ネットワークインターフェース、ベースバンドプロセッサ、アンテナ、増幅器、フィルタ、電源など、様々な一般的な通信要素を含む。しかしながら、実施形態は、システム100、200に従い得る通信アーキテクチャ1300、および/またはメッセージングサービス1100による実装形態に限定されない。
【0086】
図13に示されているように、通信アーキテクチャ1300は、1つまたは複数のクライアント1302と、1つまたは複数のサーバ1304とを含む。(1つまたは複数の)サーバ1304は、システム200の1つまたは複数のデバイスを実装し得る。(1つまたは複数の)クライアント1302および(1つまたは複数の)サーバ1304は、クッキーおよび/または関連するコンテキスト情報など、それぞれの(1つまたは複数の)クライアント1302および(1つまたは複数の)サーバ1304にローカルの情報を記憶するために採用され得る、1つまたは複数のそれぞれのクライアントデータストア1306およびサーバデータストア1308に動作可能に接続される。
【0087】
(1つまたは複数の)クライアント1302および(1つまたは複数の)サーバ1304は、通信フレームワーク1310を使用して互いの間で情報を通信し得る。通信フレームワーク1310は、任意のよく知られている通信技法およびプロトコルを実装し得る。通信フレームワーク1310は、パケット交換ネットワーク(たとえば、インターネットなどの公共ネットワーク、社内イントラネットなどのプライベートネットワークなど)、回線交換ネットワーク(たとえば、公衆交換電話網)、または(好適なゲートウェイおよびトランスレータを用いた)パケット交換ネットワークと回線交換ネットワークとの組合せとして実装され得る。
【0088】
通信フレームワーク1310は、通信ネットワークを受け入れ、通信ネットワークと通信し、通信ネットワークに接続するように成される様々なネットワークインターフェースを実装し得る。ネットワークインターフェースは、特化した形態の入出力(I/O)インターフェースと見なされ得る。ネットワークインターフェースは、限定はしないが、直接接続、イーサネット(たとえば、シック、シン、ツイストペア10/100/1100BaseTなど)、トークンリング、ワイヤレスネットワークインターフェース、セルラーネットワークインターフェース、IEEE802.7a-xネットワークインターフェース、IEEE802.16ネットワークインターフェース、IEEE802.20ネットワークインターフェースなどを含む接続プロトコルを採用し得る。さらに、様々な通信ネットワークタイプに関与するために、複数のネットワークインターフェースが使用され得る。たとえば、ブロードキャスト、マルチキャスト、およびユニキャストネットワーク上での通信を可能にするために、複数のネットワークインターフェースが採用され得る。処理要件がより高い速度およびより多くの容量を求める場合には、分散ネットワークコントローラアーキテクチャが同様に採用されて、(1つまたは複数の)クライアント1302および(1つまたは複数の)サーバ1304によって必要とされる通信帯域幅をプールし、負荷分散し、他の方法で増大させ得る。通信ネットワークは、限定はしないが、直接相互接続、セキュア化されたカスタム接続、プライベートネットワーク(たとえば、社内イントラネット)、公共ネットワーク(たとえば、インターネット)、パーソナルエリアネットワーク(PAN)、ローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、インターネット上のノードとして動作しているミッション(OMNI)、ワイドエリアネットワーク(WAN)、ワイヤレスネットワーク、セルラーネットワーク、および他の通信ネットワークを含むワイヤードおよび/またはワイヤレスネットワークのうちの任意の1つおよびそれらの組合せであり得る。
【0089】
上記で説明されたデバイスの構成要素および特徴は、ディスクリート回路構成、特定用途向け集積回路(ASIC)、論理ゲート、および/またはシングルチップアーキテクチャの任意の組合せを使用して実装され得る。さらに、デバイスの特徴は、適宜、マイクロコントローラ、プログラマブル論理アレイおよび/またはマイクロプロセッサ、あるいは上記の任意の組合せを使用して実装され得る。本明細書では、ハードウェア、ファームウェアおよび/またはソフトウェア要素を、「論理」または「回路」と総称または個称し得ることに留意されたい。
【0090】
上記で説明されたデバイスの構成要素および特徴は、ディスクリート回路構成、特定用途向け集積回路(ASIC)、論理ゲート、および/またはシングルチップアーキテクチャの任意の組合せを使用して実装され得る。さらに、デバイスの特徴は、適宜、マイクロコントローラ、プログラマブル論理アレイおよび/またはマイクロプロセッサ、あるいは上記の任意の組合せを使用して実装され得る。本明細書では、ハードウェア、ファームウェアおよび/またはソフトウェア要素を、「論理」または「回路」と総称または個称し得ることに留意されたい。
【0091】
上記で説明されたブロック図に示されている例示的なデバイスは、多くの可能な実装形態の1つの機能的説明例を表し得ることが諒解されよう。したがって、添付の図面に示されるブロック機能の分割、省略、または包含は、これらの機能を実装するためのハードウェア構成要素、回路、ソフトウェア、および/または要素が実施形態において必ず分割、省略、または包含されることを示唆するものではない。
【0092】
少なくとも1つのコンピュータ可読記憶媒体は、実行されたとき、システムに、本明細書で説明されるコンピュータ実装方法のいずれかを実施させる命令を含み得る。
【0093】
いくつかの実施形態は、「一実施形態(one embodiment)」または「一実施形態(an embodiment)」という表現を、それらの派生語とともに使用して説明され得る。これらの用語は、当該実施形態に関して説明される特定の特徴、構造または特性が少なくとも1つの実施形態に含まれることを意味する。本明細書の様々な箇所に現れる「一実施形態では(in one embodiment)」というフレーズは、必ずしもすべてが同じ実施形態を指すとは限らない。その上、別段に記載されていない限り、上記で説明された特徴は、任意の組合せで一緒に使用可能であると認識される。したがって、特徴が互いに適合しないことが言及されない限り、別々に説明される任意の特徴が互いと組み合わせて採用され得る。
【0094】
本明細書で使用される表記および専門用語を全体的に参照すると、本明細書における詳細な説明は、コンピュータまたはコンピュータのネットワーク上で実行されるプログラムプロシージャの観点から提示され得る。これらの手続き的記載および表現は、当業者が他の当業者に自身の研究の本質を伝えるために使用される。
【0095】
プロシージャとは、ここでは、および一般的には、所望の結果をもたらす動作の自己矛盾のないシーケンスであると考えられる。これらの動作は、物理的量の物理的操作を必要とする動作である。通常、ただし必ずしもそうであるとは限らないが、これらの量は、記憶、転送、組合せ、比較および他の方法で操作されることが可能な電気信号、磁気信号または光信号の形態をとる。場合によっては、主に広く使用されているという理由から、これらの信号を、ビット、値、要素、シンボル、文字、項、数などと呼ぶことが好都合であることが判明している。しかしながら、これらの用語および同様の用語はすべて適切な物理的量に関連し、これらの量に適用される好都合な標識にすぎないことに留意されたい。
【0096】
さらに、実施される操作は、多くの場合、一般的には人間のオペレータによって実施される知的動作に関連する、追加または比較などの用語で参照される。1つまたは複数の実施形態の一部を形成する、本明細書で説明される動作のいずれにおいても、人間のオペレータのそのような能力は必要でないか、ほとんどの場合、望ましくない。むしろ、それらの動作は機械動作である。様々な実施形態の動作を実施するための有用な機械は、デジタルコンピュータまたは同様のデバイスを含む。
【0097】
いくつかの実施形態は、「結合された(coupled)」および「接続された(connected)」という表現を、それらの派生語とともに使用して説明され得る。これらの用語は必ずしも互いの同義語として意図されているとは限らない。たとえば、いくつかの実施形態は、「接続された」および/または「結合された」という用語を使用して、2つまたはそれ以上の要素が物理的または電気的に直接互いと接触していることを指示するように説明され得る。ただし、「結合された」という用語は、2つまたはそれ以上の要素が互いに直接接触していないが、それでもなお互いに協働または対話することをも意味し得る。
【0098】
様々な実施形態は、これらの動作を実施するための装置またはシステムにも関係する。この装置は、必要とされる目的のために特に構築され得るか、またはコンピュータに記憶されるコンピュータプログラムによって選択的に作動または再構成されるコンピュータを備え得る。本明細書において提示されるプロシージャは本質的に、特定のコンピュータまたは他の装置に関係しない。様々な機械が、本明細書における教示に従って書かれたプログラムとともに使用され得るか、または、必要とされる方法ステップを実施するためのより特化した装置を構築することが好都合であると判明することがある。様々なこれらの機械のために必要とされる構造は、与えられる説明から明らかとなるであろう。
【0099】
本開示の要約書は、読み手が技術的開示の本質を迅速に理解できるようにするために提供されていることを強調しておく。要約書は、特許請求の範囲の範囲または意味を解釈または限定することには使用されないという理解のもとに提出されている。さらに、上記の発明を実施するための形態では、本開示を効率化するために様々な特徴がまとめて単一の実施形態にされることがわかり得る。この開示方法は、特許請求される実施形態が各請求項に明示的に記された特徴以外のものを必要とするという意図を表すものと解釈されるべきではない。むしろ、以下の特許請求の範囲が表しているように、本発明の主題は、開示されている単一の実施形態のすべての特徴よりも少ない特徴にある。したがって、以下の特許請求の範囲は本明細書において発明を実施するための形態に組み込まれ、各請求項は個別の実施形態として独立している。添付の特許請求の範囲において、「including」および「in which」という用語は、それぞれ「comprising」および「wherein」というそれぞれの用語の平易な英語における等価語として使用されている。その上、「第1の」、「第2の」、「第3の」などの用語は単に標識として使用されており、それらの対象物に数値的要件を課すことを意図したものではない。
【0100】
上記の記載は、開示されるアーキテクチャの例を含む。当然ながら、構成要素および/または方法論のすべての考え得る組合せを記載することは不可能であるが、当業者であれば、多くのさらなる組合せおよび置き換えが可能であることを認識し得る。したがって、新規のアーキテクチャは、添付の特許請求の範囲の趣旨および範囲内にあるすべての改変、修正、および変形を包含することが意図される。
【符号の説明】
【0101】
100 システム、ルーチン
102 仕様ファイル
104 コンパイラ
106 サーバメッセージングアプリケーション
108 クライアントメッセージングアプリケーション
110 モックサーバ
112 検証構成要素
114 レジストリ
123 構成要素
200 システム、メッセージングシステム
202 クライアントデバイス
204 サーバ
206 ネットワーク
208 プロセッサ
210 メモリ
212 要求スタンザ、スタンザ
214 応答スタンザ、スタンザ
402 ミックスイン要素、部分
404 部分
406 部分
408 部分
502 ハンドラ部分
504 要求部分
506 応答部分
602 要求部分
604 応答部分
702 要求スタンザ、スタンザ
704 応答スタンザ、スタンザ
1100 メッセージングサービス
1102 ドメイン名フロントエンド
1106 チャットサーバ
1108 オフライン記憶サーバ
1110 セッションサーバ
1112 プッシュ記憶サーバ
1114 プレゼンスサーバ
1116 グループサーバ
1118 最後に見られた情報サーバ
1120 キーサーバ
1122 プロフィール写真サーバ
1124 支払いサーバ
1126 登録サーバ
1128 音声中継サーバ
1130 ブロックリストサーバ
1132 スパムロギングサーバ
1134 統計サーバ
1136 ウェブサーバ
1138 チャット活動監視サーバ
1140 同期サーバ
1142 マルチメディアサーバ
1144 バックエンドサーバ
1200 コンピュータアーキテクチャ
1202 コンピュータ
1204 システムメモリ
1206 システムバス
1208 不揮発性
1210 揮発性
1212 プロセッサ
1214 HDDインターフェース
1216 磁気ディスクドライブ
1218 FDDインターフェース
1220 取外し可能な磁気ディスク
1222 オペレーティングシステム
1224 プログラムモジュール
1226 プログラムデータ
1228 光ディスクドライブ
1230 ハードディスクドライブ
1232 取外し可能な光ディスク
1234 光ディスクドライブインターフェース
1236 入力デバイスインターフェース
1238 ネットワークアダプタ
1240 モデム
1242 アプリケーション
1244 モニタ
1246 ビデオアダプタ
1248 リモートコンピュータ
1250 キーボード
1252 マウス
1254 ワイドエリアネットワーク
1256 ローカルエリアネットワーク
1258 メモリおよび/または記憶デバイス
1300 通信アーキテクチャ
1302 クライアント
1304 サーバ
1306 クライアントデータストア
1308 サーバデータストア
1310 通信フレームワーク
【外国語明細書】