(57)【特許請求の範囲】
【請求項１】
リモートデバイスと通信する方法であって、当該方法は、
コンピュータプロセッサ及びネットワークインタフェースを使用する工程と、
前記リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見する工程と、
前記リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、該ソースアプリケーションから受信した該メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択する工程と、
前記選択アプリケーション層通信プロトコルに従って、メッセージを構築する工程と、
前記選択アプリケーション層通信プロトコル及び前記ネットワークインタフェースを使用して、前記コンピュータネットワークを介して、前記メッセージを前記リモートデバイスに送信する工程と、
を含み、
前記通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、前記メッセージが少なくとも一回搬送されることが必要か否かについて、及び前記メッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、方法。
【請求項２】
前記リモートデバイスへの送信のための第二メッセージを前記ソースアプリケーションから受信する工程と、
前記リモートデバイスと通信するのに使用される前記コンピュータネットワークの特徴の新たな計測結果及び前記メッセージのソースアプリケーションの通信特徴に基づいて、前記メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択し、
前記第二選択アプリケーション層通信プロトコルに従って、第二メッセージを構築する工程と、
前記コンピュータネットワークを介して、前記メッセージを前記リモートデバイスに送信する工程と、を含み、
前記メッセージを構築し、送信するのに使用される前記選択アプリケーション層通信プロトコルは、前記第二メッセージを構築するのに使用される前記第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである、請求項１に記載の方法。
【請求項３】
前記選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、請求項１に記載の方法。
【請求項４】
前記リモートデバイスのサポートされている前記アプリケーション層通信プロトコルのセットを発見する工程は、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、前記リモートデバイスから利用可能なメッセージブローカを要求する工程を含む、請求項１に記載の方法。
【請求項５】
前記リモートデバイスと通信するのに使用される前記コンピュータネットワークの特徴及び前記メッセージのソースアプリケーションの通信特徴に基づいて、前記ソースアプリケーションから受信した前記メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、前記選択アプリケーション層通信プロトコルとして選択する工程は、
前記コンピュータネットワークの特徴を検出する工程と、
前記ソースアプリケーションの通信特徴を決定する工程と、
前記コンピュータネットワークの特徴及び前記ソースアプリケーションの通信特徴に一致するデータベースの行を選択する工程と、
最も送信時間の短い選択行に対応する前記アプリケーション層通信プロトコルを選択する工程と、を含む、請求項１に記載の方法。
【請求項６】
前記コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、請求項５に記載の方法。
【請求項７】
送信された前記メッセージの通信パラメータに基づいて前記データベースを更新する工程を含む、請求項５に記載の方法。
【請求項８】
プロセッサと、
ネットワークインタフェースと、
前記プロセッサにより実行されると、前記プロセッサに、
リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見させ、
前記リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、該ソースアプリケーションから受信した該メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択させ、
前記選択アプリケーション層通信プロトコルに従って、メッセージを構築させ、
前記選択アプリケーション層通信プロトコル及び前記ネットワークインタフェースを使用して、前記コンピュータネットワークを介して、前記メッセージを前記リモートデバイスに送信させる、
命令を含む非一時的なマシン読み取り可能媒体と、
を含み、
前記通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、前記メッセージが少なくとも一回搬送されることが必要か否かについて、及び前記メッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、デバイス。
【請求項９】
前記命令は、前記プロセッサに、
前記リモートデバイスへの送信のための第二メッセージを前記ソースアプリケーションから受信させ、
前記リモートデバイスと通信するのに使用される前記コンピュータネットワークの特徴の新たな計測結果及び前記メッセージのソースアプリケーションの通信特徴に基づいて、前記メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択させ、
前記第二選択アプリケーション層通信プロトコルに従って、第二メッセージを構築させ、
前記コンピュータネットワークを介して、前記メッセージを前記リモートデバイスに送信させる、
命令を含み、
前記メッセージを構築し、送信するのに使用される前記選択アプリケーション層通信プロトコルは、前記第二メッセージを構築するのに使用される前記第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである、請求項８に記載のデバイス。
【請求項１０】
前記選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、請求項８に記載のデバイス。
【請求項１１】
前記プロセッサに、前記リモートデバイスのサポートされている前記アプリケーション層通信プロトコルのセットを発見させる前記命令は、前記プロセッサに、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、前記リモートデバイスから利用可能なメッセージブローカを要求させる命令を含む、請求項８に記載のデバイス。
【請求項１２】
前記プロセッサに、前記リモートデバイスと通信するのに使用される前記コンピュータネットワークの特徴及び前記メッセージのソースアプリケーションの通信特徴に基づいて、前記ソースアプリケーションから受信した前記メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、前記選択アプリケーション層通信プロトコルとして選択させる前記命令は、前記プロセッサに、
前記コンピュータネットワークの特徴を検出させ、
前記ソースアプリケーションの通信特徴を決定させ、
前記コンピュータネットワークの特徴及び前記ソースアプリケーションの通信特徴に一致するデータベースの行を選択させ、
最も送信時間の短い選択行に対応する前記アプリケーション層通信プロトコルを選択させる、
命令を含む、請求項８に記載のデバイス。
【請求項１３】
前記コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、請求項１２に記載のデバイス。
【請求項１４】
前記命令は、前記プロセッサに、送信された前記メッセージの通信パラメータに基づいて前記データベースを更新させる命令を含む、請求項１２に記載のデバイス。
【請求項１５】
プロセッサにより実行されると、該プロセッサに、
リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見させ、
前記リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、該ソースアプリケーションから受信した該メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択させ、
前記選択アプリケーション層通信プロトコルに従って、メッセージを構築させ、
前記選択アプリケーション層通信プロトコルを使用して、前記コンピュータネットワークを介して、前記メッセージを前記リモートデバイスに送信させ、
前記通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、前記メッセージが少なくとも一回搬送されることが必要か否かについて、及び前記メッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、プログラム。
【請求項１６】
前記プロセッサに、
前記リモートデバイスへの送信のための第二メッセージを前記ソースアプリケーションから受信させ、
前記リモートデバイスと通信するのに使用される前記コンピュータネットワークの特徴の新たな計測結果及び前記メッセージのソースアプリケーションの通信特徴に基づいて、前記メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択させ、
前記第二選択アプリケーション層通信プロトコルに従って、前記第二メッセージを構築させ、
前記コンピュータネットワークを介して、前記メッセージを前記リモートデバイスに送信させる、
ことを含み、
前記メッセージを構築し、送信するのに使用される前記選択アプリケーション層通信プロトコルは、前記第二メッセージを構築するのに使用される前記第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである、請求項１５に記載のプログラム。
【請求項１７】
前記選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、請求項１５に記載のプログラム。
【請求項１８】
前記プロセッサに、前記リモートデバイスのサポートされている前記アプリケーション層通信プロトコルのセットを発見させることは、前記プロセッサに、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、前記リモートデバイスから利用可能なメッセージブローカを要求させることを含む、請求項１５に記載のプログラム。
【請求項１９】
前記プロセッサに、前記リモートデバイスと通信するのに使用される前記コンピュータネットワークの特徴及び前記メッセージのソースアプリケーションの通信特徴に基づいて、前記ソースアプリケーションから受信した前記メッセージに対して、サポートされている前記アプリケーション層通信プロトコルのセットのうち一つを、前記選択アプリケーション層通信プロトコルとして選択させることは、前記プロセッサに、
前記コンピュータネットワークの特徴を検出させ、
前記ソースアプリケーションの通信特徴を決定させ、
前記コンピュータネットワークの特徴及び前記ソースアプリケーションの通信特徴に一致するデータベースの行を選択させ、
最も送信時間の短い選択行に対応する前記アプリケーション層通信プロトコルを選択させる、
ことを含む、請求項１５に記載のプログラム。
【請求項２０】
前記コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、請求項１９に記載のプログラム。
【請求項２１】
前記プロセッサに、送信された前記メッセージの通信パラメータに基づいて前記データベースを更新させることを含む、請求項１９に記載のプログラム。
【請求項２２】
請求項１５から２１のいずれか一項に記載のプログラムを含む、非一時的なマシン読み取り可能媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本特許文書の開示の一部は、著作権保護の対象となる資料を含んでいる。著作権の所有者は、米国特許商標庁の包袋又は記録に記されている通りに、特許文書又は特許公開の任意の者による複製に対しては異議はないが、それ以外の全てのいかなる著作権を有する。次の通知は、下記に記載され、本文書の一部を形成する図面中のソフトウェア及びデータに適用される：Copyright  Intel,  Inc.,  All  Rights  Reserved.
実施形態は、ネットワーク通信に関連する。いくつかの実施形態は、アプリケーション層通信プロトコルの適応選択に関する。追加的な実施形態は、モノのインターネット（ＩｏＴ）環境でのアプリケーション層通信プロトコルの適応選択に関する。
【背景技術】
【０００２】
通信プロトコルは、通信システムでの二つ以上のエンティティが情報を交換することのできる規則を定める。通信プロトコルは、メッセージフォーマット、アドレスフォーマット、アドレス変換、ルーティング、送信エラーの検出、アクノリッジメント、タイムアウト、リトライ、フロー制御、シーケンス制御等のための規則を定めることができる。
【０００３】
通信プロトコルは階層化されることができ、各層はエンドトゥーエンド通信に必要なタスクのサブセットを遂行するようになっている。例えば、インターネットエンジニアリングタスクフォース（ＩＥＴＦ）は、インタネットプロトコルスイートと呼ばれる、インターネットにわたる通信のための一式の階層を定めており、多くの異なる階層化されたプロトコルを抱えている。オープンシステムインターコネクト（ＯＳＩ）モデルを含む、他の階層モデルも存在する。
【図面の簡単な説明】
【０００４】
図面は、必ずしも縮尺通りではなく、図面において、異なる図での似たような番号は類似するコンポーネントを説明してよい。異なる末尾文字を有する似たような番号は、類似するコンポーネントの異なるインスタンスを表すことができる。図面は、概して、限定ではなく、例として、本文書で論じられる様々な実施形態を示す。
【図１】図１は、本開示のいくつかの例に従う、ネットワークの概略図である。
【図２】図２は、本開示のいくつかの例に従う、メッセージに対して、アプリケーション層通信プロトコルを動的に選択する方法のフローチャートを示す。
【図３】図３は、本開示のいくつかの例に従う、アプリケーション層通信プロトコルを動的に選択する方法のフローチャートを示す。
【図４】図４は、一つ以上の実施形態が実装されることのできるマシンの例を示すブロック図である。
【発明を実施するための形態】
【０００５】
通信プロトコルを利用する新興技術の一つのにモノのインターネット（ＩｏＴ）がある。ＩｏＴは、電子機器、ソフトウェア及びセンサ内に組み込まれた物理的なオブジェクト又は「モノ」のネットワークであり、これらのオブジェクトが、それらの間で、及び他のコンピューティングデバイスとの間でデータを収集し、交換することを可能にする。標準化団体が、デバイス発見、デバイス間通信、サービス発見及びセキュリティのためのプロシージャ並びにＩｏＴネットワークを形成し、維持するのに使用される他のプロシージャを規定する規格を形づくる処理を始めている。団体の例としては、オープンインターコネクトコンソーシアム（ＯＩＣ）、インターネットプロトコルフォースマートオブジェクト（ＩＰＳＯ）アライアンス及びインダストリアルインターネットコンソーシアムがある。
【０００６】
例において、ＯＩＣ規格は、ＯＩＣ動作に必要な一連の機能を規定する。ＯＩＣフレームワークは、その大部分が、オープンシステムインターコネクトモデルのセッション層、プレゼンテーション層及びアプリケーション層及びＩＰモデルのアプリケーション層で動作する。この規格は、プロトコルスタックの下位の階層（例えば、ＯＳＩモデル物理、データリンク、ネットワーク及びトランスポート通信プロトコル）のための既存のネットワーク技術を利用する。ＯＩＣフレームワークは、識別（Identification）、アドレッシング、発見、リソースモデル、デバイス管理、セキュリティ、メッセージング及びＣＲＵＤＮを提供する。ＣＲＵＤＮは、作成（Create）、取り出し（Retrieve）、更新（Update）、削除（Delete）及び通知（Notify）を意味し、これらは、ＯＩＣリソースを操作するのに定められた動作を規定する。この規格は、ＩｏＴネットワークで用いる、多くの受け入れ可能なアプリケーション層通信プロトコルを規定する。例としては、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）及びハイパーテキストトランスファープロトコル（ＨＴＴＰ）がある。
【０００７】
まとめると、ＩｏＴ環境は、ＣｏＡＰ、ＨＴＴＰ、ＭＱテレメトリートランスポート（ＭＱＴＴ）、ＭＱＴＴフォーセンサネットワーク（ＭＱＴＴ−ＳＮ）、アドバンストメッセージキューイングプロトコル（ＡＭＱＰ）、エクステンシブルメッセージングアンドプレゼンスプロトコル（ＸＭＰＰ）、リアルタイムトランスポートプロトコル（ＲＴＰ）、ＯＰＣユニファイドアーキテクチャ（ＯＰＣ  ＵＡ）等の数多くのアプリケーション層通信プロトコルをサポートする可能性が高い。現在、適切なアプリケーション層通信プロトコルを選択は、開発時のＩｏＴアプリケーションの開発者に委ねられている。選択されるプロトコルは、予測ネットワーク環境を含む、把握された使用事例に基づいて典型的には選択される。しかし、全てのデバイスが設計時に把握された使用事例に使用されるわけではなく、さらに重要なことは、全てのネットワーク環境が開発者により予測されたネットワーク環境に合致するわけではないことである。あるアプリケーション層通信プロトコル及びメッセージングパターンの組み合わせだと、他のそのような組み合わせと比較して、ある実世界ネットワーク環境において、レイテンシ、信頼度及びバンド幅利用の観点からより高いパフォーマンスを提供することができる。ゆえに、汎用的な（one-size-fits-all）アプリケーション層通信プロトコルの選択では、最適ではない結果につながる可能性がある。
【０００８】
いくつかの例で開示されるのは、送信アプリケーションの一つ以上の通信特徴、及び送信デバイスと受信デバイスとの間のネットワーク接続の一つ以上の特徴に基づいてアプリケーション層通信プロトコルの自動選択を行う方法、システム及びデバイスである。使用するプロトコルの選択は、メッセージ単位ベースでなされる、様々な間隔で定期的に（例えば、所定の時間周期ごと）なされる、アプリケーションの開始時に一度だけなされる等、でよい。アプリケーション層通信プロトコルを動的に選択することで、アプリケーションは、その時のアプリケーションの通信特徴及びネットワーク接続の特徴を考慮した特定のプロトコルの優位性を利用することができる。
【０００９】
アプリケーション層通信プロトコルを適応的に選択することで、動的アプリケーション要件及びネットワーク条件の両方に対応することのできる分散ネットワークデバイスが可能となる。さらに、これは、生成されるネットワークトラフィック及び、搬送する情報コストを大いに低減することになる。一つの実装例においては、適応的アプリケーション層通信プロトコル選択を使用することによって、試験では、ＭＱＴＴ、ＣｏＡＰ及びＯＰＣ  ＵＡでの０〜１０Ｋｂｙｔｅのデータ送信に基づいて、ゲートウェイからバックホール通信への送信時間が、ロングタームエボリューション（ＬＴＥ）ネットワークでは８０％、３Ｇセルラーネットワークでは４５％低減できることが示されている。この試験で使用された選択アルゴリズムは、各メッセージサイズに対して送信時間を最小にするプロトコルを選択している。このアルゴリズムは、１ｋｂのペイロードサイズに対してはＣｏＡＰ（又は、同様に、ＯＰＣ  ＵＡ）を、１〜８ｋｂのペイロードサイズに対してはＯＰＣ  ＵＡを、及び８〜１０ｋｂのペイロードサイズに対してはＭＱＴＴ（又は、同様に、ＯＰＣ  ＵＡ）を選択する。
【００１０】
ここで開示されているプロトコル選択技術の追加的な恩恵の一つとしては、新たに追加されたプロトコルを旧アプリケーションで利用することができることである。ゆえに、新たなテクノロジーを活用して、旧アプリケーションを支援することになる。
【００１１】
さて、図１を参照すると、本開示のいくつかの例に従う、ネットワーク環境１０００の概略が示されている。ネットワーク環境１０００は、様々な例において、ＩｏＴネットワーク環境であってよい。デバイス１０１０は、ネットワーク１０３０でリモートデバイス１０２０と通信する。種々の例におけるデバイス１０１０は、ＩｏＴデバイス、デスクトップコンピュータ、ラップトップコンピュータ、スマートフォン、サーバコンピュータ又は他のコンピューティングデバイスであってよい。デバイス１０１０は有線又は無線の手段を通じてネットワーク１３０に接続されていることができる。例えば、デバイス１０１０は、ＷｉＦｉ（米国電気電子学会（ＩＥＥＥ）８０２．１１標準ファミリに従って動作するように構成されたネットワーク）、セルラー（例えば、３Ｇ、４Ｇ及び５Ｇネットワーク）、イーサネット(登録商標)等を利用してよい。デバイス１０１０はクライアントデバイス、サーバデバイス又はその両方の役割を果たしてよい。
【００１２】
デバイス１０１０は、一つ以上のアプリケーション１０４０をサポートすることができる。アプリケーション１０４０は、センサアプリケーション、サーモスタットアプリケーション、照明アプリケーション等のＩｏＴアプリケーションであってよい。他の例においては、アプリケーション１０４０は、インターネットブラウザ、電子メールアプリケーション、文書処理アプリケーション、表計算アプリケーション等のエンドユーザアプリケーションであってよい。アプリケーション１０４０は、ネットワーク１０３０を介して、アプリケーション層通信プロトコル等の一つ以上の通信プロトコルを使用するリモートデバイス１０２０を含む、一つ以上の他のリモートデバイスとデータを送受信する。リモートデバイス１０２０は、デバイス１０１０と同一のもの又は異なるものであってよく、クライアントデバイス、サーバデバイス又はその両方の役割を有してよい。リモートデバイス１０２０は、いくつかの例においては、ＩｏＴデバイス、デスクトップコンピュータ、ラップトップコンピュータ、スマートフォン、サーバコンピュータ又は他のコンピューティングデバイスであってよい。
【００１３】
デバイス１０１０は、一つ以上のアプリケーション層通信プロトコルを実装することのできる一つ以上のアプリケーション層通信プロトコルモジュール１０５０を含むことができる。例としては、ＣｏＡＰ、ＭＱＴＴ、ＯＰＣ  ＵＡ、ＨＴＴＰ等が含まれる。いくつかの例においては、アプリケーション層通信プロトコルモジュール１０５０はアプリケーション１０４０内部で実装されることができる。アプリケーション層通信プロトコルモジュール１０５０は、それぞれ、メッセージングプロトコルを実装する。アプリケーション１０４０から送信されるメッセージは、アプリケーション層通信プロトコルモジュール１０５０の一つにより受信される。アプリケーション層通信プロトコルモジュール１５０は、所望のアプリケーション層通信プロトコルに対応し、その対応するプロトコルに従ってメッセージを構築し、それを下位層通信プロトコルモジュール１０６０に送信する。
【００１４】
デバイス１０１０は、アプリケーション層よりも下位にある通信プロトコルスタックの層を実装することのできる下位層通信プロトコルモジュール１０６０を含むことができる。実装される層の例としては、物理、データリンク、ネットワーク、トランスポート、セッション、インターネット及びプレゼンテーションプロトコルのうちの一つ以上が含まれてよい。実装されるプロトコルの例としては、イーサネット(登録商標)、インターネットプロトコル、トランスミッションコントロールプロトコル（ＴＣＰ）、８０２．１１規格のためのプロトコル（例えば、ＰＨＹ、ミディアムアクセスコントロール、ロジカルリンクコントロール等）等の一つ以上が含まれる。下位層通信プロトコルモジュール１０６０は、アプリケーション層通信プロトコルモジュール１０５０からメッセージを受信することができ、下位層通信プロトコルモジュール１０６０によって実装される様々なプロトコルに従って、一つ以上のメッセージにデータをカプセル化することができ、メッセージをネットワーク１０３０を介して、一つ以上のリモートデバイス（例えば、リモートデバイス１０２０）に送信する。同様に、リモートデバイス１０２０からの到来メッセージに対しては、下位層通信プロトコルモジュール１０６０は、下位層通信プロトコルモジュール１０６０が実装するプロトコルに適切なように到来メッセージを処理し、アプリケーション層メッセージを、メッセージのアプリケーション層に対応するアプリケーション層通信プロトコルモジュール１０５０にわたすことができる。処理の例としては、フロー制御パラメータ、ルーティング、アクノリッジメントの処理及び送信等が含まれてよい。
【００１５】
デバイス１０１０は、選択モジュール１０７０を含むことができる。選択モジュールは、利用可能なアプリケーション層通信プロトコルから適切なアプリケーション層通信プロトコルを動的に選択することができる。発見モジュール１０８０は、リモートデバイス１０２０によりサポートされているアプリケーション層通信プロトコルを発見するプロトコル発見に従事することができる。いくつかの例においては、発見モジュール１０８０は、（アプリケーション層通信プロトコルモジュール１０５０によりフォーマットされた）ＨＴＴＰのＧＥＴリクエストメッセージを送信し、このメッセージをリモートデバイス１０２０に送信するため、下位層通信プロトコルモジュール１０６０にこのメッセージを渡すことでこれを行うことができる。リモートデバイス１０２０からデバイス１０１０への応答は、利用可能なアプリケーション層通信プロトコルのリストであることができる。リモートデバイス１０２０のサポートされているアプリケーション層通信プロトコルは、リモートデバイス１０２０の固有識別子によりインデックス化されて、データストア１１２０に記憶されることができる。プロトコル発見は定期的に行われて、リモートデバイス１０２０についてサポートされているプロトコルのリストが最新のものであることを保証することができる。例えば、プロトコル発見は、定期的（例えば、最後のプロトコル発見から所定の期間が経過した後）、各通信セッションの後、一度だけ、デバイス１０１０によってリモートデバイス１０２０に各メッセージが送られる前に等で行われることができる。いくつかの例においては、サポートされているプロトコルの定期的なリフレッシュによって、新たなプロトコルが利用可能になると、それらを使用することができる。
【００１６】
発見モジュール１０８０は、どの通信プロトコルがデバイス１０１０によってサポートされているかを決定する。これは、アプリケーション１０４０又はアプリケーション層通信プロトコルモジュール１０５０とのプロセス間通信によってなされることができる。他の例においては、これは、情報をデータストア１１２０から読み出すことによって達成することができる。アプリケーション層通信プロトコルモジュール１０５０又はアプリケーション１０４０は、サポートされているアプリケーション層通信プロトコルをデータストア１１２０のレジストリに記録することができる。
【００１７】
発見モジュール１０８０は、アプリケーション１０４０と通信して、アプリケーション１０４０の一つ以上の通信特徴を決定してもよい。これは、アプリケーション１０４０の一つからのメッセージの受信、アプリケーション１０４０のインストール、選択モジュール１０７０のインストール等の一つ以上によりなされてよい。いくつかの例においては、一度、アプリケーション１０４０の通信特徴が決定されたら、データストア１１２０に記憶され、その後に続くメッセージに用いられる。アプリケーション１０４０の通信特徴は、一度記憶されたら、定期的に更新されることができる（例えば、最後の更新から所定の期間が経過した後）。
【００１８】
通信特徴の例としては、片道レイテンシ耐性、往復レイテンシ耐性（例えば、ラウンドトリップタイム）、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、メッセージが少なくとも一回搬送されることが必要か否かについて、及びメッセージは一度だけ搬送される可能性があるか否かについて、のうち一つ以上が含まれる。これらの特徴は、クオリティーオブサービス（ＱｏＳ）特徴と称されることができる。
【００１９】
ネットワーク分析モジュール１１００は、デバイス１０１０と通信の受信者（例えば、リモートデバイス１０２０等のリモートデバイス）との間のネットワーク接続の一つ以上の特徴を決定することができる。ネットワーク特徴の例としては、片道レイテンシ、往復レイテンシ（例えば、ラウンドトリップタイム）、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率、可用性等が含まれる。ネットワークの特徴は、一つ以上のテストパケットをネットワークを介して送信することにより、又はリモートデバイス１０２０に受信又は送信された過去のトラフィックの分析により、決定されてよい。例えば、インターネットコントロールメッセージプロトコル（ＩＣＭＰ）エコーリクエストパケットを送信する（例えば、リモートデバイスにピング（ping）する）ことで、デバイス１０１０は、ＲＴＴ、誤り率、パケット損失等を決定することができる。いくつかの例においては、ジッタ等の特徴は、経時的に接続レイテンシにおける変動性を分析することより決定されることができる。これらのネットワーク接続の特性はデータストア１１２０に記憶されることができる経時的な測定を用いて計算された、ジッタ等の特性については、レイテンシ等の履歴値がデータストア１１２０に記憶されることができ、特徴が定期的に発見モジュール１０８０によって計算されることができる。
【００２０】
データストア１１２０は一つ以上のストレージデバイスを含み、一つ以上の関係データベースにより管理されることができる。データベースは、関係データベースに対して発行される一つ以上のコマンドを用いて、検索される、又は項目が追加、削除若しくは移動されることができる。コマンドは、構造化照会言語（ＳＱＬ）等の一つ以上のプログラミング言語に従ってフォーマット化される。データストア１１２０は、一つ以上のアプリケーション（例えば、アプリケーション１０４０）の通信特徴、デバイスと一つ以上のリモートデバイスとの間の経時的なネットワーク接続の特徴等を記憶することができる。例えば、データストアは、ネットワーク接続による特定のリモートデバイスへ送信された各メッセージについてのプロトコル、レイテンシ、アプリケーションレイテンシ耐性、アクノリジッメントが必要とされたか否か、ペイロードサイズ及び送信時間等の過去の送信の通信パラメータを記憶する履歴データベーステーブルを記憶することができる。異なるリモートデバイスとの各通信セッションは、別々のテーブルに記憶されることができる。履歴データベースの例としては、
【表１】
0006404301.tif 000002
のようであってよい。
【００２１】
履歴データベースのフィールドは、上記特徴を備えた過去のメッセージに由来している。例えば、送信前の測定ネットワークレイテンシが３５ｍｓで、ＣｏＡＰで送信された３ｋＢのメッセージは、実送信時間が４０ｍｓであった。アプリケーションは、３８ｍｓのレイテンシ耐性が必要とされるメッセージを送信し、アクノリッジメントを必要としなかった。履歴データベースは、デバイス上での複数のアプリケーション１０４０からの実世界のメッセージを捉えていることに留意されたい。これにより、デバイス上の各アプリケーションは、メッセージを送信したアプリケーションにかかわらず、特定の宛先のデバイスに送信された全ての過去のメッセージから得た情報により利益を得ることができる。
【００２２】
履歴データベースのテーブルは特定の宛先のデバイスに特有なものとして説明されているが、他の例においては、履歴データベースは全ての宛先に共通であってよい。これは、より完全なデータを得る利益がある一方で、ネットワーク条件が、各異なるデバイスについて、異なるネットワーク経路間で実質的に変化し得るため、正確性がより低下する可能性がある。
【００２３】
さらに追加的な例においては、履歴データベースは、同一のテーブルでの類似するネットワーク位置を有する異なるリモートデータベースについての履歴データを集約することができる。例えば、同一ドメイン、同一のサブネット、ローカルネットワーク等での二つの異なるデバイスについては、まとめて記憶された履歴データとすることができる。これにより、適切なアプリケーション層通信プロトコルの選択を決定する付加的なデータが提供されるが、同時に異なるデバイス間で起きるネットワーク条件間での変動を最小限にする工程が取り入れられる。二つのデバイスは、デバイスとのネットワーク接続の特徴が同一のテーブルに記憶されるのに、十分な程度類似しているか否かについては、例えば、リモートデバイスのＩＰアドレスの比較に基づいて、決定されることができる。
【００２４】
制御モジュール１０９０は、一つ以上のネットワーク接続の特徴と、メッセージを送信する一つ以上のアプリケーションの通信特徴を利用して、履歴データベースを用いた適切なアプリケーションメッセージングプロトコルを選択することができる。種々の例においては、選択モジュール１０７０は、最も速い送信時間を有し、アプリケーションの最低通信特徴も満たすメッセージングプロトコルを選択することができる。
【００２５】
例えば、選択モジュール１０７０は、履歴データベースを用いて、現在のメッセージに対して最適なアプリケーション層通信プロトコルを選択する。選択モジュール１０７０は、まず、メッセージを送信し、現在の測定ネットワークレイテンシ（又は、測定レイテンシの所定の閾値以内）に合致し、ペイロードサイズ（又は、ペイロードサイズの所定の閾値以内）に合致する、アプリケーションの最低アプリケーション特徴を満たすテーブルの行を選択する。そして、選択モジュール１０７０は、履歴で最も短い送信時間を生成した行を選択する。選択された行でのプロトコルの列でのプロトコルが、このメッセージについて使用されるアプリケーション層通信プロトコルとして選択される。
【００２６】
様々な例において、この適応的プロトコル選択は、アプリケーション１０４０に対して透過的に実装されることができる。例えば、アプリケーション１０４０は、アプリケーション層通信プロトコルモジュール１０５０を介した様々なプロトコル（例えば、ＨＴＴＰ）を用いてメッセージを送信するように設計されてよい。装置上の選択モジュール１０７０は、このメッセージを送信前に傍受して（intercept）、理想的なプロトコルを選択し、メッセージ内容を除去し、アプリケーション層通信プロトコルモジュール１０５０を介して選択されたプロトコルを用いて、メッセージを再パッケージする。選択モジュール１０７０は、リモートデバイスから応答又は他のメッセージを受信すると、選択されたプロトコルからの到来メッセージをアプリケーション固有の（native）プロトコルにも変換することができる。選択モジュール１０７０は、データストア１１２０の各メッセージのオリジナルのプロトコルを追跡して、任意の応答をそのオリジナルのプロトコルに再変換する。他の例においては、アプリケーション１０４０は、メッセージ内容を、適切なプロトコルをその後に選択する選択モジュール１０７０に直接送信し、アプリケーション層通信プロトコルモジュール１０５０を用いてメッセージを形成し、下位層通信プロトコルモジュール１０６０を用いてメッセージを送信することができる。
【００２７】
他の例においては、ここで開示された方法は、アプリケーションそのもの内で実装されてよく、その実装を支援することのできる様々なサービスが定められてよい。例えば、選択モジュール１０７０は、アプリケーションに一つ以上のライブラリ機能を提供して、適切なアプリケーション層通信プロトコルの選択を支援してよい。
【００２８】
ここで図２を参照すると、本開示のいくつかの例に従う、メッセージに対して、アプリケーション層通信プロトコルを動的に選択する方法２０００のフローチャートが示されている。この処理は、一度、アプリケーション１０４０（例えば、ソースアプリケーション）がメッセージを送信したら、メッセージ単位ベースで行われることができる。動作２０１０では、デバイス（例えば、図１の発見モジュール１０８０）は通信しているリモートデバイスでサポートされているアプリケーション層通信プロトコルを発見することができる。いくつかの例においては、これは、キャッシュ又はデータストア１１２０等のデータベースに保存されているデータを読み出すことによって達成されることができる。サポートされているアプリケーション層通信プロトコルが既に決定され、記憶されていてもよい。データストア１１２０にデータが記憶されていなければ、サポートされているアプリケーション層通信プロトコルは、ＨＴＴＰ等の利用可能なアプリケーション層通信プロトコルを用いて、リモートデバイスの利用可能なメッセージブローカ（例えば、リモートデバイスで利用可能なアプリケーション層通信プロトコルモジュール）に要求することによって決定されることができる。これらの例においては、ＨＴＴＰ  ＧＥＴを用いたリプレゼンテーショナルステートトランスファー（ＲＥＳＴful）クエリが、リモートデバイスの既知のＵＲＬに利用されることができ、利用可能なアプリケーション層通信プロトコルを得る。その情報は、その後に、データストア（例えば、図１のデータストア１１２０）に保存されることができる。その情報は一つ以上のデータベースコマンドを用いて保存されることができる。例えば、データベースがＳＱＬｉｔｅデータベースである場合は、テーブルに行を挿入する一つ以上のコマンドがリモートデバイスによりインデックス化される。
【００２９】
動作２０２０では、デバイスは適切なアプリケーション層通信プロトコルを選択する。この動作は、後述の図３でさらに説明する。一度、アプリケーション層通信プロトコルが選択されると、動作２０３０では、選択されたアプリケーション層通信プロトコルによって特定されるメッセージのフォーマット及び構成の規則に従ってメッセージが構成される。これは、アプリケーション層通信プロトコルモジュール１０５０の一つによって行われることができる。いくつかの例においては、この動作は、メッセージを送信するアプリケーションから現在のメッセージペイロードを取得することを含む。そのメッセージペイロードは、アプリケーションを通じて直接的に取得されることができる。例えば、アプリケーション１０４０が、関数パラメータがメッセージである、選択モジュール１０７０により提供される選択機能を呼び出すことができる。選択モジュール１０７０は、その後、選択されたアプリケーション層通信プロトコルに対応する適切なアプリケーション層通信プロトコルモジュールへのメッセージを送付（route）することができる。他の例においては、アプリケーション１０４０は、選択されたアプリケーション層のプロトコルそのものにメッセージを送付してよい。この例においては、選択モジュールは、単に選択のみを行い、アプリケーション４００に任せて、適切にメッセージを送付する。さらに、他の例においては、メッセージはアプリケーションにより選択された異なるアプリケーション層通信プロトコルで既に符号化されたメッセージから抽出されてものであってよい（例えば、選択モジュールの動作がエンドアプリケーションに透過である場合）。メッセージペイロードは、構成され、フォーマットされることができ、必要なヘッダが付け加えられることができる。フォーマットの例としては、Comma  Separated  Values（ＣＳＶ）、JavaScript(登録商標)  Object  Notation（ＪＳＯＮ）及びExtensible  Markup  Language（ＸＭＬ）が含まれる。
【００３０】
動作２０４０では、メッセージがリモートデバイスに発送される。いくつかの例においては、これは、メッセージを下位レベルの通信プロトコルを通過させることを組み込む。例えば、図１の下位層通信プロトコルモジュール１０６０によって実装されるように、ＴＣＰ／ＩＰヘッダを付加し、最終的にはそれを物理的媒体上に（例えば、有線で、無線送信を介して等）送信する。例えば、図４のネットワークインタフェースデバイス４０２０を用いる。いくつかの例においては、これは、リモートデバイスへの接続を開始することを必要としてよい（例えば、ＴＣＰセッション、アプリケーション層接続等）。一度、メッセージが送信されると、履歴データベースは送信の通信パラメータで更新されることができる。例えば、選択プロトコル、メッセージ送信時間、アプリケーションの通信特徴、ペイロードサイズ、デバイスとリモートデバイスとの間のネットワーク接続の特徴のタプリを記憶する行が追加されることができる。例えば、行は、ＳＱＬｉｔｅ命令文の使用を通じて挿入されることができる。いくつかの例においては、履歴データベースは図１のデータストア１１２０であることができる。
【００３１】
ここで、図３を参照すると、本開示のいくつかの例に従う、アプリケーション層通信プロトコルを動的に選択する方法３０００のフローチャートが示されている。動作３０１０では、デバイスは、デバイスと通信の受信者（例えば、リモートデバイス）との間のネットワーク接続の一つ以上の特徴を検出することができる。例えば、これは、図１のネットワーク分析モジュール１１００によってなされることができる。これらの特徴は、片道レイテンシ、往復レイテンシ（例えば、ラウンドトリップタイム）、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率、可用性を含むことができる。いくつかの例においては、これは、ＲＴＴをテストするため、リモートデバイスへのＩＣＭＰエコーリクエストを発行する「ピング（ping）」コマンドを発行することによってなされることができる。一つ以上のネットワーク特徴が図１のデータストア１１２０等のローカルデータベースに記憶されることができる。例えば、行又は列はＳＱＬｉｔｅ命令文の使用を通じてテーブルに挿入されることができる。
【００３２】
動作３０２０では、デバイス（例えば、図１の発見モジュール１０８０）は、メッセージを送信しているアプリケーションの一つ以上の通信特徴を決定することができる。いくつかの例においては、これは、ローカルデータベース（例えば、データストア１１２０）又はキャッシュへの問い合わせ（例えば、ＳＱＬｉｔｅクエリコマンド）による、以前に記憶されたアプリケーションの通信特徴の取り出し（アプリケーションとの以前の通信を通じて以前に記憶された、又はアプリケーションがデータベースに特徴を置いておく（place）ことができる）を組み込む。ローカルデータベースがアプリケーションの通信特徴についての情報を含んでいない場合は、デバイスは、アプリケーションプログラミングインタフェース（ＡＰＩ）を通じてアプリケーションに問い合わせをすることができる。例えば、選択モジュール１０７０が、選択モジュール１０７０及びアプリケーション１０４０の両方によって実装されたＡＰＩを用いてアプリケーション１０４０に問い合わせをすることができる。他の例においては、アプリケーションがインストールされるときに、この情報がレジストリ又は他の中央ストア（データストア１１２０又はいくつかの他のデータストレージロケーション）に書き込まれてよい。さらに、追加的な例においては、通信特徴はアプリケーションのメッセージング履歴の観察に基づいて決定されてよい。例えば、レイテンシ要件はアプリケーション送信リトライ要求の観察し、そして、以前のメッセージが時間通りに到着しなかったと推察することを通じて決定されることができ、レイテンシ要件は、その時の目的地までのネットワークレイテンシよりも小さい。同様に、アクノリッジメント要件も、アプリケーションによって送信／受信されたアクノリッジメントとして観察されることができる。ペイロードサイズは、アプリケーションによって送信されたメッセージのサイズに基づいて決定されることができる。
【００３３】
一度、アプリケーションの通信特徴が決定されると、それらはデータベース（例えば、データストア１１２０）に記憶されることができる。通信特徴の例としては、片道レイテンシ耐性、往復レイテンシ耐性（例えば、ラウンドトリップタイム）、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、メッセージが少なくとも一回搬送されることが必要か否かについて、及びメッセージは一度だけ搬送される可能性があるか否かについて、のうち一つ以上が含まれる。
【００３４】
動作３０３０では、システム（例えば、制御モジュール１０９０）は、履歴データベースに問い合わせて、最適なアプリケーション層通信プロトコルを決定することができる。例えば、選択モジュール１０７０は、履歴データベースに問い合わせて、現在のメッセージに対して、最適なアプリケーションプロトコルを選択することができる。選択モジュール１０７０は、現在の測定ネットワークレイテンシ（又は、測定レイテンシの所定の閾値以内）に合致し、ペイロードサイズ（又は、ペイロードサイズの所定の閾値以内）に合致する、アプリケーションの最低アプリケーション特徴を満たすテーブルの行を選択する。そして、選択モジュール１０７０は、履歴で最も短い送信時間を生成した行を選択する。そして、データベースのプロトコルの列でのアプリケーション層通信プロトコルが、最適なアプリケーション層通信プロトコルとして選択される。
【００３５】
いくつかの例においては、デバイスにより選択され、履歴データベースから、アプリケーションの通信特徴に合致する複数の行が所定の閾値よりも低い場合は、アプリケーション層通信プロトコルを適切に選択するには十分な履歴情報がない可能性がある。この状況では、アプリケーションの通信特徴に合致するプロトコルはランダムで選択されることができる。
【００３６】
この処理が異なる時間で反復されるときには、選択されるアプリケーション層の通信プロトコルが異なっていることができると理解される。例えば、アプリケーションにより送信された一つのメッセージは第一選択アプリケーション層通信プロトコルを用いて送信されることができるが、異なる時間で送信される他のメッセージは、ネットワーク接続の特徴の新たな測定結果として、又はアプリケーションの通信特徴の変更結果として、他の異なるアプリケーション層通信プロトコルを用いて送信されることができる。
【００３７】
いくつかの例においては、リモートデバイスでサポートされているプロトコルが新たなプロトコルを組み込むように変更される可能性がある。ゆえに、新たなプロトコルより以前に書きこまれているアプリケーションが、アプリケーションのコードの変更なしで動的にこの新たなプロトコルの恩恵を受けることができる。
【００３８】
本発明のプロトコル選択の潜在的な使用事例として、ＩｏＴ環境を前述したが、他の非ＩｏＴの使用事例、例えば、非ＩｏＴ環境でのデバイスでも利用されることができる。さらに、アプリケーション層通信プロトコルの適応的選択を前述したが、本開示の恩恵により、当業者であれば、プロトコルスタックの他の階層も適応的に選択されることができると理解するものである。
【００３９】
図４は、ここで述べられた一つ以上の技術（例えば、手法）が行われる例示のマシン４０００のブロック図を示す。別の実施形態においては、マシン４０００は、スタンドアロンデバイスとして動作してもよく、他のマシンに接続（例えば、ネットワーク接続）されていてもよい。ネットワーク配置においては、マシン４０００は、サーバ−クライアントネットワーク環境において、サーバマシン、クライアントマシン又はその両方の性質で動作することができる。例においては、マシン４０００は、ピアトゥーピア（Ｐ２Ｐ）（又は他の分散）ネットワーク環境でのピアマシンとして活動することができる。マシン４０００は、ＩｏＴデバイス、パーソナルコンピュータ（ＰＣ）、タブレットＰＣ、セットトップボックス（ＳＴＢ）、パーソナルデジタルアシスタント（ＰＤＡ）、携帯電話、スマートフォン、ウェブアプライアンス、ネットワークルータ、スイッチ若しくはブリッジ、又はその他の、マシンにより取られるべき活動を特定する(順次的又は別のやり方の)命令（instructions）を実行することができるマシンでよい。マシン４０００は、図１のデバイス１０１０を実装することができる。さらに、単一のマシンだけが示されているが、文言「マシン」は、クラウドコンピューティング、ソフトウェアアズアサービス（ＳａａＳ）、他のコンピュータクラスタ構成等、ここで述べられた一つ以上の手法を行う命令セット（又は複数のセット）を個々に又は連携して実行する任意のマシン群を含むと捉えられるべきでもある。
【００４０】
ここで説明されたように、例は、ロジック又は多くのコンポーネント、モジュール若しくは機構を含んでよい、又はそれら上で動作してよい。モジュールは、特定された動作を行うことのできる有形のエンティティ（例えば、ハードウェア）であり、あるやり方で構成又は配置されていることができる。例においては、回路がモジュールとして、特定のやり方で（例えば、内部に、又は他の回路等の外部エンティティに関して）配置されていることができる。例においては、一つ以上のコンピュータシステム（例えば、スタンドアロン、クラインアント又はサーバコンピュータシステム）又は一つ以上のハードウェアプロセッサの全体又は一部が、特定の動作を行うように動作するモジュールとして、ファームウェア又はソフトウェアによって構成されてよい。例において、ソフトウェアはマシン読み取り可能媒体上に存することができる。例において、ソフトウェアは、モジュールの基礎をなすハードウェアによって実行されると、ハードウェアに特定の動作を行わせる。
【００４１】
したがって、文言「モジュール」は、物理的に構成され、具体的に構成され（例えば、ハードワイヤード）、又は仮に（例えば、一時的）構成され（例えば、プログラムされ）て、特定のやり方で動作する、又はここで説明された任意の動作の一部又は全部を行う、エンティティである有形のエンティティを包含すると理解される。モジュールが仮に構成された例を考慮すると、モジュールの各々が時間の任意の瞬間にインスタンス化されている必要はない。例えば、モジュールがソフトウェアを使用して構成された汎用ハードウェアプロセッサ（コンピュータプロセッサ）を含む場合に、汎用ハードウェアプロセッサは、異なる時間ではそれぞれ異なるモジュールとして構成されることができる。ソフトウェアは、ゆえに、ハードウェアプロセッサを構成してよく、例えば、時間のあるインスタンスでは特定のモジュールを構成し、時間の異なるインスタンスでは異なるモジュールを構成することができる。
【００４２】
マシン４０００（例えば、コンピュータシステム）は、ハードウェアプロセッサ４００２（例えば、セントラルプロセッシングユニット（ＣＰＵ）、グラフィクスプロセッシングユニット（ＧＰＵ）、ハードウェアプロセッサコア又はそれらの任意の組み合わせ）、メインメモリ４００４及びスタティックメモリ４００６を含むことができ、それらのいくつか又は全てはインターリンク４００８（例えば、バス）を介して互いに通信することができる。マシン４０００は、さらに、ディスプレイユニット４０１０、英数字入力デバイス４０１２（例えば、キーボード）及びユーザインタフェース（ＵＩ）ナビゲーションデバイス４０１４（例えば、マウス）をさらに含むことができる。例において、ディスプレイユニット４０１０、英数字入力デバイス４０１２及びＵＩナビゲーションデバイス４０１４は、タッチスクリーンディスプレイであることができる。マシン４０００は、追加的に、ストレージデバイス４０１６（例えば、ドライブユニット）、信号生成デバイス４０１８（例えば、スピーカ）、ネットワークインタフェースデバイス４０２０及びグローバルポジショニングシステム（ＧＰＳ）センサ、コンパス、加速度計又は他のセンサ等の一つ以上のセンサ４０２１を含むことができる。マシン４０００は、一つ以上の周辺デバイス（例えば、プリンタ、カードリーダ等）と通信する又はこれを制御する、シリアル（例えば、ユニバーサルシリアルバス（ＵＳＢ））、パラレル、又は他の有線若しくは無線（例えば、赤外線（ＩＲ）、近距離通信（ＮＦＣ）等）接続の出力コントローラ４０２８を含むことができる。
【００４３】
ストレージデバイス４０１６は、ここで説明された任意の一つ以上の技術又は機能を具体化する又それらにより利用されるデータ構造又は命令４０２４（例えば、ソフトウェア）の一つ以上のセットが記憶されたマシン読み取り可能媒体４０２２を含むことができる。命令４０２４は、メインメモリ４００４内、スタティックメモリ４００６内、又はマシン４０００により実行中のハードウェアプロセッサ内に、完全に又は少なくとも部分的に存することもできる。例において、ハードウェアプロセッサ４００２、メインメモリ４００４、スタティックメモリ４００６又はストレージデバイス４０１６の一つ又は任意の組み合わせがマシン読み取り可能媒体を構成してもよい。
【００４４】
マシン読み取り可能媒体４０２２は、単一媒体として示されているが、文言「マシン読み取り可能媒体」は、一つ以上の命令４０２４を記憶するように構成された単一媒体又は複数媒体（例えば、集約若しくは分散データベース、及び／又はこれに関連づけられたキャッシュとサーバ）を含むことができる。
【００４５】
文言「マシン読み取り可能媒体」は、マシン４０００による実行のための命令であって、本開示の任意の一つ以上の技術をマシン４０００に行わせる命令を記憶する、符号化する若しくは搬送することのできる、又はそのような命令に使用される若しくはそれに関連付けられたデータ構造を記憶する、符号化する若しくは搬送することのできる任意の媒体を含むことができる。非限定的にマシン読み取り可能媒体の例としては、ソリッドステートメモリ並びに、光学及び磁気媒体を含むことができる。マシン読み取り可能媒体の具体的な例としては、半導体メモリデバイス（例えば、電気的プログラマブル読み取り専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ））及びフラッシュメモリ等の不揮発性メモリ、内部ハードディスク及びリムーバブルディスク等の磁気ディスク、ランダムアクセスメモリ（ＲＡＭ）、ソリッドステートドライブ（ＳＳＤ）並びにＣＤ−ＲＯＭ及びＤＶＤ−ＲＯＭディスクが含まれてよい。いくつかの例においては、マシン読み取り可能媒体は、非一時的なマシン読み取り可能媒体を含んでよい。いくつかの例においては、マシン読み取り可能媒体は一時的な伝搬信号ではないマシン読み取り可能媒体を含んでよい。
【００４６】
命令４０２４は、さらに、ネットワークインタフェースデバイス４０２０を介して送信媒体を用いて通信ネットワーク４０２６（例えば、コンピュータネットワーク）を介して送受信されることができる。マシン４０００は、多数の転送プロトコル（例えば、フレームリレー、インターネットプロトコル（ＩＰ）、トランスミッションコントロールプロトコル（ＴＣＰ）、ユーザデータグラムプロトコル（ＵＤＰ）、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）等）の任意の一つを利用して一つ以上の他のマシンと通信することができる。通信ネットワークの例としては、とりわけ、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、パケットデータネットワーク（例えば、インターネット）、携帯電話ネットワーク（例えば、セルラーネットワーク）、基本電話（ＰＯＴＳ）ネットワーク、無線データネットワーク（例えば、ＷｉＦｉとして知られる米国電気電子学会（ＩＥＥＥ）８０２．１１標準ファミリ、ＷｉＭａｘとして知られるＩＥＥＥ８０２．１６標準ファミリ）、ＩＥＥＥ８０２．１５．４標準ファミリ、ロングタームエボリューション（ＬＴＥ）標準ファミリ、ユニバーサルモバイルテレコミュニケーションズシステム（ＵＭＴＳ）標準ファミリ、ピアトゥーピア（Ｐ２Ｐ）ネットワークが含まれてよい。例において、ネットワークインタフェースデバイス４０２０は、一つ以上の物理的ジャック（例えば、イーサネット(登録商標)、同軸又は電話ジャック）又は、一つ以上のアンテナを含むことができ、通信ネットワーク４０２６に接続する。例において、ネットワークインタフェースデバイス４０２０は、複数のアンテナを含むことができ、単入力多出力（ＳＩＭＯ）、多入力多出力（ＭＩＭＯ）及び多入力単出力（ＭＩＳＯ）技術の少なくとも一つを用いて無線通信する。いくつかの例においては、ネットワークインタフェースデバイス４０２０は、マルチユーザＭＩＭＯ技術を用いて無線通信することができる。
【００４７】
その他の事項及び例
例１は、リモートデバイスと通信する方法であって、その方法は、コンピュータプロセッサ及びネットワークインタフェースを使用する工程と、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見する工程と、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択する工程と、選択アプリケーション層通信プロトコルに従って、メッセージを構築する工程と、選択アプリケーション層通信プロトコル及びネットワークインタフェースを使用して、コンピュータネットワークを介して、メッセージをリモートデバイスに送信する工程と、を含む方法である。
【００４８】
例２では、例１の主題が任意で、リモートデバイスへの送信のための第二メッセージをソースアプリケーションから受信する工程と、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴の新たな計測結果及びメッセージのソースアプリケーションの通信特徴に基づいて、メッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択し、第二選択アプリケーション層通信プロトコルに従って、第二メッセージを構築する工程と、コンピュータネットワークを介して、メッセージをリモートデバイスに送信する工程と、を含み、メッセージを構築し、送信するのに使用される選択アプリケーション層通信プロトコルは、第二メッセージを構築するのに使用される第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである。
【００４９】
例３では、例１から例２の一つ以上の主題が任意で、選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、ことを含む。
【００５０】
例４では、例１から例３の一つ以上の主題が任意で、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見する工程は、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、リモートデバイスから利用可能なメッセージブローカを要求する工程を含む、ことを含む。
【００５１】
例５では、例１から例４の一つ以上の主題が任意で、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択する工程は、コンピュータネットワークの特徴を検出する工程と、ソースアプリケーションの通信特徴を決定する工程と、コンピュータネットワークの特徴及びソースアプリケーションの通信特徴に一致するデータベースの行を選択する工程と、最も送信時間の短い選択行に対応するアプリケーション層通信プロトコルを選択する工程と、を含む、ことを含む。
【００５２】
例６では、例５の主題が任意で、コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、ことを含む。
【００５３】
例７では、例５から例６の一つ以上の主題が任意で、通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、メッセージが少なくとも一回搬送されることが必要か否かについて、及びメッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、ことを含む。
【００５４】
例８では、例５から例７の一つ以上の主題が任意で、送信されたメッセージの通信パラメータに基づいてデータベースを更新する工程を含む。
【００５５】
例９は、プロセッサと、ネットワークインタフェースと、プロセッサにより実行されると、プロセッサに、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見させ、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択させ、選択アプリケーション層通信プロトコルに従って、メッセージを構築させ、選択アプリケーション層通信プロトコル及びネットワークインタフェースを使用して、コンピュータネットワークを介して、メッセージをリモートデバイスに送信させる、命令を含む非一時的なマシン読み取り可能媒体と、を含むデバイスである。
【００５６】
例１０では、例９の主題が任意で、命令は、プロセッサに、リモートデバイスへの送信のための第二メッセージをソースアプリケーションから受信させ、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴の新たな計測結果及びメッセージのソースアプリケーションの通信特徴に基づいて、メッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択させ、第二選択アプリケーション層通信プロトコルに従って、第二メッセージを構築させ、コンピュータネットワークを介して、メッセージをリモートデバイスに送信させる、命令を含み、メッセージを構築し、送信するのに使用される選択アプリケーション層通信プロトコルは、第二メッセージを構築するのに使用される第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである、ことを含む。
【００５７】
例１１では、例９から例１０の一つ以上の主題が任意で、選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、ことを含む。
【００５８】
例１２では、例９から例１１の一つ以上の主題が任意で、プロセッサに、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見させる命令は、プロセッサに、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、リモートデバイスから利用可能なメッセージブローカを要求させる命令を含む、ことを含む。
【００５９】
例１３では、例９から例１２の一つ以上の主題が任意で、プロセッサに、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択させる命令は、プロセッサに、コンピュータネットワークの特徴を検出させ、ソースアプリケーションの通信特徴を決定させ、コンピュータネットワークの特徴及びソースアプリケーションの通信特徴に一致するデータベースの行を選択させ、最も送信時間の短い選択行に対応するアプリケーション層通信プロトコルを選択させる、命令を含む、ことを含む。
【００６０】
例１４では、例１３の主題が任意で、コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、ことを含む。
【００６１】
例１５では、例１３から例１４の一つ以上の主題が任意で、通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、メッセージが少なくとも一回搬送されることが必要か否かについて、及びメッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、ことを含む。
【００６２】
例１６では、例１３から例１５の一つ以上の主題が任意で、命令は、プロセッサに、送信されたメッセージの通信パラメータに基づいてデータベースを更新させる命令を含む、ことを含む。
【００６３】
例１７は、マシンにより実行されると、マシンに、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見させ、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択させ、選択アプリケーション層通信プロトコルに従って、メッセージを構築させ、選択アプリケーション層通信プロトコルを使用して、コンピュータネットワークを介して、メッセージをリモートデバイスに送信させる、命令を含む、非一時的なマシン読み取り可能媒体。
【００６４】
例１８では、例１７の主題が任意で、命令は、プロセッサに、リモートデバイスへの送信のための第二メッセージをソースアプリケーションから受信させ、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴の新たな計測結果及びメッセージのソースアプリケーションの通信特徴に基づいて、メッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択させ、第二選択アプリケーション層通信プロトコルに従って、第二メッセージを構築させ、コンピュータネットワークを介して、メッセージをリモートデバイスに送信させる、命令を含み、メッセージを構築し、送信するのに使用される選択アプリケーション層通信プロトコルは、第二メッセージを構築するのに使用される第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである、ことを含む。
【００６５】
例１９では、例１７から例１８の一つ以上の主題が任意で、選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、ことを含む。
【００６６】
例２０では、例１７から例１９の一つ以上の主題が任意で、プロセッサに、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見させる命令は、プロセッサに、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、リモートデバイスから利用可能なメッセージブローカを要求させる命令を含む、ことを含む。
【００６７】
例２１では、例１７から例２０の一つ以上の主題が任意で、プロセッサに、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択させる命令は、プロセッサに、コンピュータネットワークの特徴を検出させ、ソースアプリケーションの通信特徴を決定させ、コンピュータネットワークの特徴及びソースアプリケーションの通信特徴に一致するデータベースの行を選択させ、最も送信時間の短い選択行に対応するアプリケーション層通信プロトコルを選択させる、命令を含む、ことを含む。
【００６８】
例２２では、例２１の主題が任意で、コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、ことを含む。
【００６９】
例２３では、例２１から例２２の一つ以上の主題が任意で、通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、メッセージが少なくとも一回搬送されることが必要か否かについて、及びメッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、ことを含む。
【００７０】
例２４では、例２１から例２３の一つ以上の主題が任意で、命令は、プロセッサに、送信されたメッセージの通信パラメータに基づいてデータベースを更新させる命令を含む、ことを含む。
【００７１】
例２５は、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見する手段と、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択する手段と、選択アプリケーション層通信プロトコルに従って、メッセージを構築する手段と、選択アプリケーション層通信プロトコルを使用して、コンピュータネットワークを介して、メッセージをリモートデバイスに送信する手段と、を含むデバイスである。
【００７２】
例２６では、例２５の主題が任意で、リモートデバイスへの送信のための第二メッセージをソースアプリケーションから受信する手段と、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴の新たな計測結果及びメッセージのソースアプリケーションの通信特徴に基づいて、メッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、第二選択アプリケーション層通信プロトコルとして選択する手段と、第二選択アプリケーション層通信プロトコルに従って、第二メッセージを構築する手段と、コンピュータネットワークを介して、メッセージをリモートデバイスに送信する手段と、を含み、メッセージを構築し、送信するのに使用される選択アプリケーション層通信プロトコルは、第二メッセージを構築するのに使用される第二選択アプリケーション層通信プロトコルとは異なるアプリケーション層通信プロトコルである。
【００７３】
例２７では、例２５から例２６の一つ以上の主題が任意で、選択アプリケーション層通信プロトコルは、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）、コンストレインドアプリケーションプロトコル（ＣｏＡＰ）、ＭＱテレメトリートランスポート（ＭＱＴＴ）プロトコル及びＯＰＣユニファイドアーキテクチャ（ＵＡ）プロトコルのうちの一つである、ことを含む。
【００７４】
例２８では、例２５から例２７の一つ以上の主題が任意で、リモートデバイスのサポートされているアプリケーション層通信プロトコルのセットを発見する手段は、ハイパーテキストトランスファープロトコル（ＨＴＴＰ）ＧＥＴリクエストを使用して、リモートデバイスから利用可能なメッセージブローカを要求する手段を含む、ことを含む。
【００７５】
例２９では、例２５から例２８の一つ以上の主題が任意で、リモートデバイスと通信するのに使用されるコンピュータネットワークの特徴及びメッセージのソースアプリケーションの通信特徴に基づいて、ソースアプリケーションから受信したメッセージに対して、サポートされているアプリケーション層通信プロトコルのセットのうち一つを、選択アプリケーション層通信プロトコルとして選択する手段は、コンピュータネットワークの特徴を検出する手段と、ソースアプリケーションの通信特徴を決定する手段と、コンピュータネットワークの特徴及びソースアプリケーションの通信特徴に一致するデータベースの行を選択する手段と、最も送信時間の短い選択行に対応するアプリケーション層通信プロトコルを選択する手段と、を含む、ことを含む。
【００７６】
例３０では、例２９の主題が任意で、コンピュータネットワークの特徴は、片道レイテンシ、往復レイテンシ、パケット損失、ジッタ、バンド幅、符号誤り率、誤り率及び可用性のうちの一つである、ことを含む。
【００７７】
例３１では、例２９から例３０の一つ以上の主題が任意で、通信特徴は、片道レイテンシ耐性、往復レイテンシ耐性、パケット損失耐性、ジッタ耐性、バンド幅要件、アクノリッジメントが必要とされるか否かについて、符号誤り率耐性、誤り率耐性、可用性、メッセージが少なくとも一回搬送されることが必要か否かについて、及びメッセージは一度だけ搬送される可能性があるか否かについて、のうち一つである、ことを含む。
【００７８】
例３２では、例２９から例３１の一つ以上の主題が任意で、送信されたメッセージの通信パラメータに基づいてデータベースを更新する手段を含む。
【図１】
0006404301.tif 000003
【図２】
0006404301.tif 000004
【図３】
0006404301.tif 000005
【図４】
0006404301.tif 000006