以下にネットワーク上の主要及び/又は予備ピアツーピア(P2P)通信チャンネルを確立、維持、利用するための装置、方法、及びコンピュータ可読媒体の実施形態を説明する。また、P2Pセッションに関してユーザを招待しユーザを仲介するための招待サービス及び仲介サービスを説明する。更に、ユーザが特定条件の下でリレー接続を確立できるリレーサービスが開示される。最後に、アプリケーションフレームワーク及び関連のアプリケーションプログラミングインタフェース(API)が開示され、アプリケーション開発者は、本明細書で説明する共同オンライン機能を利用するアプリケーションを設計できる。
明細書全体にわたって、本発明を完全に理解できるように説明目的で多数の具体的事項が示されている。しかしながら、当業者であれば、本発明はこれらの具体的詳細がなくても実施できることは理解できることを理解されたい。場合によっては、本発明の基本的原理が曖昧にならないように、公知の構成要素及び装置は示されていないか又はブロック図形式で示されている。
接続データを効率的かつ安全に交換するための装置及び方法
図1に示すように、本発明の1つの実施形態で実施する全体的なネットワークトポロジーは、相互に及びネットワーク120上で1つ又はそれ以上のサービス110−112と通信する「クライアント」又は「ピア」モバイルコンピュータ装置A−D、120−123のグループを含むことができる。図1において、単一のネットワーククラウドとして示されているが、「ネットワーク」120は、インターネット等のパブリックネットワーク及びローカルWi−Fiネットワーク(例えば、802.11nホーム無線ネットワーク又は無線ホットスポット)等のプライベートネットワーク、ローカルエリアイーサネット(登録商標)ネットワーク、セルラーデータネットワーク(例えば、3G、Edge)、及びWiMAX ネットワーク等の種々の異なる構成要素を含むことができる。例えば、モバイル装置A120は、ネットワークリンク125で示すホームWi−Fiネットワークに接続することができ、モバイル装置B121は、ネットワークリンク126で示す3Gネットワーク(例えば、Universal Mobile Tele通信s System(UMTS)、High−Speed Upリンク Packet Access(HSUPA))に接続することができ、モバイル装置C122は、ネットワークリンク127で示すWiMAXネットワークに接続することができ、モバイル装置123は、ネットワークリンク128で示すパブリックWi−Fiネットワークに接続ことができる。モバイル装置120−123が接続されるローカルネットワークリンク125−128の各々は、ゲートウェイ及び/又はNATデバイス(図1には示されていない)経由でインターネット等のパブリックネットワークに接続できるので、パブリックネットワーク上で各モバイル装置120−123の間で通信できる。しかしながら、2つのモバイル装置が同じローカル又はプライベートネットワーク(例えば、同じWi−Fiネットワーク)にある場合、2つの装置は、パブリックネットワークを迂回してローカル/プライベートネットワーク上で直接通信できる。勿論、本発明の基本的原理は、ネットワークタイプ又はネットワークトポロジーの何らかの特定のセットに限定されないことに留意されたい。
図1に示すモバイル装置120−123の各々は、接続データ交換(CDX)サービス110、仲介サービス111、及び招待サービス112と通信を行うことができる。1つの実施形態において、各サービス110−112は、サーバ等の1つ又はそれ以上の物理的コンピュータ装置で実行されるソフトウェアとして実装ことができる。図1に示すように、1つの実施形態において、サービス110−112は、同じエンティティ(例えば、同じデータサービスプロバイダ)が管理する大規模データサービス100の枠内で実装することができ、モバイル装置120−123の各々がネットワーク120上でアクセスできる。データサービス100は、種々の形式のサーバ及びデータベースに接続するローカルエリアネットワーク(例えば、Ethernet(登録商標)式LAN)を含むことができる。また、データサービス100は、データを格納するための1つ又はそれ以上のストレージエリアネットワーク(SAN)を含むことができる。1つの実施形態において、データベースは、各々のモバイル装置120−123及びこれらの装置のユーザに関するデータを格納及び管理する(例えば、ユーザアカウントデータ、デバイスアカウントデータ、ユーザアプリケーションデータ)。
1つの実施形態において、仲介サービス111は、特定の条件セットに基づいて共同P2Pセッションに対して2つ又はそれ以上のモバイル装置の仲介を行うことができる。例えば、2つ又はそれ以上のモバイル装置のユーザは、特定の多人数参加型ゲームに興味をもつ場合がある。この場合、仲介サービス111は、モバイル装置のグループを特定して、各ユーザの経験レベル、各ユーザの年令、マッチリクエストの時期、仲介がリクエストされた特定のゲーム、及び種々のゲーム固有の変数等の変数に基づいてゲームに参加する。例示的かつ非限定的に、仲介サービス111は、特定のゲームで同じ経験レベルのユーザを仲介するよう試みる。更に、大人には他の大人を、子供には他の子供を仲介することができる。更に、仲介サービス111は、リクエストを受信した順番に基づいてユーザリクエストに優先順位をつけることができる。本発明の基本的原理は、何らかの特定のマッチ基準又はP2Pアプリケーションの何らかの特定のタイプに限定されない。
以下に詳細に説明するように、マッチリクエストに応答して、仲介サービス111は、効率的かつ安全な方法でP2Pセッションを確立するために全ての仲介参加者が必要な接続データを受信できるように、CDXサービス110と協働することができる。
1つの実施形態において、招待サービス112は、共同P2Pセッションに参加するためにモバイル装置を特定できる。しかしながら、招待サービス112の場合、参加者の少なくとも一人は他の参加者によって具体的に特定される。例えば、モバイル装置A120のユーザは、モバイル装置B121のユーザとの共同セッションを具体的にリクエストすることができる(例えば、ユーザID又は電話番号でモバイル装置Bを特定する)。仲介サービス111と同様に、招待リクエストに応答して、招待サービス112は参加者セットを特定でき、CDXサービス110と協働して、効率的かつ安全な方法でP2Pセッションを確立するために全ての参加者が必要な接続データを受信できるようにする。
前述のように、実施形態において、CDXサービス110は、2つ又はそれ以上のモバイル装置の間のP2Pセッションを確立するこが要求される、接続データに関する中央交換ポイントとして機能する。特に、CDXサービスの1つの実施形態は、外部サービス及びクライアントが各モバイル装置のNATを経由して通信を行う(つまり、デバイスに到達するためにNATを介して「穴を開ける」ためのモバイル装置リクエストに応答して、NATトラバーサルデータ(「ホールパンチ(Hole Punch)」データと呼ぶ場合もある)を発生する。例えば、1つの実施形態において、CDXサービスはモバイル装置と通信するのに必要な外部IPアドレス及びポートを検出して、この情報をモバイル装置に提供する。1つの実施形態において、CDXサービスは、仲介サービス111及び招待サービス112が生成したモバイル装置リストを受信及び処理して、効率的かつ安全に接続データをリストに含まれる各々のモバイル装置に配信する(以下に詳細に説明する)。
1つの実施形態において、モバイル装置とCDXサービス110との間の通信は、User Datagram Protocol(UDP)ソケット等の比較的軽量なネットワークプロトコルを使用して確立される。当業者であれば理解できるように、UDPソケット接続は、パケット信頼性、順序づけ、データ整合性を保障するためにハンドシェイクダイアログを必要としないので、TCPソケット接続に比べて、多くのパケット処理オーバーヘッドを消費しない。結果的に、UDPの軽量、ステートレス性は、膨大な数のクライアントからの問い合わせに少しだけ応答するサーバに有用である。更に、TCPとは異なり、UDPは、パケット同報通信(パケットがローカルネットワーク上の全てのデバイスに送信される)及びマルチキャスティング(パケットがローカルネットワーク上のデバイスのサブセットに送信される)と互換性がある。以下に説明するように、UDPを使用できるが、セキュリティは、セッションキーを用いてNATトラバーサルデータを暗号化することで、CDXサービス110上で維持できる。
CDXサービス110が使用するオーバーヘッドの少ない軽量ネットワークプロトコルとは対照的に、1つの実施形態において、モバイル装置120−123と仲介サービス111及び/又は招待サービス112との間の通信は、Secure Sockets Layer(SSL)又はTransポート Layer Security(TLS)接続に依存するHypertext Transfer Protocol Secure(HTTPS)等の本質的にセキュアなネットワークプロトコルを用いて確立される。これらのプロトコルの詳細は当業者には公知である。
図2aは、CDXサーバで実施できる例示的な一連のトランザクションを示す。1つの実施形態のCDXサービスの作動を説明する場合、以下の用語は以下の意味を有することになる。
「接続データ」は、ピアツーピアセッションを確立するために、どの潜在的ピアが相互に交換する必要があるかの情報である。以下の実施形態はこの情報を交換する方法を示す。
1つの実施形態において、「CDXサーバ」は認証されたマルチキャストリフレクタであり、認可エンティティは任意データを交換できる。このデータはPayloadと呼ばれる。
「CDXセッション」は、CDXサーバを介して相互に通信できるクライアント装置のグループに関する。セッションの一部である各クライアント装置は、CDXチケットが割り当てられる。各セッションは、個々のセッションを特定するために又はこれを参照するために使用できる大きな整数である、固有CDXセッションIDを有している。
「CDXリクエスト」は、クライアント装置からCDXサーバに送信されるリクエストである。リクエストは、概してCDXチケット及びPayloadの2つの部分から成る。本実施形態において、Payloadは、セッションキーで暗号化された接続データである。
「CDXレスポンス」は、CDXサーバがCDXセッションのメンバからのCDXリクエストを受信した場合に、CDXセッションの他のデバイスに「反射されて」戻されたものである。Payloadを所定のCDXリクエストに使用するCDXチケットのCDXチケット半券に付加することで構成される。
「CDXチケット」は、CDXサーバにPayloadをCDXセッションの各メンバへ送信する方法を伝える。1つの実施形態において、CDXチケットキーで「署名」されており、偽造又は改ざんを防止するようになっている。図3に示すように、1つの実施形態において、CDXチケットは以下の情報を含む。
1つの実施形態において、暗号化又は難読化されていないセッションID301。
1つの実施形態において、暗号化又は難読化されていないセッションの参加者数302。
セッションのどの参加者がこのチケットを参照しているかのインデックス303(1つの実施形態において、暗号化又は難読化されていない)。
チケットが無効になる期限切れ時間/日付3041つの実施形態において、暗号化又は難読化されていない)。
1つの実施形態において、CDXチケットキーを用いて暗号化される、セッションの各参加者に関するCDX Hole−Punch Data305−306。
チケットが認証されていることを保証する「デジタル署名」のように機能する、CDXチケットキーを使用するMessage Authentication Code 307。
「CDXチケット半券」は、CDXチケットの最初の部分からCDX Hole−Punch Data及びMessage Authentication Codeを差し引いたものである。
「Payload」は、CDXリクエスト及びCDXレスポンスの第2の部分である。ペイロードは、クライアント装置がCDXセッションの他のデバイスに伝達しようするデータである。本実施形態において、ペイロードはセッションキーで暗号化された接続データである。CDXサーバはペイロードを復号化せず、1つの実施形態において、不変で単純に通過するだけである。
「セッションキー」は、クライアントが使用して接続データを暗号化するためのキーである。1つの実施形態において、このキーはCDXサーバには知られていない。本実施形態において、セッションキーは、仲介サービスが発生して、個々のCDXチケットと一緒にクライアントへ送信される。
「CDXチケットキー」は、CDXチケットを生成して「署名」するために使用するキーである。CDXチケットキーはCDXサーバだけが知っており、以下に説明するCDXチケットを生成するサービスは、仲介サービス及び/又は招待サービスとすることができる。
「CDX Hole−Punch Request」は、CDXリクエストの特殊なタイプであり、CDXサーバからCDX Hole−Punch Dataを取得するために使用する。
「CDX Hole−Punch Data」は、CDXサーバが情報を要求するクライアントへ送信する方法を説明する不透明データブロブである。これは、CDX Hole−Punch RequestをCDXサーバへ送信することで得られる。CDX Hole−Punch Dataは、CDXチケットが生成される前に、CDXセッションにおいて各クライアント装置から収集する必要がある。CDX Hole−Punch Data(「NATトラバーサルデータ」と呼ぶ場合もある)は、要求デバイスのパブリックIPアドレス及びポートを含むことができる。
図2aを参照すると、1つの実施形態において、モバイル装置A120及びモバイル装置B121は、1つ又はそれ以上の他のコンピュータ装置とのP2P接続を必要とする、多人数参加型ゲーム等の共同アプリケーション又は共同チャットセッションを実行することができる。201aにおいて、モバイル装置A120は、CDX Hole−Punch RequestをCDXサーバ110に送信する。次に、CDXサーバ110は、202aにおいて、CDX Hole−Punch Dataに応答する。1つの実施形態において、この「ホールパンチデータ」は、モバイル装置AのパブリックIPアドレス及びポート及び/又はモバイル装置AのNATを通る穴を開けるために必要な何らかの他のデータ(例えば、モバイル装置AのNATタイプを規定するNATタイプデータ)を含む。同様のトランザクションは、それぞれ201b及び202bにおいてモバイル装置Bに関して行われる。
203a及び203bにおいて、モバイル装置A及びBは、何らかの追加のマッチ基準(以下に説明する)と一緒に、CDX Hole−Punch Dataを含むマッチリクエストを仲介サービスに送信する。この段階で、モバイル装置A及びB は、P2P接続を確立するのに必要な接続データの構築を開始できる。このことは、例えば、標準のInternet Connectivity Establishment(ICE)トランザクション等のトランザクションを使用して(例えば、NATトラバースサービスによって)で実現できる。しかしながら、本発明の基本的原理は、接続データを決定するための何らかの特定の機構に限定されない。
1つの実施形態において、仲介サービス111は、マッチ基準と一緒にクライアント装置セットを見つけると、固有CDXセッションID、CDXセッションの各メンバに対する固有CDXチケット、及び固有セッションキーを生成することができる。1つの実施形態において、0仲介サービス111は、固有CDXチケットキーを使用してCDXチケットに関するCDX Hole−Punch Dataを暗号化することができる。204a及び204bにおいて、仲介サービスは、モバイル装置A及びBの各々にCDXチケット及びセッションキーを送信することができる。
モバイル装置Aは、CDXチケット及びセッションキーを受信して、セッションキーを使用して先に決定した接続データを暗号化してPayloadを作る。1つの実施形態において、モバイル装置Aは、構築したPayloadをCDXチケットに付加することで、CDXリクエストを構築する。205aにおいて、モバイル装置Aは、CDXリクエストをCDXサーバ110に送信する。また、モバイル装置Bは、同じ作動を行って205bにおいてCDXサーバにリクエストを送信することができる。
206aにおいて、CDXサーバ110はCDXリクエストを受信して、チケットが有効で認証されていることを調べる(例えば、メッセージ認証コード307に基づいて)。CDXチケットが無効の場合、リクエストは撤回される。1つの実施形態において、CDXサーバは、次に、CDXチケットキーを用いてCDXチケットに包含されたCDX Hole−Punch Dataセットを復号化する。1つの実施形態において、CDXチケットキーは、チケットと一緒に送信することができる期限切れ時間/日付を含むことができる。CDXサービス110及び仲介サービス111は、暗号化/復号化のための2つ(又はそれ以上の)異なるCDXチケットキーを記憶できるが、CDXサービスは現在アクティブであり、仲介サービスはCDXサービスの期限切れ時間/日付に達するとアクティブになる。チケットを受け取りと、CDXサービス110は期限切れ時間/日付を読み取ってどのチケットキーを使用するかを決める。CDXチケットキーが期限切れになると、CDXサービス110及び仲介サービス111は、それぞれ新しいチケットキーを生成する(現在のチケットキーが期限切れになった後に使用する次のキーとすることができる)。1つの実施形態において、CDXサービス110及び仲介サービス111は、同じキー生成アルゴリズムを実行して、2つのチケットキーの一貫性を保証するようになっている。例えば、公知のRSA SecurID認証機構に使用する技術を使用でき、ここでは新しい認証コードが一定間隔で生成される。1つの実施形態において、新しいCDXチケットキーは毎日生成できる。しかしながら、本発明の基本的原理は、CDXチケットキーを生成するための何らかの特定の機構に限定されない。
206bに示すように、モバイル装置Bに関しても同じ作動を行うことができる。CDXサーバはCDXリクエストからCDXレスポンスを構築し、次に、CDX Hole−Punch Dataを使用して、CDXレスポンスをCDXセッションの参加者に送信する(207aでモバイル装置Bに、207bでモバイル装置Aに送信する)。
207aにおいて、モバイル装置Bは、CDXサーバからCDXレスポンスを受信する。クライアント装置Bは、CDXチケット半券を調べてセッションIDが自分のCDXチケットのセッションIDと一致することを確認する。次に、モバイル装置Bは、セッションキーを用いてPayloadを復号化することができ、モバイル装置Aから接続データを発生させる。次に、モバイル装置Bは、モバイル装置Aからの接続データを使用して、P2Pセッションを確立するための処理を開始する。1つの実施形態において、このことは標準ICEトランザクションを必要とする。しかしながら、本発明の基本的原理は、P2P通信を確立するための何らかの特定の機構に限定されない。
前述のように、1つの実施形態において、モバイル装置A及びBは、Hypertext Transfer Protocol Secure(HTTPS)セッションを確立して仲介サービス111と通信する(例えば、HTTPS リクエスト/レスポンストランザクションを使用して)と共に、UDPソケットを確立してCDXサービスと通信するようになっている。マッチリクエスト204a、204bは、それぞれのモバイル装置に関して以前に決定したNATタイプ及びホールパンチデータ(例えば、パブリックIPアドレス及びポート)を含むことができる。多人数参加型ゲームを含む実施形態において、各マッチリクエストは、各モバイル装置のプレーヤー(例えば、固有プレーヤーIDコードを用いて)、ユーザがやりたいと思うゲーム、ゲームに参加するプレーヤー数、及び/又は所望のゲームに関連する他のゲーム構成変数を特定することができ、例示的かつ非限定的に、ゲームに関連するゲーム構成変数は、難易度(例えば、簡単、普通、困難)、ユーザの年令(例えば、「13才以下」)、ゲームのサブ区域(例えば、「レベル2」)、及び/又はプレーヤーの経験レベル(例えば、エキスパート、初心者、中間)を含むことができる。以下に詳細に示すように、これらの変数は、ゲーム「バケット」と呼ぶ場合があり、固有「バケットID」を使用して特定される。各ゲームは、異なるゲーム構成変数を特定するために異なるバケットIDセットを含むことができる。
1つの実施形態において、モバイル装置Bは、208a及び209aにおいて受信確認を送信する。同様に、モバイル装置Aは、208b及び209bにおいて受信確認を送信する。所定期間後にモバイル装置A又はBの受信確認を受信できない場合、207aにおいて接続データはモバイル装置B212に再送される。CDXサービス110は再送を開始でき、及び/又はモバイル装置A120は再送を開始できる。
図2bは、3つの異なるモバイル装置120−122がCDXサービス及び仲介サービス111を用いてP2P接続を取り決める更に詳細な実施例を示す。また、図2bはモバイル装置120−122が使用して接続を行う2つの追加のサービスを示し、NATタイプを決定するNATトラバースサービス291、及び各モバイル装置に関する完全接続データを決定するNATトラバースサービス290である(例えば、ICE接続データトランザクションを利用する)。しかしながら、本発明の基本的原理に従うために別々のサービスは必要ないことに留意されたい。例えば、他の実施形態において、サービス290−291の各々で行われるNATトラバース機能は、CDXサービス110及び/又は仲介サービス111内に直接組み込むことができる。同様に、NATトラバースサービス290−291の両者が行う機能は、単一のNATトラバースサービスに組み込むことができる。つまり、図2bに示すこの特定の機能分離は、本発明の基本的原理に従うために必須ではない。
図2bの具体的詳細を参照すると、220において、モバイル装置は、NATタイプリクエストをNATトラバースサービス291に送信する。これに応答して、NATトラバースサービス291は、モバイル装置Aが使用するNATタイプを決定するための一連のトランザクションを実施することを含む、種々の公知技術を使用ことができる。例えば、NATトラバースサービス291は、モバイル装置AのNATの異なるIPアドレス及びポートを開放して、異なるIP/ポートの組み合わせを用いてこのポートを介してモバイル装置Aと通信することを試みることができる。このようにして、モバイル装置Aが採用するNATは、前述のNATタイプ(例えば、「full cone」、「restricted cone」、「port restricted cone」、「symmetric」)又は他のNATタイプの1つに分類することができる。次に、この情報は、図示のようにモバイル装置A120に提供される。
221において、モバイル装置A120は、CDXサービス110に対してNATトラバースリクエストを開始する。これに応答して、CDXサービス110は、リクエストに使用したパブリックIPアドレス及びパブリックポート番号を読み取り、この情報をモバイル装置A120に返信することができる。前述のように、デバイスがNATの背部にある場合、そのパブリックポート及びIPアドレスは、そのプライベートポート及びIPアドレスのそれぞれとは異なるはずである。つまり、使用するNAT対応に応じて、パブリックIPアドレス及びポートは、NATデバイスを通ってモバイル装置に達する「穴を開ける」ために使用できる。
222において、モバイル装置A120は、マッチリクエスト222を仲介サービス111に送信する。前述のように、1つの実施形態において、モバイル装置Aは、Hypertext Transfer Protocol Secure(HTTPS)セッションを使用して(例えば、HTTPSリクエスト/レスポンストランザクションを使用して)仲介サービス111と通信する。マッチリクエストは、以前モバイル装置A120に関して決定したNATタイプ及びホールパンチデータ(例えば、パブリックIPアドレス及びポート)を含むことができる。多人数参加型ゲームを含む実施形態において、マッチリクエストは、モバイル装置Aのプレーヤー(例えば、固有プレーヤーIDコードを使用する)、ユーザがやりたいと思うゲーム、ゲームに参加するプレーヤー数、及び/又は(図2aを参照して説明したような)所望のゲームに関する他のゲーム構成変数を特定できる。
223−225において、トランザクション220−222に対応するトランザクションセットは、モバイル装置B121に関して実行され、226−228において、トランザクション220−222に対応するトランザクションセットは、モバイル装置C122に関して実行される。つまり、トランザクション228に続いて、仲介サービス111は、モバイル装置120−122の3つ全てに関するマッチリクエストを受信する。この特定の実施例において、マッチリクエストにより、モバイル装置120−122は多人数参加型ゲーム等の特定の共同セッションに対して仲介される(例えば、これらのモバイル装置のユーザは、同じ又は類似の変数セットを用いて同じゲームを選択することができるので、仲介サービス111による仲介につながる)。
仲介サービス111は、マッチリクエストの各々に含まれるデータを使用して、229においてモバイル装置Aに送信されるチケットA、230においてモバイル装置Bに送信されるチケットB、及び231においてモバイル装置Cに送信されるチケットCを生成する。図2bには示されていないが、仲介サービス111は、プッシュ通知サービスを使用して(例えば、図11−12に示すプッシュ通知サービス1050)、チケットA、B、及びCをそれぞれモバイル装置A、B、及びCにプッシュ配信することができる。チケットA、B、及びCに使用するチケットデータ構造の1つの実施形態は、図3に関して説明される。
232において、モバイル装置A120は、NATトラバースサービス290と通信して自分の接続データを決定できる。1つの実施形態において、標準ICE接続データトランザクションを含むことができる。前述のように、接続データは、モバイル装置A120に関するパブリック/プライベートIPアドレス、ポート、及びNATタイプを含むことができる。
モバイル装置A120は自分の接続データをチケットAに付加し、233において、接続データを備えるチケットAをCDXサービス110に送信する。1つの実施形態において、CDXサービス110は、前述のようにチケットAを処理し、234において、接続データ(暗号化できる)をモバイル装置B121及びモバイル装置C122に送信する。これらのトランザクションに関して、CDXサービス110は、チケットAに含まれるNATトラバーサルデータをモバイル装置B及びCのために利用する。
236−238において、トランザクション232−234に対応するトランザクションセットは、チケットBを用いて行われ、238−240において、トランザクション232−234に対応するトランザクションセットは、チケットCに関して行われる。つまり、トランザクション240に続いて、接続データは、モバイル装置120−122の各々の間で共有されている。接続データを使用して、P2Pセッションは、モバイル装置AとBの間。モバイル装置AとCの間、及びモバイル装置AとCの間で確立される。
図2cに示すように、招待サービス112は、CDXサービス110とともに使用される(仲介サービス111の代わりに又は一緒に)。1つの実施形態において、招待サービス112は、特定のモバイル装置及び/又はユーザとのP2P接続に関する招待リクエストを処理する。招待サービス112はステートレスサービスとして実施できる(つまり、各無線装置の間のトランザクションの現在の状態を変更しないサービス)。
この特定の実施例において、250において、モバイル装置A120は、NATタイプリクエストをNATトラバースサービス291に送信する。これに応答して、NATトラバースサービス291は、種々の公知技術を利用してモバイル装置Aが使用するNATタイプを決定する。(いくつかは前述されている)。251において、モバイル装置A120は、CDXサービス110に対してNATトラバースリクエストを開始する。これに応答して、CDXサービス110は、リクエストに使用されるパブリックIPアドレス及びパブリックポート番号を読み取り、この情報をモバイル装置A120に返信する。前述のように、デバイスがNATの背部にある場合、そのパブリックポート及びIPアドレスは、そのプライベートポート及びIPアドレスのそれぞれとは異なるはずである。つまり、使用するNAT対応に応じて、パブリックIPアドレス及びポートは、NATデバイスを通ってモバイル装置に達する「穴を開ける」ために使用できる。
仲介サービスと同様に、1つの実施形態において、モバイル装置の各々は、Hypertext Transfer Protocol Secure(HTTPS)セッションを使用して(例えば、HTTPSリクエスト/レスポンストランザクションを使用して)招待サービス112と通信する。
252において、モバイル装置A120は、モバイル装置AのNATトラバーサルデータ(例えば、NATタイプ、パブリックIPアドレス/ポート)を含む招待リクエストを招待サービス112に送信する。プッシュ通知サービス(以下に詳細の説明する)を利用する実施形態において、招待リクエストは、モバイル装置Aのプッシュトークンを含むこともできる。招待リクエスト252は、1つ又はそれ以上の他のユーザ/デバイス(この場合はモバイル装置B121及びC122ユーザである)を特定する識別コードを含むこともできる。種々の異なる識別コードタイプを使用できる。例えば、多人数参加型ゲームの場合、識別コードは、ゲーム固有プレーヤーIDコードを含むことができる。オーディオ/ビデオチャットセッションの場合、識別コードは、1人又はそれ以上のユーザをモバイル装置Aの「バディ」リストのユーザから特定するための電話番号又は固有IDコードを含むことができる。
1つの実施形態において、招待サービス112は、招待リクエストから識別コードを読み取り、登録データベース(図示せず)を調べてモバイル装置B及びCの各々を見つける。1つの特定の実施形態において、モバイル装置B及びCの各々は、プッシュサービスで登録されて招待サービス112からのプッシュ通知を受信するようになっている。従って、本実施形態において、招待サービス112は、プッシュ通知サービスを使用して、招待リクエストを253及び254においてそれぞれモバイル装置B121及びモバイル装置C122にプッシュ配信する。プッシュ通知サービスに関する追加的な詳細は、以下に(例えば、図11−12及び関連の本文を参照)、及び前述のプッシュ通知アプリケーションに説明される。
1つの実施形態において、招待リクエスト253及び254は、図3及び前述の図2a−bに示すチケットデータ構造を含む。特に、モバイル装置Bに送られるチケットは、モバイル装置A及びBを特定する暗号化リストを含み、モバイル装置Cに送られるチケットはモバイル装置A及びCを特定する暗号化リストを含む。1つの実施形態において、招待サービス112は今のところモバイル装置BのNATトラバーサルデータをもつことができないので、253における「チケット」は、モバイル装置Bを特定する他の情報をもつことができる。例えば、リレーサービス及びプッシュ通知サービス(例えば、図11−12参照)を利用する実施形態に関連して以下に説明するように、253における「チケット」は、モバイル装置Aに関するNATトラバーサルデータ、装置AのIDコード、装置Aのプッシュトークン、装置BのIDコード、及びモバイル装置Bに関するプッシュトークンを含む。254において、モバイル装置A及びCに対して同じ形式の情報を提供できる。
255において、モバイル装置Bは、NATトラバースサービス291と通信してそのNATタイプを決定でき、256において、モバイル装置Bは、CDXサービス110と通信してそのNATトラバーサルデータを決定できる(例えば、パブリックIPアドレス/ポート)。257において、モバイル装置Bは、モバイル装置A及びモバイル装置Bの識別コード、NATトラバーサルデータ、及びプッシュ通知サービスを使用する場合はモバイル装置A及びBに関するプッシュトークンを含む、招待レスポンスを招待サービス112に送信する。258において、モバイル装置Bは、NATトラバースサービス290と通信することで、その現在の接続データを読み出す。259において、モバイル装置Bは、自身の現在の接続データと共にチケット(チケットB)をCDXサービス110に送信する。これに応答して、CDXサービス110は、前述のようにチケットを処理して、接続データをモバイル装置A120に送る。
モバイル装置Bの招待レスポンスを受信すると、招待サービス112は、モバイル装置Aに関する暗号化チケットを生成して、260において、チケットをモバイル装置Aに送信することができる。1つの実施形態において、チケットは、モバイル装置A及びBに関するNATトラバーサルデータ、NATタイプ、及びプッシュトークン(プッシュ通知サービスを使用する場合)を含む。図2cに関連して説明する「チケット」は、仲介サービス111に関連して説明する「チケット」のデータ構造と同じ又は異なることができる。例えば、前述のように暗号化「チケット」を生成するのではなく、招待サービス112は、単純に固有セッションIDを生成して、モバイル装置の各々に対する招待セッションを特定することができる。
261において、モバイル装置Aは、NATトラバースサービス290と通信することで自身の現在の接続データを読み出す。次に、モバイル装置Aは、その接続データをチケットに付加して、262において、接続データを有するチケットをCDXサービス110に送信することができる。CDXサービス110は、前述のようにチケットを処理して、モバイル装置Aの接続データをモバイル装置Bに送る。最後に、263において、モバイル装置A及びBは、交換した接続データを使用して、直接的なP2P接続を開く。以下に説明するように、モバイル装置A及びBのNATタイプに互換性がない場合、リレーサービスを使用してモバイル装置AとBとの間の通信を可能にする。
264−272において、モバイル装置C122及びモバイル装置Aは、モバイル装置B及びAに関する255−263で説明したように、一連のトランザクションを実行してP2P接続を確立できる。詳細には、264において、モバイル装置C122は、NATトラバースサービス291と通信して自身のNATタイプを決定でき、265において、CDXサービス110と通信して自身のNATトラバーサルデータを決定できる(例えば、パブリックIPアドレス/ポート)。266において、モバイル装置Cは、モバイル装置C及びモバイル装置AのNATタイプ、NATトラバーサルデータ、及びプッシュトークン(プッシュ通知サービスを使用する場合)を含む招待レスポンスを送信する。267において、モバイル装置Cは、NATトラバースP2Pサービス290経由で自身の現在の接続データを読み出し、268において、モバイル装置Cは、その接続データをチケットCに付加し、チケットCをCDXサービス110に送信する。CDXサービス110は、前述のようにチケットを処理して、モバイル装置Cの接続データをモバイル装置A120に送る。
269において、モバイル装置A120は、モバイル装置A及びCのNATタイプ、NATトラバーサルデータ、及びプッシュトークン(プッシュサービスを使用する場合)を含む、モバイル装置Cの招待レスポンスを招待サービス112から受信する。270において、モバイル装置Aは、現在の接続データをNATトラバースサービス290から読み出し、現在の接続データをチケットAに付加して、271において、チケットAをCDXサービス110に送信する。もしくは、モバイル装置は自身の接続データをトランザクション261で決定しているのでトランザクション270は必要ない場合もある。CDXサービス110は、前述のようにチケットAを処理してモバイル装置Aの接続データをモバイル装置Cに送る。最後に、272において、モバイル装置A及びCは、交換した接続データを使用して直接的なP2P接続272を確立する。
1つの実施形態において、招待サービス112及び仲介サービス111は、データをモバイル装置へプッシュ配信するためのプッシュ通知サービス(図示せず)に依存することができる。例えば、図2cにおいて、招待リクエスト253及び254は、プッシュ通知サービスによりモバイル装置B121及びC122へプッシュ配信することができる。同様に、図2aにおいて、チケットA及びBは、モバイル装置A120及びB121へプッシュ配信することができる。1つの実施形態において、モバイル装置がネットワーク上でアクティブである場合、プッシュ通知サービスがアクセス可能な中央レジストレーションディレクトリのプッシュトークンを登録する。1つの実施形態において、レジストレーションディレクトリは、ユーザIDで保護されたパスワード又は電話番号をプッシュトークンと関連付けることができる。プッシュトークンがこのディレクトリで特定できる場合、プッシュ通知サービスは、プッシュトークンを使用してプッシュ通知をモバイル装置に送信することができる。1つの実施形態において、プッシュ通知サービスは、本出願人が設計した、例えば、前述のプッシュ通知アプリケーションに説明されるAppleプッシュ通知サービス(APNS)である。しかしながら、プッシュ通知サービスは図2a−cに示す本発明の実施形態に必須ではないことに留意されたい。例えば、プッシュ通知は、本明細書で説明する作動を行うためにCDXサービス110に必須ではない。
図4は、接続データを交換するためにCDXサービス110が実施できる方法を示し、図5は、接続データを交換してP2P接続を確立するためにモバイル装置が実施できる方法を示す。これらの特定の態様は、図1から2cに関連して既に説明されている。詳細には、これらの方法は、図1−2cに示すネットワークアーキテクチャの枠の中で実施できるが、このようなアーキテクチャに限定されるものではない。1つの実施形態において、本方法は、プロセッサが実行すると所望の作動をもたらすプログラムコードに組み込むことができる。プログラムコードは、プロセッサでの実行中にランダムアクセスメモリ(RAM)等のコンピュータ可読媒体に格納することができる。プロセッサは、汎用プロセッサ(例えば、Intel(登録商標)CoreTMプロセッサ)又は特定用途向けプロセッサとすることができる。しかしながら、本方法は、ハードウェア,ソフトウェア、及びファームウェアの何らかの組み合わせで実施できる。更に、プログラムコードは、ハードディスクドライブ、光ディスク(例えば、Digital Video Disk又はCompact Disc)等の不揮発性記憶デバイス、又はフラッシュメモリデバイス等の不揮発性メモリに格納できる。
図4に示す方法を参照すると、401において、NATトラバースリクエスト(「ホールパンチ」リクエストと呼ぶ場合もある)を、特定のモバイル装置(例えば、モバイル装置A)から受信する。402において、NATトラバースレスポンスを生成してモバイル装置Aに送信する。1つの実施形態において、NATトラバースレスポンスの生成は、モバイル装置Aの現在のパブリックIPアドレス/ポート及び/又はNATタイプの決定を含むことができる。
その後、モバイル装置Aに関するチケットを、前述の仲介サービス111又は招待サービス112等のチケット生成エンティティで生成及び暗号化する。403において、NATトラバーサルデータ(装置A及び1つ又はそれ以上の他の装置に関する)及び装置Aに関する接続データを含む、モバイル装置A対して生成したチケット(チケットA)を受信する。404において、メッセージ認証コードを利用してチケットを認証し、チケットを暗号化するためにチケット生成エンティティが使用したのと同じCDXチケットキーを使用して、ホールパンチデータを復号化する。前述のように、1つの実施形態において、正しいCDXチケットキーは、CDXチケットキーに関連する期限切れ時間/日付を使用して特定される。
405において、各モバイル装置に関するNATトラバーサルデータを復元する。406において、モバイル装置Aに関する接続データを、NATトラバーサルデータを使用してピアの各々に送信する。407において、ピアの各々から受信確認を受信する。408において、全てのピアからの受信確認を受信していないと判定すると、409において、モバイル装置Aの接続データを未応答のこれらのピアに再送する。全ての接続データの受信確認があったと判定すると、本方法は終了する。
1つの実施形態において、図4に示す本方法は、P2Pトランザクションに含まれる各々のピアに対して実行することができ、各ピアは確実にP2P接続を確立するのに必要な接続データを確実に受信できる。
図5は、本発明の実施形態によるモバイル装置が実行する方法を示す。501において、NATトラバースリクエストを送信し、502においてNATトラバースレスポンスを受信する。前述のように、このレスポンスに含まれるNATトラバーサルデータは、要求装置のパブリックポート/IPアドレスを含むことができる。503において、NATトラバーサルデータを含むマッチリクエストを送信する。次に、前述の仲介サービス111又は招待サービス112等のチケット生成エンティティで、モバイル装置に関するチケットを生成して暗号化する。前述のチケットデータ構造の他の別例として、仲介サービス111及び/又は招待サービス112は、単純に固有セッションIDを使用して参加者の各々を特定できる。
504において、チケットを受信することができ、505において、モバイル装置に関する接続データをチケットに付加し、506において、接続データを含むチケットを送信する。507において、1つ又はそれ以上の他のピアとのP2P接続の確立が必要な接続データを受信する。508において、1つ又はそれ以上の他の無線装置が506で送信した接続データを受信したことを示す受信確認を受信する。全ての受信確認を受信していない場合、510において、受信確認を受信していないモバイル装置に対して接続データを再送する。5098において、全ての受信確認を受信したと判定すると、507で受信した接続データを使用して他のモバイル装置とのP2Pセッションを確立する。
予備通信チャンネルを確立して利用する装置及び方法
最新のモバイル装置は、種々の異なる通信チャンネル上で通信できる。例えば、Apple iPhone(商標)は、Wi−Fiネットワーク(例えば、802.11b,g,nネットワーク)、3Gネットワーク(例えば、Universal Mobile Telecommunications System(UMTS)ネットワーク、High−Speed Upリンク Packet Access(HSUPA)ネットワーク等)、及びBluetooth(登録商標)ネットワーク(パーソナルエリアネットワーク(PAN)として公知)上を通信できる。別のモバイル装置は、WiMAX、International Mobile Telecommunication(IMT) Advanced、及びLong Term Evolution(LTE) Advanced等の追加的な通信チャンネル上で通信できるであろう。
作動時、最新のモバイル装置は、利用可能なチャンネルセットの間の1つの主要通信チャンネルを選択する。例えば、モバイル装置は、1つが利用可能な場合には大抵Wi−Fi接続を選択し、Wi−Fiが利用できない場合にはセルラーデータ接続(例えば、UTMS接続)を選択するように構成される。
本発明の1つの実施形態において、モバイル装置のグループは、最初は標準ICE接続データ交換を使用して及び/又は前述の接続データ交換技術を使用して一次ピアツーピア(P2P)通信チャンネルを確立する。次に、モバイル装置は、一次チャンネル上で接続データを交換して、一次チャンネルが故障した場合の予備チャンネルとして使用する1つ又はそれ以上の二次通信チャンネルを確立することができる。1つの実施形態において、二次通信チャンネルは、このチャンネル上で「ハートビート」パケットを定期的に送信することで、NATファイアウォールを通ってオープンのままである。
本明細書で使用する場合、通信「チャンネル」は2つのモバイル装置の間の全ネットワーク経路を呼び、通信「リンク」は通信経路で使用する特定の接続の1つを呼ぶ。例えば、装置AがWi−Fi接続を使用してインターネットに接続され、装置Bが3G接続を使用してインターネットに接続される場合、装置Aと装置Bとの間の「チャンネル」は、Wi−Fiリンク及び3Gリンクで規定され、装置AはWi−Fi通信「リンク」を有し、装置Bは3G通信リンクを有する。従って、装置AがWi−Fiリンクから3Gリンクに切り替わると、装置Aと装置Bとの間の「チャンネル」は、装置Bの3Gリンクが同じ状態のままであるにもかかわらず変更される。
図6を参照して、モバイル装置が一次及び二次通信チャンネルを確立する特定の実施例を説明する。しかしながら、本発明の基本的原理は、図6の通信リンク及び通信チャンネルの特定のセットに限定されないことに留意されたい。
図6において、モバイル装置A601は、NATデバイス611を備える通信リンク605上及びNATデバイス612を備える通信リンク606上でネットワーク610(例えば、インターネット)に接続できる。同様に、装置C603は、NATデバイス613を備えた通信リンク609上及びNATデバイス613を備えた通信リンク610上でネットワーク610に接続できる。例示的かつ非限定的に、通信リンク605及び609は3G通信リンクとすること、及び通信リンク606及び610はWi−Fi通信リンクとすることができる。
結果的に、本実施例において、モバイル装置Aとモバイル装置Bとの間で確立できる4つの異なる通信チャンネルが存在するが、第1のチャンネルはリンク605及び609を使用し、第2のチャンネルはリンク605及び610を使用し、第3のチャンネルはリンク606及び609を使用し、第4のチャンネルはリンク606及び610を使用する。1つの実施形態において、モバイル装置A及びBは、優先順位決定スキームに基づいてこれらのチャンネルの中の1つを一次通信チャンネルとして選択でき、3つの残りのチャンネルを予備通信チャンネルとして選択できる。例えば、1つの優先順位決定スキームは、最大の帯域幅をもつチャンネルを一次チャンネルとして選択して、残りのチャンネルを二次チャンネルとして使用することができる。2つ又はそれ以上のチャンネルが同程度の帯域幅をもつ場合、優先順位決定スキームは、一番安価なチャンネル(ユーザが1つ又はそれ以上のチャンネルを使用するために料金を払っていると想定すると)の選択を含むことができる。もしくは、優先順位決定スキームは、一番安価なチャンネルを一次チャンネルとして選択すること、及び各チャンネルの料金が同じ場合は最大の帯域幅のチャンネルを選択することができる。本発明の基本的原理に従う種々の異なる優先順位決定スキームを実施できる。
モバイル装置A601及びC603は、前述の技術を利用して一次通信チャンネルを確立することができる(例えば、CDXサービス110により接続データを交換することで)。もしくは、モバイル装置601、603は、標準Internet Connectivity Establishment(ICE)トランザクションを実行して接続データを交換することができる。一次チャンネルの確立方法に関わらず、一度確立されると、モバイル装置A601及びC603は、一次通信チャンネル上で二次通信チャンネルに関する接続データを交換できる。例えば、図6の一次通信チャンネルが、通信リンク606及び通信リンク609を含む場合、この接続は一度確立すると通信リンク605及び609を含む二次通信チャンネルに関する接続データを交換するために使用できる。本実施例において、一次通信チャンネル上で交換される接続データは、モバイル装置の各々に関するパブリック及びプライベートIPアドレス/ポートを含む、NATトラバーサルデータ並びにNAT611及びNAT613に関するNATタイプデータを含むことができる。
二次通信チャンネルが確立されると、ハートビートパケットを使用してオープンのままになる。例えば、装置Aは、定期的に小さな「ハートビート」パケットを装置Cに送信すること、及び/又は装置Aは、定期的に小さな「ハートビート」パケットを装置Cに送信して二次チャンネルに使用するNATポートを開いたままとすることができる(NATは、非作動時にポートを閉じる場合がある)。ハートビートパケットは、ペイロードのないUDPパケットとすることができるが、本発明の基本的原理は、特定のパケットフォーマットに限定だれない。ハートビートパケットは、ペイロードヘッダーに自己識別形式フィールドを有するUDPパケットとすることができ、随意的な、例えばチャンネルの有効期限値を含む、追加的にフォーマットされた情報を含むことができる。
図7に示すように、各モバイル装置601は、一次及び二次通信チャンネルのリストを包含するデータ構造710(例えば、テーブル、テキストファイル、データベース)を格納及び保持することができる。別個のエントリは各々の通信チャンネルに対して設けられており、このチャンネルを使用するのに必要な接続データ(例えば、プライベート/パブリックIPアドレス、NATタイプ)、及びチャンネルの現在の状態(例えば、一次、二次1、二次2)を含んでいる。
1つの実施形態において、通信インタフェース701及び702は、通信リンク605及び通信リンク606上で通信するために使用される。モバイル装置601で故障検出モジュール705を実行して、特定の通信インタフェース/リンクの故障又は特定の閾値以下の機能低下を検出することができる。これに応答して、リンク管理モジュール706は、一次/二次接続データ710を読み取って、次に高い優先順序の二次チャンネルを一次チャンネルに昇格させる。二次チャンネルの優先順位決定は一次チャンネルに関して前述したのと同じ原理を使用して行うことができる(例えば、帯域幅、コスト、信頼性に基づいて)。二次チャンネルが選択されると、リンク管理モジュール706は、リンク故障識別子を他のモバイル装置のリンク管理モジュールに送信することができ、これらの装置に二次通信チャンネルを一次通信チャンネルに昇格させるよう指示する。次に、これらの装置は選択された一次チャンネルに関連する接続データを使用して開始することになる。
1つの実施形態において、二次通信チャンネルの1つへの切り替えを強制するために、一次通信チャンネルの完全な「故障」は必須ではない。例えば、1つの実施形態において、一次通信チャンネルが十分に機能低下した場合(例えば、特定の帯域幅、ビットレート、信頼性閾値以下)、本明細書で説明するように二次チャンネルへの変更を行うことができる。1つの実施形態において、二次チャンネルへの切り替えは、現在の一次チャンネルよりも二次チャンネルが良好な性能(例えば、帯域幅、ビットレート、又は信頼性)をサポートできる場合にだけ行われる。
図8aは、図6と同じネットワーク構成を示すが、ネットワーク610に直接接続されると共にプライベートネットワーク接続620経由で装置C603に接続される、追加のモバイル装置B 602を備えている。プライベートネットワーク620は、例えば、装置B602と装置C603との間のBluetooth(登録商標) PAN接続とすることができる。この実施例から分かるように、一次チャンネルから二次チャンネルへの切り替えは、ネットワークトポロジーを著しく変える場合がある。例えば、図8bに示すように、モバイル装置の一次チャンネル801が通信リンク609を含み(結果的に、装置A、B、及びCの間の直接接続になる)、二次チャンネルがプライベートネットワーク620を含む場合、プライベートネットワークを使用した装置A及び装置Cの唯一の通信は装置Bを経由するので、ネットワークトポロジーは図8cに示すように変わる。これは3つの装置だけの単純な例であるが、多数の装置を使用することができ、一次及び二次通信チャンネルの間で切り替える場合、結果的に種々の異なるネットワークトポロジー構成がもたらされる。
図9は、二次チャンネルを確立して維持する方法の1つの実施形態を示す。1つの実施形態において、本方法は、モバイル装置のリンク管理モジュール706で実行できる。しかしながら、本方法は、特定のデバイス構成に限定されない。
901において、一次P2P通信チャンネルを選択する。前述のように、一次チャンネルは、予め定められた優先順位決定スキームに基づいて選択できる。例えば、特定の通信チャンネルタイプの優先度を他の通信チャンネルタイプよりも高くすることができる。また、チャンネルは、帯域幅、利用料金、及び/又は信頼性等の変数に基づいて優先順位を決めることができる。
902において、予備P2P通信チャンネルを確立する。1つの実施形態において、これは一次通信チャンネル上の全てのモバイル装置の間の共有接続データによって実現できる。903において、予備チャンネルを維持する。1つの実施形態において、これは二次通信チャンネル上でデータを定期的に送信することを含む(例えば、定期的なハートビートパケットの形態で)。
904において、一次P2Pチャンネルが故障した場合(例えば、特定のモバイル装置の通信リンクがダウンしたので、又はモバイル装置が通信リンクの圏外になったので)、905において、モバイル装置は優先順位が最も高い予備チャンネルを一次チャンネルに昇格する。1つの実施形態において、これは故障リンクのモバイル装置が、二次チャンネル上の他の装置にリンク故障の通知を送信することを含む。最後に、906において、予備チャンネルが一次チャンネルになり、処理は902に戻る(何らかの追加の予備チャンネルを発見して優先順位決定スキームに追加する)。
ピアツーピア(P2P)通信チャンネルを確立する招待サービスのための装置及び方法
図10に示すように、CDXサービス110、仲介サービス111、及び招待サービス112(いくつかの実施形態は前記に説明した)に加えて、本発明の1つの実施形態は、レジストレーション/ディレクトリサービス1052、プッシュ通知サービス1050、及びリレーサービス1051を含むことができる。前述のように、1つの実施形態において、招待サービス112及び/又は仲介サービス111は、レジストレーション/ディレクトリサービス1052を使用して登録されたモバイル装置及びモバイル装置にデータをプッシュ配信するプッシュ通知サービス1050を特定することができる。1つの実施形態において、モバイル装置がネットワーク上でアクティブな場合、「プッシュトークン」(プッシュ通知アプリケーションの「通知サービスアカウント識別子」と呼ぶ場合もある)を、プッシュトークンをパスワード保護されたユーザID又は電話番号に関連付けることで、レジストレーション/ディレクトリサービス1052が保持するデータベースに登録する。プッシュトークンがレジストレーションディレクトリで特定されると(例えば、ユーザIDを用いた照会を行うことで)、プッシュ通知サービス1050は、プッシュトークンを使用してプッシュ通知をモバイル装置に送信することができる。1つの実施形態において、プッシュ通知サービスは、本出願人が設計した、例えば、前述のプッシュ通知アプリケーションで説明するAppleプッシュ通知サービス(APNS)とすることができる。
図11は、2つのモバイル装置の間の直接P2P接続を確立するためにプッシュ通知サービス1051を使用する本発明の実施形態を示し、図12は、リレーサービス1051を介したP2P接続を確立するために使用する実施形態を示す。以下に説明するように、P2P接続を確立するためにリレーサービス1051を使用するか否かの決定は、各モバイル装置の間で直接P2P接続を確立する実現可能性に基づく場合がある(例えば、NAT互換性の問題に基づく)。
図11を参照すると、1101において、モバイル装置A120は、モバイル装置B121を招待するための招待リクエストを送信して、モバイル装置BをP2P通信セッション(例えば、共同ビデオゲーム、P2Pビデオチャット)に招待する。1つの実施形態において、招待状は、特定のオンラインアプリケーションの枠の中でモバイル装置B121(及び/又はモバイル装置Bのユーザ)を特定するユーザIDコードを含む。例えば、ユーザIDコードは、特定の多人数参加型P2PゲームのためのプレーヤーIDとすること、及び例えば、Universally Unique Identifier(UUID)の形態とすることができる。もしくは、いくつかの実施形態において、IDコードは、モバイル装置B121の電話番号とすることができる。ゲームIDコードは、モバイル装置Aがモバイル装置Bに参加するように勧誘している多人数参加型ゲームを特定するために使用することができる。バケットIDは、ゲーム構成を特定するために使用できる(仲介サービスに関連して本明細書で説明するように)。
また、招待リクエスト1101は、モバイル装置A120及び該モバイル装置Aに関連するNATトラバース/接続データを特定するIDコードを含むことができる(例えば、モバイル装置Aのパブリック/プライベートIPアドレス及びポート、及び装置AのNATデバイスのNATタイプ)。NATトラバース/接続データ又はNATタイプデータは、招待リクエスト1101の前にモバイル装置Aが既に決定している(例えば、図2aから2cに関連して説明したような、NATトラバース、NATタイプ、及び接続データトランザクションによって)。前述のように、招待リクエスト1101は、HTTPSリクエストの形態とすることができる。更に、追加的なセキュリティのために、招待リクエスト1101は、事前に指定された認証オーソリティが署名したクライアント認証を含むことができる。
モバイル装置Bを特定するために使用される特定のIDコードタイプとは無関係に、招待サービス112はIDコードを受信し、1102において、招待サービス112は、ディレクトリサービス1052(図11には示されていない)内で参照して、通知をモバイル装置Bプッシュ配信するために使用されるプッシュトークン(プッシュトークンB)等の、通知サービスアカウント識別子を特定することができる。1つの実施形態において、この参照動作は、複数のチェックを行って招待リクエストが許可されるべきか否かを決定するようになっている。最初に、モバイル装置Aの識別コード(ID−A)及び装置Aのプッシュトークン(プッシュトークンA)は、ディレクトリサービスデータベース内の登録アソシエーションであること確認する。また、参照動作1102は、モバイル装置Aのユーザがモバイル装置Bのユーザを招待できることを確認できる(例えば、モバイル装置Bのユーザは、Bの友人として登録された他のユーザがユーザBを招待できることを規定できる、又は招待は許可しないこと規定できる)。1つの実施形態において、これらのチェックのいずれかが不合格になると、招待リクエストはキャンセルとなり、招待サービス112はモバイル装置Aにエラーを戻す。
本実施形態では「プッシュトークン」が説明されているが、本発明の基本的原理は、「プッシュトークン」又はモバイル装置を認証して通知をプッシュ配信するための他の特定のデータ構造の使用に限定されないことに留意されたい。
1つの実施形態において、プッシュトークンを特定した後に、招待サービス112は、招待セッションに割り当てられて全ての追加的なトランザクションにおいてセッションを特定するために使用される、セキュアな一度だけの「セッショントークン」を生成できる。次に、セッショントークンのコピーがモバイル装置A120に返信され、招待リクエストと一緒にモバイル装置Bへ送られる。1つの実施形態において、セッショントークンは、前述のチケットデータ構造と共に使用され、別の実施形態において、セッショントークンだけが使用される。
1103において、招待サービス112は、プッシュリクエストをプッシュ通知サービス1050に送信する。1つの実施形態において、プッシュリクエストは、モバイル装置Aに関するNATトラバーサルデータ、装置AのIDコード、プッシュトークンA、装置BのIDコード、プッシュトークンBを含むことができる。1つの実施形態において、この情報は、「チケット」データ構造内にパッケージ化すること及び前述のように暗号化することができる。他の実施形態において、このデータは、招待セッションIDと一緒に単純に送信される。
本実施例のモバイル装置B121はプッシュ通知サービス1050に登録されるので、プッシュ通知サービス1050は、1104において、招待リクエストをモバイル装置B121に位置付けてプッシュ配信することができる。プッシュ配信される招待リクエスト1104は、セッショントークン、モバイル装置AのNATトラバーサルデータ/接続データ、及びモバイル装置BのIDコードを含むことができる。これに応答して、招待リクエストに対して、モバイル装置Bは、前述のようにNATトラバースサービス又はCDXサービス110を呼び出すことで、ネットワーク情報を決定できる(例えば、NATトラバース/接続データ、NATタイプ)。
1105において、モバイル装置Bは招待リクエストを受諾する。受諾1105は、招待サービス112のHTTPS呼び出しの形態とすることができ、(招待リクエストに関連して説明した)事前に指定された認証オーソリティが署名したクライアント認証を含むことができる。1つの実施形態において、受諾1105は、モバイル装置A及びBに関するIDコード、及びモバイル装置A及びBに関するNATトラバース/接続データ及び/又はNATタイプを含むことができる。また、受諾1105は、モバイル装置A及びBに関するプッシュトークン、及び/又はセッショントークンを含むことができる。1つの実施形態において、また、受諾1105は、前回失敗した直接接続試行からの再試行であるか否かの表示を包含することができる。しかしながら、他の実施形態において、受諾1105は、再試行表示を包含しない、その代わりに、P2P接続試行の失敗を検出すると、2つのモバイル装置のうちの一方は、特別な「リレー招待リクエスト」を招待サービス112に送信することができる。これに応答して、このサービスは、図12(1201から始まる)に関連して以下に説明する一連のリレートランザクションを直接開始することができる。
1106において、招待サービス112は、互換性チェックを行ってモバイル装置A及びBの間の直接P2P接続が実現可能か否かを決定することができる。例えば、1つの実施形態において、モバイル装置Bから受信した 受諾1105が、前回失敗した直接接続試行(又は、所定回数の前回失敗した直接接続試行)からの再試行であることを示す場合、招待サービスは、直接P2P接続が実現不能であるとの結論を下すことができる。招待サービス112は、モバイル装置A及びBに関するNATタイプデータを比較して、モバイル装置A及びBのNATデバイスが直接P2P接続をサポートできるか否かを決定することができる。NATタイプの特定の組み合わせは、P2P接続を確立するための互換性がないことが知られている。例えば、「full cone」NATは、直接P2P接続を確立するために、クローズ/ファイアウォールNAT以外の任意の他のNATタイプと一緒に使用できる。対照的に、「symmetric」NATは、接P2P接続を確立するために、「full cone」NATと一緒にだけ使用できる。本発明の1つの実施形態の種々のNATタイプを組み合わせる実現可能性は、図14に示すNAT互換性テーブル1400に説明する。このテーブルにおいて、縦列は1つのモバイル装置(例えば、モバイル装置A)のNATタイプを示し、横列は他のモバイル装置(例えば、モバイル装置B)のNATタイプを示す。セル内の「1.0」は関連の横列及び縦列のNATタイプに互換性があり、「0.0」はNATタイプに互換性がないことを示す。
1つの実施形態において、互換性チェック1106が直接P2P接続を実行不可能であると判定すると、招待サービス112は、図12に関連して以下に説明するように、リレー参照リクエスト1201を送信できる。しかしながら、互換性チェック1106が直接P2P接続を実行可能と判定すると、招待サービス112は、モバイル装置Aの招待へのモバイル装置Bの受諾を含むプッシュリクエスト1107をプッシュ通知サービス1050に送信できる。プッシュリクエスト1107、及びプッシュ通知サービス1050からモバイル装置Aへの後続のプッシュ通信1108は、セッショントークン、並びにモバイル装置A及びBの両者のプッシュトークン、IDコード、及び/又はNATトラバース/接続データを含むことができる。1つの実施形態において、この情報は、前述の「チケット」データ構造内にパケット化すること(例えば、図2aから2c及び関連の記載を参照)、及び固有キーを使用して暗号化することができる。もしくは、この情報は、固有招待セッションIDと一緒に単純に送信することができる。また、招待サービス1050は、直接接続が試行されることになるモバイル装置Bを通知することができる。
この段階で、モバイル装置A及びBは、直接P2P接続を確立するための十分な情報を有している。1つの実施形態において、前述のように、直接P2P接続はCDXサービス110を使用して実現できる。例えば、モバイル装置Bは、自身の接続データをチケットBに付加し、1109において、チケットB(接続データと一緒に)をCDXサービスに送信する。このトランザクションの直前で、モバイル装置Bは、この接続データが最新であることを保証するために図2bに示すトランザクション235等のトランザクションを実行することができる。次に、CDXサービス110はチケットを認証し(例えば、前述のように、固有セッションキーを使用して)、モバイル装置Bの接続データを復元して、1110において接続データをモバイル装置Aに送る。同様に、モバイル装置Aは自身の接続データをチケットAに付加し、1111において、チケットA(接続データと一緒に)CDXサービス110に送信する。このトランザクションの直前で、モバイル装置Aは、この接続データが最新であることを保証するために図2bに示すトランザクション232等のトランザクションを実行することができる。次に、CDXサービス110はチケットを認証し(例えば、例えば、前述のように、固有セッションキーを使用して)、モバイル装置Aの接続データを復元して、1112において、接続データをモバイル装置Bに送る。最後に、1113において、モバイル装置A及びBは、交換接続データを使用して直接P2P接続に参加する。
図12を参照すると、互換性チェック1106 が直接P2P接続を実行できないと判定すると、招待サービス112は、リレー参照リクエスト1201をリレーサービス1051に送信して各モバイル装置がリレーホストを使用することを決めることができる。リクエスト1201は、モバイル装置A及びBに関するネットワーク情報(例えば、NATトラバース/接続データ及び/又はNATタイプデータ)を含むことができ、リレーサービス1051はこの情報を使用して両モバイル装置に適切なリレーホストを選択する。図13に示すように、リレーサービス1051の1つの実施形態は、複数のリレーホスト1302−1303及びリレーホストの各々に関するネットワーク情報を包含するリレーホストデータベース1301を含む。招待サービス112は、リレー参照リクエスト1201をリレー参照サービス1300に送信し、リレー参照サービスはモバイル装置A及びBに関するネットワーク情報を使用するリレーホストデータベース1301を照会する。データベースの結果を受信すると、リレー参照サービス1300は、選択されたリレーホスト1302−1303を特定するレスポンス1202を提供する。
1つの実施形態において、リレー参照レスポンス1202は、リレーサービスが生成したリレートークン、及びモバイル装置A及びBがリレー接続のために使用するリレーホスト1302−1303のネットワークアドレス(IPアドレス/ポート)を含む。1つの実施形態において、リレートークンは、リレーセッションに関連付けされ、リレーサービス1051への接続時にリレーホスト1302−1303が使用してモバイル装置A及びBを認証するようになっている。トークンは、例えば、固有IDリレーセッションIDコード、デジタル認証、及び/又はリレーセッションに関連付けされた固有暗号化キーを含む種々の形態をとることができる。
1203において、招待サービスは、リレー接続が行われるであろうという表示を含むリレーレスポンス1203をモバイル装置B121に送信する。1つの実施形態において、リレーレスポンス1203は、リレートークン及びリレーホストB1303に関するネットワーク情報を含むことができる。1つの実施形態において、レスポンス1203は、モバイル装置Bの受諾1105に応答して送られるので、モバイル装置Bに直接送ることができる(プッシュ通知サービス1050を迂回して)。
招待サービス112は、リレートークン及びリレーホストB1303に関するネットワーク情報を含む、リレーレスポンス1204をモバイル装置Aに送信する。この場合、レスポンス1204は、トランザクション1205において、プッシュ通知サービス1050によって、モバイル装置Aにプッシュ配信される。
1206において、モバイル装置A120は、リレーホストA1302に関するネットワーク情報を使用して、リレーサービス1051との接続を確立できる。同様に、1207において、モバイル装置B121は、リレーホストB1303に関するネットワーク情報を使用して、リレーサービス1051との接続を確立できる。このトランザクションの各々において、モバイル装置A及びBの任意のNATファイアウォールに新しいホールが開けられて、モバイル装置A及びBに関するNATトラバース/接続データはリレーサービス1051で決定されて、それぞれモバイル装置A及びBに返信される(例えば、装置のパブリックIP/ポートを決定することで)。1つの実施形態において、リレーサービス1051及びモバイル装置A及びBは、当業者には理解できるように、NAT又はファイアウォールの背部の構成要素がTCP又はUDP接続上で到来データを受信できるようにする、Traversal Using Relay NAT(TURN)プロトコルを実装する。
1208において、モバイル装置Aは、1209においてプッシュ通知サービスに送られて、1210においてモバイル装置Bにプッシュ配信される、リレーアップデートを招待サービス112に送信する。同様に、1211において、モバイル装置Bは、1212においてプッシュ通知サービスに送られて、1213においてモバイル装置Aにプッシュ配信される、リレーアップデートを招待サービス112に送信する。モバイル装置Aが送信するリレーアップデートは、セッショントークン、各装置のIDコード、及び1206及び1207におけるリレーで決定されるNATトラバース/接続データ(つまり、モバイル装置Aを用いて自身のNATトラバース/接続データをモバイル装置Bに送る、又はその逆)を含むことができる。1つの実施形態において、リレーアップデート動作は、各モバイル装置のNAT情報が変化する可能性があるので行われる。
最後に、1214及び1215において、モバイル装置A及びBはそれぞれリレーサービス1051を介してP2P接続を確立する。1つの実施形態においてモバイル装置Aがモバイル装置BのNATトラバース/接続データをリレーサービス1051に送った場合に又はその逆の場合にリレー接続が確立されるので、リレーサービスは、各ピアのリレーホスト1302−1303への正しい経路を決定できる。
前述の技術を利用して、招待サービス112は、ステートレスサービスとして実行することができ、これは膨大な数のモバイル装置を備える大規模システムであっても、本質的に拡張性があり回復機能がある。例えば、プッシュ通知サービス1050は、本質的にコンテンツを登録されたモバイル装置に位置付けしてプッシュ配信できるので、招待サービスは、各装置の現在の位置を追跡する必要はない。更に、装置が各リクエスト及びレスポンスと一緒に全セッション状態データを送信するので、招待サービスは、何らかの事前接続状態情報を保持する必要がなく、招待サービスの記憶及び処理要件が低減する。このような実施例は、大規模システムに特に有用である。
ユーザをオンラインセッションに仲介するためのシステム及び方法
図15に示すように、仲介サービス111の1つの実施形態は、マッチリクエストを受信してマッチレスポンスをモバイル装置120−122にプッシュ配信する仲介ディスパッチャ1501と、マッチリクエストをリクエストテーブル1502に格納すると共に適合可能なセットデータを適合可能なセット識別子(MSI)テーブル1503に格納するためのデータベース1512と、データベース1512からのマッチリクエストを取り出し、マッチング動作を行って、マッチ結果をデータベース1512に戻す1つ又はそれ以上の仲介部1510を含むことができる。しかしながら、本発明の基本的原理は、図15に示す特定のアーキテクチャに限定されないことに留意されたい。
1つの実施形態において、仲介ディスパッチャ1501は、仲介サービス111のインタフェースとして機能して、モバイル装置120−122からのリクエストを受信し、このリクエストを命令に翻訳してリクエストをデータベース1512に格納し、データベース1512からのマッチ結果を読み出して、この結果を翻訳してモバイル装置120−122に伝える。
作動時、新しいマッチリクエストが届くと、仲介ディスパッチャ1501は、リクエストをリクエストテーブル1502内の横列に格納することができる。1つの実施形態において、ディスパッチャ1501は、各マッチリクエストに、単純に図15に「A」、「B」、及び「C」(モバイル装置A、B、及びCに対応する)で示すリクエストID(RID)コードを割り当てる。単純化のために図15では文字記号を用いて示すが、RIDコードは、文字列、整数、又はデータベース内のマッチリクエストを追跡するのに適する他の種々の形式の変数とすることができる。
各マッチリクエストには、リクエストテーブル1502に記憶される、適合可能なセット識別子(MSI)値を割り当てることができる。1つの実施形態において、MSIは、照会がリクエストされた特定のアプリケーション及び/又はそのアプリケーションのために使用される機器構成パラメータを特定できる。例えば、12:4のMSI値は、識別子「12」を有する特定の多人数参加型ゲームを特定すること、及び識別子「4」を有するゲームに関する特定の機器構成を特定することができる。詳細には、IDコード「12」は特定の多人数参加型レーシングゲームを特定し、IDコード「4」はレーシングゲームに関する特定のレーストラック、速度、プレーヤー経験レベルを規定することができる。1つの実施形態において、アプリケーション開発者は、このMSI値を用いて何らかのアプリケーション機器構成パラメータを規定する選択肢を提供する。1つの実施形態において、MSIを直接規定する以外に、アプリケーション開発者は、ゲームID(特定のゲームを識別するための)及びバケットID(特定のゲーム構成を識別するための)を規定するが、これらの値は仲介ディスパッチャ1501によりMSI値にマッピングされる。
更に、単一のMSI内で複数の異なるMSI値を用いて、複数の異なる機器構成パラメータを規定できる(例えば、12:4:1は、12=レーシングゲーム、4=トラック、及び1=経験レベルと表すことができる。)。以下に詳細に説明するように、1つの実施形態において、各MSIは、仲介部1510が使用して、仲介動作を行うことができるマッチリクエストセットを特定するようになっている(例えば、リクエストは、MSIに基づいてグループ化され、マッチは各MSIグループ内で行われる)。1つの実施形態において、各MSIは、ディスパッチャによって動的に変更/選択でき、異なるマシンパーティションを特定するパーティションIDを含むことができる。例えば、特定のMSIが過負荷になると、ディスパッチャは、MSIを2つ又はそれ以上の異なるサーバ及び/又は格納パーティションの間に分割することができる(例えば、最後の数字がパーティション1及び2を特定する4:3:1及び4:3:2という記号表示を用いて)。次に、異なる仲介部は、異なるサーバの各々の異なるMSIの各々からのリクエストを独立して読み出して処理することができる。
図15に示すように、マッチリクエストデータは、各リクエストに関するリクエストテーブル1502内に格納できる。リクエストデータは、仲介判定を提供するのに適する任意のデータ、及び/又はネットワーク上でリクエストを開始するモバイル装置にアクセスするのに必要な任意のデータを含むことができる。例えば、1つの実施形態において、各リクエストのマッチリクエストデータは、リクエストを開始するモバイル装置に関するNATタイプデータ及び/又はNATトラバース/接続データを含む。また、デバイス接続速度(100kbps、1Mbps等)、接続タイプ(例えば、3G、EDGE、WiFi)、装置の位置(例えば、地理位置情報技術で決定される)、言語(英語、スペイン語等)、及び/又はユーザ嗜好等の、リクエストデータの他のタイプはリクエストテーブル1502内に格納できる。リクエストデータは、各モバイル装置120−122で決定でき、各マッチリクエストと一緒に仲介ディスパッチャ1501に送信される。例えば、各モバイル装置は、自身の接続データ、接続タイプ、装置の位置等を種々の技術を用いて決定できるが、その中のいくつかは本明細書で説明する(例えば、NATトラバースサーバを用いて通信を行いNATトラバース/接続データを決定する、GPSを用いて装置位置を決定する、HTTP情報を読み取って言語を決定する等)。
図15に示すように、1つの実施形態において、各アクティブMSIは、MSIテーブル1503の横列に割り当てることができる。1つの実施形態において、新しいリクエストが届くと、リクエストをリクエストテーブル1502に追加することに加えて、ディスパッチャ1501は、MSIテーブル1503をチェックして、そのリクエストに関してMSIが既に存在するか否かを判定する(つまり、同じMSIを有する他のリクエストが既に届いているか否か)。一致するMSIが見つからない場合、ディスパッチャ1501は、MSIテーブル1503に新しいリクエストのための新しいエントリを作成することができる。一致したMSIが見つかると、前述のように、ディスパッチャは新しいリクエストをリクエストテーブル1502に単純に追加する。
リクエストテーブル1502及びMSI テーブル1503が仲介ディスパッチャ1501によって更新されると、仲介モジュール1510のインスタンス(以下では単に「仲介部1510」と呼ぶ)は、データを取り出して仲介動作を行う。複数の仲介部のインスタンスを同時に実行して仲介リクエストを処理することができ、単一の仲介部1510は複数の異なるMSIグループ上で同時に複数の仲介動作を処理することができる。
1つの実施形態において、仲介部1510が利用可能になると(例えば、MSIグループのマッチング動作の完了後、又は初期化後)、MSIテーブル1503に問い合わせて、新しいMSIを特定して処理する。図15において、仲介部IDフィールドのMSI3:1に関する「N/A」値は、このMSIを処理するための責任が仲介部に割り当てられていないことを示す。1つの実施形態において、各MSIエントリは、タイムスタンプが付与されており、仲介部1510は、最も古いタイムスタンプのMSIを選択する。
1つの実施形態において、仲介部1510が特定のMSIに対して責任を引き受ける場合、MSIテーブル1503の仲介部IDコードを更新して、MSIのリース期間(例えば、5秒)を規定する。1つの実施形態において、仲介部1510は、MSIに適するようにリース値を継続的に更新する。リース値は、故障した仲介部1510に割り当てられたMSIを特定するために使用できる。例えば、リース値が期限切れの場合、該当MSIは、MSIテーブル1503がMSIは既に仲介部に割り当てられていると示唆するにもかかわらず、新しい仲介部から要求される場合がある。
仲介部1510がMSIに関して責任を引き受ける場合、リクエストテーブル1502に問い合わせて、該当MSIに関連するリクエストをメモリに読み出す。次に、仲介部1510は、マッチング動作を行ってマッチ基準セット(例えば、以下に説明するような)に基づいてユーザとモバイル装置とをマッチする。仲介部1510は、リクエストテーブル1512を更新して、モバイル装置のマッチをいつ行ったかを示すようになっている。例えば、仲介部は、MSI値をリクエストテーブル1512のMSI縦列から取り除いて、マッチが完了したことを表す所定値を入力することができる。更に、仲介部1510は、各参加者に関する「リクエストデータ」フィールドを更新して、この参加者がマッチされた他の参加者を示すことができる(例えば、他の参加者と通信するために必要なNATトラバース/接続データを書き出すことで)。
ディスパッチャ1501は、定期的にリクエストテーブル1502に問い合わせして、完了したマッチを特定することができる。完了したマッチに応答して、ディスパッチャ1501は、マッチに含まれるモバイル装置にプッシュ通知を送信することができる(例えば、本明細書及び同時継続出願に説明するプッシュ通知技術を用いて)。1つの実施形態において、プッシュ通知は前述の「チケット」データ構造を含む。次に、モバイル装置は、各チケットの各々を使用して、前述のように、CDXサービス110によって接続データを交換することができる。
プッシュ通知を使用することに加えて、1つの実施形態において、モバイル装置120−122は、定期的にディスパッチャ1501に問い合わせして、マッチが行われたか否かを判定する。定期的問い合わせは、プッシュ通知がモバイル装置に到達していない場合に有効である。しかしながら、プッシュ配信アーキテクチャを使用するので、定期的問い合わせは、比較的低速に設定できるので、仲介サービス111の負荷を低減できる。
図16は、2つのモバイル装置A及びBを仲介サービス111でマッチする方法の例示的な実施形態を示す。図17a−17dは、リクエストテーブル1502及びMSIテーブル1503に対する例示的な更新を示すが、これは本方法が進行すると生じる。
1601において、マッチリクエストをモバイル装置Aから受信する。1602において、図17aに示すように、モバイル装置Aのリクエストをリクエストテーブルに入力し、新しいMSIエントリ(MSI1:1)をMSIテーブルに入力する(既に存在しない場合)。1603において、マッチリクエストをモバイル装置Bから受信して、1604において、図17bに示すように、モバイル装置Bのマッチリクエストを同様にリクエストテーブルに入力する。
1605において、特定の仲介部インスタンス(仲介部#N)は、MSIテーブルをチェックして、他の仲介部インスタンスによってMSI1:1が要求されていないこと検出する。もしくは、仲介部は、前回MSIで作動した仲介部が故障していることを示す期限切れリースをもつMSIテーブルエントリを検出する。1つの実施形態において、期限切れリースをもつMSIエントリは、新しいMSIエントリ(仲介部が割り当てられていない)よりも高い優先順位が与えられる。更に、1つの実施形態において、比較的古いMSIエントリには比較的新しいMSIエントリよりも高い優先順位を与えることができる。仲介部がMSIを選択する方法には無関係に、選択が行われると、図17Cに示すように、識別子及びMSIエントリに関する新しいリース値セットが付与される(例えば、例示的にリース値5秒を用いて)。次に、仲介部は、リクエストテーブルに問い合わせて、処理できるようにMSIをもつリクエストテーブルエントリをメモリに読み出すことができる。
1606において、仲介部は、一連のマッチング動作を行ってリクエストに対して適切に適合するものを選択する。適合動作のいくつかの実施形態は、図18を参照して以下に説明する。簡単には、1つの実施形態において、「適切な」適合を決定するために評価される変数は、NATタイプ(例えば、「full cone」、「port restricted」、「symmetric」)、接続タイプ(例えば、WiFi、3G、Edge)、ユーザ言語(HTTPリクエストの受諾言語ヘッダーから得る)、及びマッチリクエストの各々の経時を含むことができる。一般に、仲介部1510は、互換性のあるNATタイプ(しかし、以下に説明するようにリレーサービスを使用する場合もある)、同じ接続タイプ、及び同じ言語をもつモバイル装置をマッチしようと試行する。1つの実施形態において、仲介部1510は、マッチリクエストの経時に基づくマッチング要件に対してより自由とすることができる(つまり、古いリクエストにはより自由にマッチング制限を付与できる)。
図16に戻ると、1607において、マッチング決定に続いて、仲介部1510は、図17dに示すように、リクエストテーブルを更新して、マッチが完了したことを示すことができる。更新の一部として、仲介部は、モバイル装置A及びBのリクエストデータを更新することもできる。例えば、1つの実施形態において、仲介部1510は、モバイル装置BのNATトラバース/接続データをモバイル装置Aのリクエストデータの縦列に書き込み、モバイル装置AのNATトラバース/接続データをモバイル装置Bのリクエスト縦列に書き込む。
1608において、ディスパッチャ1501は、リクエストテーブルから読み出してマッチされたリクエストエントリを特定することができる。1つの実施形態において、モバイル装置A及びBがマッチされていることを検出すると、リクエストデータを読み出して(前述のように仲介部が更新)、モバイル装置A及びBに対する通知を生成する。1つの実施形態において、通知は前述の暗号化された「チケット」データ構造であり、各モバイル装置に関するNATトラバース/接続データを含む。前述のように、1つの実施形態において、プッシュ通知サービス1050を使用してこの通知をモバイル装置A及びBにプッシュ配信する。更に、モバイル装置A及びBは、ディスパッチャ1501を定期的にポーリングして、マッチが行われたか否かを決定する。本実施形態において、ポーリング技術は、比較的低速で行って何らかの理由でモバイル装置の1つに上手くプッシュ配信されなかったマッチを特定することができる。ポーリングリクエスト負荷を管理するためにプッシュ通知を用いると、さもなければモバイル装置からのポーリングリクエストに負担をかける、仲介サービス111の負荷が著しく低下する。
1608において判定される同じMSIに関する追加のマッチリクエストが未決定の場合、仲介部は、MSI内のモバイル装置/ユーザのマッチを続けることができる。1610において、仲介部はMSIテーブル1503内のリース値をリセットできる。1611において、追加のマッチが実行されて、リクエストテーブルが更新される(前述のように)。1612において、追加のマッチは、リクエストテーブルから読み出されて追加のモバイル装置が更新される(前述のように)。MSIに関する未決定の追加のマッチリクエストが無い場合、1609において、MSIエントリはMSIテーブルから取り除かれる(例えば、ディスパッチャ及び/又は仲介部のいずれかからの命令を消去することで)。
図18は、モバイル装置/ユーザの間のマッチを行う方法の1つの実施形態を示す(図16の動作1606)。1801において、全ての最新のMSIリクエスト(例えば、特定のアプリケーション/バケット組み合わせに関する)を2つ1ペアに配置する。1802において、各ペアのマッチ「適合」を評価して、1803において、各ペアは、降順適合によってソートする。「適合」は、NATタイプ(例えば、「full cone」、「port restricted」、「symmetric」)、接続タイプ(例えば、WiFi、3G、Edge)、ユーザ言語(HTTPリクエストの受諾言語ヘッダーから得る)、及びマッチリクエストの各々の経時を含むが限定されるものではない、複数の異なる変数に基づいて評価する。仲介判定で考慮できる他の変数としては、各モバイル装置の位置(例えば、特定の位置のユーザにマッチする試行に関する)、最小及び/又は最大プレーヤー要件(例えば、ユーザ及び/又はアプリケーションで規定される)、MSIに含まれる1人又はそれ以上のユーザが「友人」か、又は以前P2P接続に参加したか否か(例えば、マッチする「友人」の好み、又は前回の知人に関する)、及びアプリケーションに対するユーザの経験(例えば、多人数参加型ゲームに関して、各ユーザのリーダーボードランキングは、同じようにマッチする好みをもつに経験のあるユーザのファクタであろう)を挙げることができる。
以下のテーブルAに示すように、1つの実施形態において、「適合度」の評価値は、0.0と1.0との間の数値である。浮動小数点値を使用すると、各基準に関する適合度の正規化が可能になる。浮動小数点演算を防ぐために、適切な評価値に非正規化整数値を使用できるので適合値を比較できる。
1つの実施形態において、全ての基準は、コンパチブルであるか(1.0の正規化値を有している)又はコンパチブルでないか(1.0未満の正規化値を有している)のいずれかである2進適合度を有している。しかし、これらは適合度が経時的に変わる可能性がある(以下に説明する)所要の基準と考えることができる。変数として位置が追加されると、最良適合は所要基準にマッチする最も近いプレーヤーに対するものとなる。
テーブルA
マッチ適合度
1つの実施形態において、適合度は、前記基準の各々に関する(正規化重み付け*経時ファクタ値)の合計である。経時ファクタ値は、値「1」から始まり、所定時間が経過すると増加する。時間の経過と共に継続的に増加することができる(例えば、定期的に所定量だけ増加する)。1つの実施形態において、前述の経時ファクタ値を使用する代わりに、以下に説明するように、経時閾値を設定することができる。接続タイプ及び言語等の所定変数の正規化/重み付けは、前述の所定の経時閾値に加えることができる(マッチしなくても)。
1つの実施形態において、一対のリクエストA及びBの間の「適合度」は、Bに対するAの適合度及びAに対するBも適合度の平均である。更に、各ファクタに関するBに対するAの適合度は、Aの経時に基づいて調整できる(又はその逆)。1つの実施形態において、1.0の適合度は、コンパチブルなマッチに必須である。このことはA及びBが、NAT互換性、接続タイプ、及び言語がマッチする(1.0の正規化値がもたらす)場合にだけ、又はA及び/又はBが、前述のいくつかの変数(例えば、接続タイプ及び言語)が事実上無視されるように(前述の経時ファクタ値又は以下の閾値のいずれかを使用して)経時した場合に、マッチするであろうことを意味する。
テーブルB
経時
経時閾値は、前述のテーブルBに説明するように設定できる。各経時閾値を超えると(つまり、リクエストが特定の閾値よりも古くなる)、経時ファクタ値は逐次的に大きな値に増加する(例えば、1.5、2.0等)。別の方法として又は追加的に、別の経時閾値を超える場合、特定の変数に関する重み付けをマッチング判定に加えることができる(例えば、以下に説明するように接続タイプ及び言語)。
1つの実施形態において、テーブルBで規定するリクエスト経時制限は、マッチ流動率に応じて調整される。1つの実施形態において、流動率は、特定の時間単位毎に行われるマッチの数として規定される(例えば、10秒毎、1分毎)。つまり、流動率は、特定のMSIセットがどれだけビジーであるかの指標である。1つの実施形態において、このセットがビジーであるほど、前述の低い閾値の各々は、前述のテーブルBにおいて早期の良好なマッチの可能性を高めるように設定され、仲介部の負荷を低減するようになっている。更に、所定のMSIセットの負荷はエンドユーザに提供できるので(例えば、数値データにマッチする推定時間の形態で)、エンドユーザは、特にビジーな多人数参加型ゲームに参加しようと試みるか否かを選択できる。負荷値は、ユーザに対してプッシュ通知の形態で提供できる。
テーブルAの各変数を参照すると、1つの実施形態において、NAT互換性は、図14に示すNAT互換性表1400で決定する。この表に基づいて2つのNATの互換性があると判定すると、NAT互換性重み付けを加えることができる。
テーブルC
接続タイプ
接続タイプは、テーブルCに示す表を用いて評価できる。本実施例において、装置A及びBの接続タイプが同じ場合(セル内で1.0で示す)、テーブルAからの重み付けされた接続タイプ値は、適合度判定に含めることができる。前述のように、各リクエストの経時を使用して、接続タイプ判定に影響を与えることができる。例えば、1つの実施形態において、接続タイプの適合値は、閾値1、2、及び3での経時に関するテーブルCの行列を用いて選択する。閾値4又はそれ以上の経時に関して、接続タイプは1.0に設定でき(非マッチング接続タイプであっても)、対応する重み付けされた接続タイプ値を加えることができる。接続「タイプ」が特定の実施形態で使用されるが、接続速度を決定して接続タイプと一緒に、又はその代わりに使用できる。例えば、特定の範囲の各接続速度は「コンパチブル」と見なすことができる(例えば、0−100kbps、100−500kbps、500−1000kbps、1000−1500kbps)。また、本明細書で説明する何らかのマッチング変数は、重み付けとしてマッチ適合演算に加えて、前述のように経時処理することができる。
1つの実施形態において、プレーヤー言語は、優先qファクタと一緒に1つ又はそれ以上の言語を含むHTTPリクエスト受諾言語ヘッダーから得ることができる。ディスパッチャは、最も好ましい言語を抜き出してこの情報を仲介部へ送る。1つの実施形態において、テーブルAからの重み付けされた言語値は、言語が同じ場合には1.0に設定され、同じでない場合は0.0に設定される。しかしながら、1つの実施形態において、重み付けされた言語値は、言語が異なる場合で経時が所定の閾値以上である場合は適用することができる(例えば、テーブルBの経時が閾値2か又はそれ以上の場合)。
1つの実施形態において、マッチは、互換性のないNATタイプの2つのユーザ間で行うことができる。例えば、仲介部が特定のMSIに関してマッチング困難なユーザを有する場合、所定時間後に、前述の技術を使用して、リレーサービス1051経由の接続経路を定めることができる。このような方法で、リレーサービス1051は、互換性のないNATタイプにもかかわらず経時マッチの発生を可能にする圧力バルブとして機能する。また、リレーサービス1051は、1つ又はそれ以上の失敗したマッチ試行の検出に応じて使用できる。本実施形態において、モバイル装置が送出した各マッチリクエストは、1つ又はそれ以上の失敗に終わったマッチが以前に試行されたか否かの表示を含むことができる。
種々の追加のマッチ基準を評価して、例示的かつ非限定的に、マッチをリクエストしている任意のユーザが友人であるか否かの表示を含むマッチ適合判定の一部として重み付け値を提供できる。例えば、仲介部1510は、マッチ適合演算に「友人」重み付けを加えることで、「友人」であるユーザに関する何らかのリクエストにマッチしようと試みることができる。同様に、友人の友人も重み付けすることができる(例えば、2又はそれ以上の分離度で)。更に、特定のゲームに関して、プレーヤーは他のプレーヤーを格付けすることができ、仲介部は、マッチを行う際にこの格付けを評価することができる(ユーザを比較的高い格付けのプレーヤーにマッチし、ユーザを格付けが低いプレーヤーにマッチしない傾向でもって)。更に、ユーザの接続待ち時間を評価して(例えば、簡単なピング動作を使用して)、仲介判定の一部として使用することができる。
プレーヤーをマッチするために使用する更に他の変数は、装置タイプとすることができる。例えば、仲介部1510は、単に装置タイプでプレーヤーをマッチしようと試みることができる(例えば、iPads、iPods、iTouches、iPhones、RIM Blackberries)。追加の変数としては、ユーザのリーダーボードランキング、現在地、現住所、年令、性別を挙げることができ、同じゲームコレクションは、同様にマッチ判定のために評価される(つまり、多くの場合、好みの傾向は、これらにユーザの間で同じ基準でマッチする)。最後に、ペアレンタルコントロールは仲介部1510で評価することができ、ユーザが適切なMSI及び同じ年令の他のユーザにだけマッチすることを保証できる。
仲介サービス111は、データサービス100内で管理される1つ又はそれ以上のデータベースからの前述の任意の変数を読み出すことができる(例えば、図19に関して以下に説明するデータベース1920を参照)。例えば、ユーザの友人データは友人サービスデータベースからアクセスでき、ユーザの年令、性別、ゲームコレクション等の他の情報は、1つ又はそれ以上の他のデータベースからアクセスできる(例えば、ユーザプロファイル、ゲームデータベース、リーダーボードデータベース)。1つの実施形態において、本明細書で説明する全てのサービスは、仲介判定を行うために使用される全ての種々の異なるユーザ/装置タイプを記憶するための同じ中央データベース(又はデータベースグループ)へのアクセスできる。
複数の特定の実施例を説明したが、本発明の基本的原理は、マッチのための適合レベルを決定するための何らかの特定の変数セットに限定されないことを理解されたい。1つの実施形態において、アプリケーションをシステム上で実行されるように設計するアプリケーションプログラマ及び本明細書で説明する方法は、異なるMSI基準を用いてリクエストをマッチングするために及び/又はグループ化するために自身の基準セットを規定できる。
図18の方法に戻ると、各ペアの間のマッチ「適合」が判定されると、1803において、ペアは降順適合でソートする(例えば、適合度が最も高いペアはリストの最上部になる)。1804において「マッチセット」を特定の閾値を超える最も高い適合値をもつペアでシードする。前述のように、「閾値」は、テーブルAに示す1.0の正規化値に設定できる。1805において、新しい見込みのあるパートナーを、マッチセットの中で1人又は全ての現在のメンバに関する、特定の閾値を超える適合値を有するマッチセットに加える。例えば、マッチセットが最初はA及びBでシードされる場合、A−C及び/又はB−Cの適合値が特定の閾値を超える場合にCをマッチセットに加えることができる。1つの実施形態において、単一のマッチ適合が見込みのある相手に関する閾値以上の場合、この相手はマッチセットに加えることができる(つまり、必要であれば、この相手は適切なマッチ適合を有する1人の相手を介して全ての相手と通信することができるはずである)。1人又はそれ以上の新しい相手がマッチセットに追加されると、1806において判定されるマッチに関するサイズ要件を満たす場合、マッチ結果を格納して、1807においてレポートする(例えば、前述のように、リクエストテーブル1502を更新して通知を送信することで)。1つの実施形態において、単一のマッチリクエストは、複数のユーザを示すことがでる(例えば、以下に説明するように、マッチリクエストが招待シーケンスに続く場合)。この場合、サイズ要件は、マッチリクエストが示すユーザ数に基づいて評価される。サイズ要件を満たさない場合、処理は1805に戻り、新しい相手がマッチセットに追加される(つまり、1人又はそれ以上の現在のメンバセットに関する、特定の閾値を超えるマッチ適合を有する相手)。
1808において、マッチしたリクエストを仲介部1510で処理される現在のリクエストセットから取り除く。1809において、次にシードしたマッチセットを選択して、処理は1804に戻り別のマッチングを行う。図18は連続した処理として示すが、本発明の基本的原理に依然として従いながら、複数のシードされたマッチセットを同時に処理することができる。
前記では別個のサービスとして説明するが、仲介サービス111及び招待サービス112は、2Pユーザに接続するために同時に作動することができる。例えば、1つの実施形態において、第1のユーザは、1人又はそれ以上の友人をオンラインセッション招待して、1人又はそれ以上の別のユーザとのマッチをリクエストすることができる(例えば、多人数参加型ゲームに関して、友人「Bob」を招待して、3人の別のプレーヤーをマッチする)。この場合、招待サービス112は、初めに第1のユーザの招待リクエストを処理して、第1のユーザ及び第1のユーザの友人に接続することができる。招待リクエストの結果は(例えば、成功したP2P接続)、ユーザのモバイル装置にレポートを返すことができる。次に、仲介サービス111は、第1のユーザのモバイル装置からの追加のプレーヤーをリクエストするマッチリクエストを受信することができる(又は、1つの実施形態において、招待サービスから直接、又は第1のユーザの友人から)。これに応答して、仲介サービス111は、第1のユーザを第1のユーザのリクエストと同じMSIをもつ1つ又はそれ以上の他のマッチリクエストとマッチすることができる(前述のように)。マッチリクエストは、第1のユーザのマッチ基準だけをもつこと、又は第1のユーザ及び第1のユーザの友人のマッチ基準をもつことができる(例えば、NATタイプ、接続タイプ、言語、位置)。1つの実施形態において、1人又はそれ以上の第1のユーザの友人が他のマッチユーザと直接P2P接続を確立できなかった場合、マッチユーザの第1のユーザの友人との接続は、第1のユーザのデータ処理装置を介して確立することができ(例えば、第1のユーザのモバイル装置を接続のプロキシとして使用して)、及び/又はリレーサービスはユーザを接続するために使用することができる(前述のように)。
1つの実施形態において、第1のユーザは最初に仲介サービスによって1人又はそれ以上のユーザとマッチさせることができ(前述のように)、次に、第1のユーザは1人又はそれ以上の友人を招待して、オンラインセッションに第1のユーザ及びマッチユーザを結び付けることができる。本実施形態において、ユーザの情報及びマッチユーザの情報(例えば、NAT/接続データ、ユーザID、プッシュトークン)は、招待サービスを介して招待ユーザと交換することができる(前述のように)。最初にマッチングが起こり、その後に招待が続くか、又は招待が起こり、その後にマッチングが続くかに関わらず、本発明の基本的原理は変化しない。
共同オンラインアプリケーションに関するアプリケーションプログラミングインタフェースを備えるアプリケーションフレームワーク
図19に示すように、本発明の1つの実施形態は、1つ又はそれ以上のアプリケーション1911とインタフェース接続するアプリケーションプログラミングインタフェース(API)1910及び複数のネットワークサービス1901−1903と通信を行うサービスサイドAPI1913と共に、所定のソフトウェアフレームワーク1912を有するモバイル装置120との関連において実装される。図19に示すように、ネットワークサービス1901−1903は、同じオンラインデータサービス100によってデザイン及び管理することができる(このような機器構成は必須ではないが)。P2Pゲームアプリケーション及び他のタイプの共同オンラインアプリケーション等のアプリケーション1911は、API1910を呼び出すことでAPI1910を介してネットワークサービス1901−1903にアクセスするようにデザインできる。アプリケーション1911のデザインは、フレームワーク1912及びネットワークサービス1901−1903の開発者が提供するソフトウェア開発キット(SDK)を用いて容易にすることができる。フレームワーク1912及びAPI1910、1913の追加の特定の実施例は図20に関連して以下に説明する。
図示のように、各サービスは、サービスが使用するデータを格納するデータベース1920へのアクセスで提供される。1つの特定の実施例は、前述の仲介サービス111が使用するデータベース1512である。他の実施例としては、リーダーボードデータを格納するリーダーボードデータベース、友人ステートレコードを格納する友人サービスデータベース、ユーザプロファイルデータを格納するプロファイルデータベース、及びオンラインゲームに関するデータを格納するゲームデータベースを挙げることができる。任意のタイプのデータベースを使用できるが(例えば、MySQL、Microsoft SQL)、1つの特定の実施形態において、Berkley DB等のKey−Valueデータベース及び/又はMZBasic DBを使用できる。データベースは、ストレージエリアネットワーク(SAN)の多数の大容量記憶装置(例えば、ハードドライブ)又は他の記憶構成機器に分散させることができる。
結果的に、前述のように特定のサービスがデータを処理する及び/又はデータを格納する場合、データは、データベース1920内に格納することができる。しかしながら、特定のサービスはデータベースを使用しない場合がある。例えば、前述のように、招待サービス112は、ステートレスサービスとして実装できるので、データをデータベース1920内に格納することを必要としない場合がある(しかしながら、この実施例は本発明の基本的原理に依然として従うことができる)。
API1913は、ネットワークレイヤのTCP/IP又はUDP/IP、及びアプリケーションレイヤのHTTPSを含む任意の適切なネットワークプロトコルスタックを使用して、ネットワークサービス1901−1903と通信して情報を交換するように設計できる。SOAP等のHTTP又はHTTPS上の遠隔手続呼び出し(RPC)ベースのプロトコルを使用でき、及び/又はRepresentational State Transfer(REST)プロトコルを使用できる。更に、サービスは、例示的に、Unix(登録商標)、Linux(登録商標)、又はApacheソフトウェアプラットフォームで実行されるXserve又は類似のサーバを含む、任意のコンピューティングプラットフォーム上に実装できる。1つの特定の実施形態において、プラットフォームは、Linux(登録商標)に実装されるWebオブジェクトを含む。前述の実施例は例示目的である。本発明の基本的原理は、アプリケーションをサービス又は任意の特定のネットワークプロトコルセットにリンクさせるための特定の機構に限定されない。
図20は、本発明の1つの実施形態の無線装置120に実装できるアプリケーションプログラミングインタフェース(API)2001a−bを含むソフトウェアアーキテクチャの詳細を示す。本実施形態は多人数参加型ゲームフレームワーク2000に関して説明するが、本発明の基本的原理はゲームの実施例に限定されない。例えば、図20に示すソフトウェアアーキテクチャは、ゲーム以外の種々の共同アプリケーションをサポートするために使用できる(例えば、共同チャット、マルチパーティ共同オーディオ/ビデオ)。
図20に示すアーキテクチャにおいて、ゲームフレームワーク2000は、本明細書で説明する種々のマルチパーティ機能及びP2P機能をサポートするために設けられる。1つの実施形態において、ゲームフレームワーク2000は、モバイル装置のオペレーティングシステム2005で実行されるように設計される。例えば、モバイル装置120がPhone、iPad、又はiPod Touchの場合、オペレーティングシステム2005はiPhone OS、つまり本出願人がデザインしたモバイルオペレーティングシステムとすることができる。
ゲームフレームワーク2000は、パブリック・アプリケーションプログラミングインタフェース(API)2001b、及びプライベート又は「セキュア」API2001aを含むことができる。1つの実施形態において、本明細書で説明する種々のゲーム関連機能を提供する油にデザインされたゲームセンタアプリケーション2031は、パブリックAPI2001b及びプライベートAPI2001aの両者を呼び出すことができるが、他のアプリケーション2030(例えば、サードパーティが設計したアプリケーション)は、パブリックAPI2001bだけにアクセスするように設けられる。例えば、モバイル装置120の設計者は、パブリックAPI2001b以外に、サードパーティ開発者の悪用を防止するために、潜在的な極秘情報(例えば、友人リクエスト、友人リスト)を含む特定のAPI機能を保持したいと考える場合がある。しかしながら、セキュアAPI2001a及びパブリックAPI2001bの両者は、モバイル装置の全てのアプリケーションがアクセス可能な単一のAPIに統合することができる(つまり、本発明の基本的原理に従うために、APIを別個のパブリック及びプライベート構成要素に分離する必要はない)。「API2001」の表示は、以下ではパブリックAPI2001b及び/又はプライベートAPI2001aのいずれかに見出すことができる作動を呼ぶ場合がある。
ゲームセンタアプリケーション2031の1つの実施形態は、同時継続出願の2010年4月17日出願の米国出願番号61/321,861「ゲームセンタを提供するシステム及び方法」(代理人整理番号:4860.P9127USP1)に説明されており、発明者はMarcel Van Os及びMike Lampellであり、本出願人に譲渡され、参照によって本明細書に組み込まれている(以下、「ゲームセンタの特許出願」と呼ぶ)。簡単には、ゲームセンタアプリケーション2031は、多人数参加型ゲームを検索し、新しいゲームを購入し、ゲームに関する情報を読み出し(例えば、リーダーボード情報、アチーブメント、友人情報)、ゲームを行うために友人とコンタクトし、他のユーザとのゲームマッチをリクエストし、及び特定のユーザを招待するためのゲーム中心のグラフィカルユーザインタフェース(GUI)を含む。ゲームセンタアプリケーション2031が実行する種々の他の機能は、前述のゲームセンタの特許出願に開示されている。いくつかのゲームセンタ機能は、ゲームフレームワーク2000が提供し、パブリックAPI2001bを介して他のアプリケーション2030がアクセスできる。
1つの実施形態において、ゲームフレームワーク2000が公開するAPI2001は、モバイル装置120に関しての多人数参加型ゲームをデザインするプロセスを単純化する。詳細には、1つの実施形態において、API2001により、開発者は、単純なAPI呼び出しを行って、ユーザを多人数参加型P2Pゲームセッションに接続する比較的複雑なプロセスを呼び出すことができる。例えば、招待(プレーヤーB ID、バケットID)等の単純なAPI呼び出しは、API2001から呼び出して前述の詳細なINVITEシーケンスを起動することができる。同様に、MATCH(プレーヤーA ID、バケットID)等のAPI呼び出しは、API2001から呼び出して前述の仲介シーケンスを起動することができる。INVITE及びMATCH機能は、本明細書では「P2P接続機能」と呼ぶ場合もある。1つの実施形態において、ゲームフレームワーク2000は、API呼び出しに応答して招待及び仲介動作を管理するのに必要なプログラムコードを含む(以下に詳細に説明するように)。実際のAPI機能は前述とは多少異なるデータ形式をもつ場合があることに留意されたい(しかし、ゲームフレームワーク2000で実行されるのと同じ動作をもたらすことができる)。本発明の基本的原理は、API機能を規定するための何らかの特定の形式に限定されない)
また、種々の他のタイプのゲーム関連トランザクション及び情報は、ゲームセンタ2031及び他のアプリケーション2030の代わりに、ゲームフレームワーク2000で管理できる。この情報のいくつかはゲームセンタの特許出願に開示されている。例示的かつ非限定的に、この情報は、各ゲームのトップスコアを達成したユーザに関する「リーダーボード」情報、及び特定のゲーム固有アチーブメントを達成したユーザを特定する「アチーブメント」情報を含むことができる。各アプリケーション開発者は、各ゲームアプリケーション2030に関する自身の「アチーブメント」セットを規定できる(例えば、レベル1−3を達成、レベル1を5分以内に達成、レベル毎に50以上を仕留めた、20フラグを倒した)。
また、ゲームフレームワーク2000は、ユーザの友人データを管理して、友人データをゲームセンタ2031内及び他のゲームアプリケーション2030内に統合するためのプログラムコードを含むことができる。例えば、ユーザがゲームセンタ2031内の特定のゲームへのリンクを選択する場合、ユーザの友人の各々に関連する情報は、そのゲームに表示することができる(例えば、友人のリーダーボード上の順位、友人のアチーブメント、ユーザが彼/彼女の友人とゲームをした時の結果)。1つの実施形態において、ゲームフレームワーク2000のAPI2001は、友人サービスが管理する友人データにアクセスする機能を含み、このことは、同時継続出願の2010年4月17日出願の米国出願番号61/321,848「ソーシャルネットワーキングサービスのデータを効率的に管理するための装置及び方法」(代理人整理番号:4860.P9240)に説明されており、発明者はAmol Pattekar、Jeremy Werner、Patrick Gates、及びAndrew H. Vyrrosであり、本出願人に譲渡され、参照によって本明細書に組み込まれている(以下、「友人サービスの出願」と呼ぶ)。
図20に示すように、1つの実施形態において、ゲームデーモン2020は、ゲームフレームワーク2000をサービス2050の第1のセットにインタフェース接続することができ、ゲームサービスコンポーネント2010は、ゲームフレームワーク2000をサービス2051の第2のセットにインタフェース接続することができる。例示的に、サービス2050の第1のセットは、招待サービス112、仲介サービス111、及び前述のリレーサービス1051及びに前記友人サービスアプリケーションに説明する友人サービスを含むことができる。ゲームデーモン2020がアクセス可能な他のサービスとしては、リーダーボードサービス(リーダーボードデータを提供する)、ゲームサービス(各ゲーム及びゲームを購入する能力に関連する統計データ及び他のデータを提供する)、ユーザ認証サービス(モバイル装置のユーザを認証するため)、及び/又はユーザプロファイルサービス(ユーザ嗜好等のユーザプロファイルデータを記憶するため)を挙げることができる。ゲームサービスコンポーネント2010によりアクセスするサービス2051の第2のセットは、前述の接続データ交換(CDX)サービス110及びNATトラバースサービス290−291を含むことができる。図20では例示的に別個のコンポーネントが示されているが、ゲームデーモン2020及びゲームサービスモジュール2010は、実際にはゲームフレームワーク2000のコンポーネントとすることができる。1つの実施形態において、ゲームデーモン2020及び2010は、1つの実施形態において、プライベートAPIである(つまり、サードパーティ開発者には公開されていない)、所定のAPIを経由して各ネットワークサービス2050−2051と通信できる。
1つの実施形態において、ゲームデーモン2020は、HTTPSプロトコルを使用して仲介サービス111、招待サービス112、及び他のサービス2050と通信できるが、ゲームサービスモジュール2010は、UDPソケット等の比較的軽量なプロトコルを使用してCDXサービス110及びNATトラバースサービス290−291と通信できる。しかしながら、前述のように、本発明の基本的原理に依然として従いながら種々の他のネットワークプロトコルを使用できる。
更に、図20に示すように、ゲームデーモン2020は、特定のサービス2052が生成したプッシュ通知2052を受信できるが(例えば、招待サービス及び仲介サービス)、プッシュ通知2053の他のタイプをゲームセンタで直接受信することができる(例えば、新しい友人リクエスト等の友人サービス通知)。1つの実施形態において、これらのプッシュ通知2053は、ゲームセンタ2031に直接供給して、サードパーティのアプリケーション開発者がデザインしたアプリケーション2030ではユーザの極秘データにアクセスできないようにすることができる。
図11に説明するゲーム招待の実施例に戻ると、モバイル装置Aのアプリケーション2030は、ゲームフレームワーク2000のAPI2001bに対して招待呼び出しを行ってモバイル装置Bのユーザを招待し(例えば、INVITE(プレーヤーB ID、ゲーム/バケットID))、ゲームフレームワーク2000は、招待リクエストをモバイル装置Aのゲームデーモン2020に送ることができる。次に、ゲームデーモン2020は、招待サービス112と通信して招待リクエストを送出することができる。次に、招待サービス112は、プッシュ通知サービス1050を使用して(前述のように)、招待リクエストをモバイル装置Bのゲームデーモン2020にプッシュ配信することができる。次に、モバイル装置Bのゲームデーモン2020は、モバイル装置Bのゲームフレームワーク2000と通信して、招待リクエストが送信されたゲームがモバイル装置Bにインストールされているか否かを判定する。インストールされている場合、ゲームフレームワーク2000は、アプリケーション2030をトリガすること及び/又は招待リクエストの可視通知を生成することができる。アプリケーションがインストールされていない場合、ゲームフレームワーク2000は、モバイル装置Bのユーザに対するゲームを購入する提案と共に招待リクエストの可視通知をトリガすることができる(例えば、ゲームセンタ2031 GUIによって)。もしくは、可視通知は、モバイル装置120で実行されるプッシュ通知デーモンで生成することができる(図示せず)。モバイル装置Bのユーザがゲームを購入すると、招待シーケンスは次に進むことができる。モバイル装置Bのユーザが招待リクエストを受諾すると、次に、モバイル装置Bのゲームフレームワーク2000は、招待リクエストを自身のゲームデーモン2020に送り、次に、ゲームデーモン2020は、招待サービス112に応答することができる。
図11に戻ると、互換性チェック1106は、モバイル装置A及びBのNATタイプに互換性があるか否かを判定する。つまり、1108において、モバイル装置Aのゲームデーモン2020はモバイル装置Bの受諾情報を受信することができ(例えば、プッシュ通知により)、1つの実施形態において、受諾情報をゲームフレームワーク2000に送ることができる。この段階で、モバイル装置Aのゲームフレームワーク2000は、リクエスト中のアプリケーション2030にモバイル装置Bが受諾したことを通知すること(API2001によって)又はリクエスト中のアプリケーション2030に装置が上手く接続されるまで通知を待つことができる。いずれの場合も、ゲームフレームワーク2000は、接続リクエストをゲームサービスモジュール2010に送ることができ、1つの実施形態において、ゲームサービスモジュール2010はモバイル装置Bとの接続データ交換を開始できる。特に、ゲームサービスモジュールは、CDXサービス110を使用して、モバイル装置Aの接続データをモバイル装置Bに送信することができる(例えば、図11のトランザクション1111及び1112を参照)。前述のように、この通信は、セキュア「チケット」データ構造を使用してUDP接続として実施できる。
図12に戻ると、互換性チェック1106がモバイル装置A及びBのNATタイプに互換性がないと判定した場合、リレーサービス1051を使用して各装置間の接続を行うことができる。結果的に、モバイル装置Bのゲームデーモン2020は、招待サービス(図12に示す)からリレーレスポンス1203を受信することができ、モバイル装置Aのゲームデーモン2020は、招待サービスからリレーレスポンス1205を受信することができる(プッシュ通知サービス1050によって)。モバイル装置A及びBの各ゲームデーモン2020は、1206及び1207においてリレーサービスと通信して機器構成データを読み出すことができる。1210において、モバイル装置Bのゲームデーモン2020は、モバイル装置Aからリレーアップデートデータを受信し、1213において、モバイル装置Aのゲームデーモン2020は、モバイル装置Bからリレーアップデートを受信する。
図11及び12に示す処理の最終結果は、モバイル装置A及びBの相互接続の確立である(直接P2P接続又はリレー接続)。1つの実施形態において、成功裏の接続を検出すると、ゲームフレームワーク2000は、接続をリクエストしたアプリケーション2030にAPI呼び出しを用いて通知することができる(例えば、CONNECTED(プレーヤーA ID、プレーヤーB ID))。次に、モバイル装置A及びBは、確立した接続を用いて特定のゲーム又は他の共同アプリケーション2030を行うことができる。
つまり、API2001からの比較的単純な呼び出しに応答して(例えば、INVITE(プレーヤーB ID、ゲーム/バケット ID)、複雑な一連のトランザクションをゲームフレームワーク2000で管理してモバイル装置A及びBの間のP2P又はリレー接続を確立することができる。1つの実施形態において、ゲームフレームワーク2000は、モバイル装置A及びBを接続する動作シーケンスを実行し、次に、その結果をリクエスト中のアプリケーション2030に提供することができるので、API呼び出しの詳細をアプリケーション設計者に透過的なままにしておくことができる。従って、アプリケーション設計者は、ネットワーク上のモバイル装置A及びBを接続する方法を理解する必要がなく、又は装置間の通信を確立するのに必要な種々の他の機能を実行する必要がない。
同様に、ゲームフレームワーク2000は、図2a−bに関して説明したように、仲介サービス111を使用してモバイル装置Aと他の参加者との間のマッチングを確立することができる。本実施例の場合、アプリケーション2030は、API2001に対して単純な呼び出しを行うことができるMATCH(プレーヤーA ID、ゲーム/バンドルID)。これに応答して、ゲームフレームワーク2000は、マッチング及び接続データ交換動作を管理することができる。マッチング動作及び/又はP2P接続が完了すると、ゲームフレームワーク2000は、その結果をアプリケーション2030に戻す。
例えば、図2bにおいて、ゲームフレームワーク2000は、ゲームサービスモジュール2010を使用して接続データ交換(CDX)サービス110及びNATトラバースサービス290−291と通信することができ、更に、ゲームデーモンを使用して仲介サービス111と通信することができる。マッチングが行われると、モバイル装置Aのゲームデーモン2020は、229においてチケットAを受信し、ゲームフレームワーク2000はこの情報を使用して、ゲームサービスモジュール2010を介して接続データ交換を実行する。例えば、232において、NATトラバースサービス290を介して自身の接続データをリクエストして、233−234において、CDXサービス110を介してその接続データを交換することができる。237及び240において、モバイル装置Aのゲームサービスモジュール2010は、それぞれモバイル装置B及びCに関する接続データを受信する。この交換に続いて、ゲームサービスモジュール2010は、241においてP2P接続を確立し、ゲームフレームワーク2000は、アプリケーション2030にAPI通知を用いて接続処理が完了したという通知を行う(例えば、MATCH COMPLETE(プレーヤーB ID、プレーヤーC ID))。次に、アプリケーションは確立されたP2P接続を用いて実行される。
特定の実施形態において、ユーザは、現在「オンライン」の他の友人とゲームをすることを選択できる。この場合、特定の友人がオンラインであるという通知をプッシュ通知2052又はプッシュ通知2053で提供できる(ゲームセンタ2031から直接受信)。次に、ゲームセンタ2031及び/又はアプリケーション2030はこの通知をユーザに提供すること、及びユーザに1人又はそれ以上の選択したオンラインの友人とゲームをするための選択肢を与えることができる。しかしながら、本明細書で説明する招待シーケンスは、オンライン通知が提供されるか否かに関わらず機能できることに留意されたい。1つの実施形態において、ユーザのオンライン状態は、ゲームデーモン2020がアクセス可能なサービスによって監視できる(例えば、前述の友人サービス又は独立した「プレゼンス」サービス)。
ゲームフレームワーク2000の1つの実施形態は、ユーザが1人又はそれ以上の 友人を招待して未知のマッチした参加者のグループとゲームできる、組み合わせ招待/仲介動作を提供する。例えば、ゲームが4人プレーヤーを必要とし、第1のユーザが第2のユーザを招待してゲームを行う場合、招待サービス112は、最初は第1のユーザと第2のユーザを接続することができ、次に、仲介サービス111は、第1のユーザ及び第2のユーザを2人の(又はそれ以上の)他のプレーヤーとマッチすることができる。本実施形態において、ゲームフレームワーク2000は、最初は前述の招待シーケンスを実行して第1のユーザ及び第2のユーザを接続するようになっている。1つの実施形態において、第1のユーザ及び第2のユーザを上手く接続すると、ゲームフレームワーク2000は、仲介シーケンスを実施して、他のユーザを特定してこのユーザと接続させることができる。前述のように、1つの実施形態において、仲介サービスが適用するマッチ基準は、第1及び第2のユーザを含むことができる(例えば、第1及び第2のユーザの両者のNATタイプ、接続タイプ、言語)。もしくは、2人のユーザの一方の基準を評価して仲介判定を行うことができる。
全てのユーザが接続されると、ゲームフレームワーク2000は、API2001を介して、接続結果を、接続をリクエストしたアプリケーション2030に提供することができる。再度、アプリケーション2030による比較的単純なAPI呼び出しに応答して、ゲームフレームワーク2000は、複雑なトランザクションセットに入って装置の各々を接続する。各装置が上手く接続されると、ゲームフレームワーク2000は、その結果をリクエスト中のアプリケーション2030に戻す。
図20に示すように、ゲームフレームワーク2000は、ユーザと他のゲーム参加者との間の通信を一次的に記憶する通信バッファ2003を含むことができる。通信は、例えば、テキスト、オーディオ、及び/又はビデオ通信を含むことができる。ゲームフレームワーク2000は、各アプリケーション2030の要求に基づいてバッファ2003を確立できる。例えば、低速ネットワーク接続のオーディオ/ビデオ通信には比較的大きなバッファ2003が必要である。1つの実施形態において、各アプリケーション2030は、API2001を介して、明示的リクエストを行って所定サイズの通信バッファを確立することができる(例えば、BUFFER(サイズ)コマンドを用いて)。もしくは、ゲームフレームワーク2000は、各アプリケーションの通信要件に基づいてバッファを自動的に生成することができる。例えば、ゲームフレームワーク2000は、テキスト、オーディオ、及び/又はビデオをサポートする必要があるか否かに基づいて、特定のバッファサイズを選択することができる。
1つの実施形態において、通信バッファ2003は、各ユーザ間で全てのP2P接続が確立される前に、通信ストリームを一時的に記憶することができる。例えば、招待サービス112又は仲介サービス111がユーザの各々を特定した後であるがCDXサービス110が接続データ交換動作を完了する前に、各ユーザは、他のゲーム参加者が接続処理中であることを通知される。この段階で、モバイル装置120のユーザは、他の参加者にテキスト、オーディオ、及び/又はビデオ通信ストリームを送信することができる。ゲームフレームワーク2000は、未接続の参加者に関する通信ストリームを通信バッファ2003内に記憶することができる。次に、ゲームフレームワーク2000は、接続が完了するとテキスト、オーディオ、及び/又はビデオをバッファ2003から送信することができる。
1つの実施形態において、ゲームデーモン2020は、サービス2050の各々に存続するデータをキャッシュしてネットワークトラフィックを低減するためのキャッシュ2021を含む。例えば、ユーザの友人リスト、リーダーボードデータ、アチーブメントデータ、プレゼンスデータ、及びプロファイルデータは、キャッシュ管理ポリシーの規定に従ってキャッシュ2021に格納できる。1つの実施形態において、キャッシュ管理ポリシーは、データが格納される個々のサービスで決定される。結果的にnの異なるサービスに関して、キャッシュ2021に対してnの異なるキャッシュ管理ポリシーを適用できる。更に、キャッシュ管理ポリシーは各サービスで決定できるので、現在のネットワーク及び/又はサーバ負荷状况に基づいて動的に変更できる。例えば、サービスが高負荷の期間では(例えば、クリスマス、新製品リリース日)、サービスは、キャッシュ管理ポリシーを動的に規定してキャッシュの更新を低頻度にすることができる(例えば、12時間毎に更新する)。対照的に、サービスの負荷が高くない期間では、サービスは、キャッシュ更新を頻繁に行うキャッシュポリシーを規定できる(例えば、半時間毎、1時間毎、2時間毎に更新する)。
1つの実施形態において、キャッシュ管理ポリシーは、キャッシュ2021に格納される特定のデータレコードに関する有効期限(TTL)値を用いて規定できる。TTL値が過ぎたデータレコードがキャッシュに格納されている場合、このデータは「陳腐化」していると見なされて、このデータに関するローカルリクエストは、このデータに関連するサービスに直接送ることができる。1つの実施形態において、リクエストは、データの最新バージョンを特定するIDコードを含む。IDコードがサービスのIDコードと一致する場合、データは依然として有効であり、更新する必要はない。次に、キャッシュのデータが最新であることを示す応答をサービスから返送することができ、データレコードのTTL値をリセットすることができる。
前述のようにキャッシュ管理ポリシーを使うことに加えて、1つの実施形態において、特定のデータタイプに関するキャッシュ更新値は、プッシュ通知サービス1050を用いてモバイル装置にプッシュ配信することができる。例えば、ユーザの友人リストへの変更、又はユーザの友人の現在のオンライン状態への変更は、ユーザのモバイル装置120へ動的にプッシュ配信することができる。プッシュ通知はゲームデーモン2020で受信でき、ゲームデーモン2020は、キャッシュ2021を更新して、サービスがキャッシュ配信したデータの関連部分を含めることができる(つまり、サービスに関連するキャッシュ内の全てのデータの更新は必須ではない場合がある)。対照的に、いくつかのプッシュ通知は、ゲームデーモン2020に対してキャッシュの全てのコンテンツを上書きするように指示できる(又は、プッシュ配信を行うサービスに関連するキャッシュの少なくとも一部)。
キャッシュ2021を更新するためにプッシュ配信を利用するこれらのサービスは、通知をプッシュ配信してキャッシュ2021に格納されたデータを更新することができるので、比較的大きなTTL値を選択することができる(及び/又は、TTL値を設定できない)。1つの実施形態において、各サービスは、プッシュ通知キャッシュ更新をトリガできるイベントセットを規定する。例えば、キャッシュ更新イベントは、友人のオンライン状態への変化、新しい友人リクエスト、友人リクエストの受諾、友人削除操作、友人が特定のゲームを行っていることの表示、友人が到達したゲームアチーブメント、特定のリーダーボードのトップ10の更新、又はキャッシュ更新を許可するために重要になると思われる何らかの他のイベントを含むことができる。キャッシュ2021を更新するためにプッシュ通知するこの方法では、プッシュ配信による更新によって、モバイル装置とサービスとの間の定期的なポーリングを必要としないので、ネットワーク及びサービス負荷が低減する。
ゲームフレームワーク2000の1つの実施形態は、ユーザの国及び/又は地理的位置に基づいてエンドユーザに表示されるデータを一意的にフォーマットする。例えば、現在の日付、時間、及び通貨の値は、異なる国及び位置のユーザに対して異なるように表示される。例示的に、米国では、日付形式は、「月、日、年」(例えば、April 25,2010)とすることができるが、他の国では日付形式は「日、月、年」(例えば、25 April,2010)とすることができる。同様に、米国及びいくつかの他の国で時間を表示する場合、AM/PM表記を使用でき、時と分の間にコロンを使用できる(例えば、3:00PM)。対照的に、他の多くの国ではAM/PM表記を使用せず及び/又は時と分の間にカンマを使用する(例えば、15,00)。他の実施例として、世界の大部分ではメートル制を採用しているが一部では採用していない(例えば、米国)。これらは単純な例示であり本発明の特定の実施形態で使用できることに留意されたい。本発明の基本的原理は、何らかの特定のデータ形式に限定されない。
1つの実施形態において、これらの異なるデータ形式は、リーダーボードデータ、アチーブメントデータ、友人データ、及び/又はゲームフレームワーク2000が処理する何らかの他のデータを表示する場合に選択できる。ゲームフレームワーク2000は、ユーザの国及び/又は地理的位置を種々の方法で決定できる。例えば、1つの実施形態において、この情報は、単純にユーザのプロファイルデータで提供され、及び/又はユーザの携帯電話サービスプロバイダに基づいて決定することができる。また、ユーザの位置は、例えば、Global Positioning System(GPS)追尾を使用して決定できる。
また、地理的位置及び/又は国に関係のない他のデータ形式もゲームフレームワーク2000で管理できる。例えば、リーダーボードデータを表示する場合、することは重要である。最低スコアはユーザをリーダーボードの最上位に又最下位に位置づけるかを知ることは重要である。いくつかのゲームに関して(例えば、ゴルフ、トラック競技、競争、スキー)、低いスコアは優れた成績を示すが、他のゲームでは(例えば、サッカー、野球)、高いスコアは優れた成績を示す。つまり、1つの実施形態において、アプリケーション2030は、API2001で使用することになるスコアのタイプを規定する。(例えば、「昇順」又は「降順」)。次に、ゲームフレームワーク2000は適切なラベルセットを使用してスコアを表示するために書式設定することができる。
また、ゲームフレームワーク20001つの実施形態は、ユーザとユーザの友人との間の関係に基づいてユーザデータをフィルタ処理する。例えば、本発明の1つの実施形態は、「詳細」表示、「友人」表示、及び「パブリック」表示を行うことができる。1つの実施形態において、詳細表示はデータを所有するユーザが利用でき(つまり、ユーザの個人情報)、友人表示はユーザの友人が利用でき、及びパブリック表示は、全ての他のユーザが利用できる。
例示的に、パブリック表示は、単に各ユーザの「別名」、別名で行われたゲーム及び関連のスコア、及びゲームが行われ日付/時間を含むことがでる。この情報は、ゲームフレームワーク2000が使用してパブリックリーダーボードに追加するようになっており、その後、ゲームセンタ2031で表示できる。
友人表示は、全体表示からの全ての情報、並びにユーザの友人の間で共有される任意の追加情報を含むことができ、例えば、ユーザが所有するゲーム、ユーザが行ったゲーム、ユーザのアチーブメント及びスコア、ユーザの友人数、これらの友人の識別、ユーザのアバターを特定するURL、及び/又はユーザのオンライン状態等を挙げることができる。1つの実施形態において、「友人」表示は、各友人が共有することになるデフォルト設定情報セットを提供するが、エンドユーザは、このデフォルト設定を調整して、個々の友人又は友人グループが共有する情報タイプを詳細に規定することができる(例えば、仕事仲間、家族の一員、大学/高校の友人)。
「詳細」表示は、「パブリック」及び「友人」表示からの全ての情報、並びにエンドユーザの代わりに種々のサービス2050が管理する何らかの他の情報を含むことができる。例示的に、これは、全てのユーザのプロファイルデータ、ユーザのUniversally Unique Identifier(UUID)(本明細書では「プレーヤーID」と呼ぶ場合もある)、プレーヤー名、別名、ゲーム数及びゲーム識別、ユーザの友人、全てのユーザのアチーブメント等を含むことができる。
状况次第では、アプリケーション2030は、各ユーザのプレーヤーID等の各ユーザに関する僅かな情報だけを必要とすることができる。例えば、1つの実施形態において、マッチがリクエストされると、ゲームフレームワーク2000は、最初に各プレーヤーのIDだけを必要とする。前述の仲介サービスがマッチを行うと、ゲームフレームワーク2000は、任意のマッチユーザが友人か否かを決定できる(例えば、友人サービスとの通信で、及び/又はユーザのローカル友人データを調べることで)。友人の場合は、ゲームフレームワーク2000は、追加のユーザデータを読み出してこのデータを任意のマッチした友人に提供することができる。この方法で、ゲームフレームワーク2000は、ユーザの識別及び各ユーザの間の関係性に基づいて情報をフィルタ処理する。
1つの実施形態において、ゲームフレームワーク2000は、2人のユーザが友人関係にない場合には、最初に第1のユーザと第2のユーザとの間のパブリック表示を与える。しかしながら、1つの実施形態において、ゲームフレームワーク2000により、第1のユーザは、友人リクエストを第2のユーザに送ることができる(例えば、第2のユーザの別名を使用して)。友人リクエストが受諾されると、ゲームフレームワーク2000は、追加の情報を各ユーザに提供することになる(例えば、デフォルト「友人」表示)。
別のAPIの実施形態
1つの実施形態おいて実施されるAPIは、ソフトウェアコンポーネントで実装されるインタフェースであり(以下「API実装ソフトウェアコンポーネント」と呼ぶ)、これにより異なるソフトウェアコンポーネント(以下「API呼び出しソフトウェアコンポーネント」と呼ぶ)は、1つ又はそれ以上の機能、方法、手順、データ構造、及び/又はAPI実装ソフトウェアコンポーネントが提供する他のサービスにアクセスして使用することができる。例えば、APIにより、API呼び出しソフトウェアコンポーネントの開発者は(サードパーティ開発者とすることができる)、API実装ソフトウェアコンポーネントが提供する特定機能を活用することができる。1つ又はそれ以上のAPI呼び出しソフトウェアコンポーネントが存在可能である。APIは、ソフトウェアアプリケーションからのサービスに関するリクエストをサポートするためにコンピュータシステム又はプログラムライブラリが提供する、ソースコードインタフェースとすることができる。APIは、プログラミング言語を用いて規定することができ、どのようにデータをメモリにレイアウトするかの 明示的な低レベル記述ではなく、アプリケーションが構築されると解釈的とすること又はコンパイルすることができる。
APIは、API呼び出しソフトウェアコンポーネントがAPI実装ソフトウェアコンポーネントの特定の機能にアクセスして使用する場合に使用する、言語及びパラメータを規定する。例えば、API呼び出しソフトウェアコンポーネントは、1つ又はそれ以上のAPI呼び出しにより(機能又は方法呼び出しと称する場合もある)、APIが公開するAPI実装ソフトウェアコンポーネントの特定の機能にアクセスする。API実装ソフトウェアコンポーネントは、API呼び出しソフトウェアコンポーネントからのAPI呼び出しに応答して、APIを介して値を戻すことができる。APIは、API呼び出しの構文及び結果を規定するが(例えば、API呼び出しを呼び出す方法及びAPI呼び出しが行う何か)、一般に、APIは、API呼び出しがAPI呼び出しで規定される機能を実現する方法を明示しない。種々の機能呼び出し又はメッセージは、1つ又はそれ以上のアプリケーションプログラミングインタフェースによって、呼び出しソフトウェア(API呼び出しソフトウェアコンポーネント)とAPI実装ソフトウェアコンポーネントとの間で転送される。機能呼び出しの転送は、送出、起動、実行、呼び出し、受信、返信、機能呼び出し又はメッセージに対する応答を含む。従って、API呼び出しソフトウェアコンポーネントは呼び出しを転送することができ、API実装ソフトウェアコンポーネントは呼び出しを転送することができる。
例示的に、API実装ソフトウェアコンポーネント2010及びAPI呼び出しソフトウェアコンポーネントは、オペレーティングシステム、ライブラリ、デバイスドライバ、API、アプリケーションプログラム、他のソフトウェアモジュールとすることができる(API実装ソフトウェアコンポーネント及びAPI呼び出しソフトウェアコンポーネントは、互いに同じ又は異なるタイプのソフトウェアモジュールにできることを理解されたい)。API呼び出しソフトウェアコンポーネントは、ローカルソフトウェアコンポーネントとすること(つまり、API実装ソフトウェアコンポーネントとして同じデータ処理システム上で)、又はネットワーク上でAPIを介してAPI実装ソフトウェアコンポーネントと通信するリモートソフトウェアコンポーネントとすることができる(つまり、API実装ソフトウェアコンポーネントとして異なるデータ処理システム上で)。API実装ソフトウェアコンポーネントは、API呼び出しソフトウェアコンポーネントとしても機能できること(つまり、異なるAPI実装ソフトウェアコンポーネント公開するAPIに対してAPI呼び出しを行うことができる)、及びAPI呼び出しソフトウェアコンポーネントは、異なるAPI呼び出しソフトウェアコンポーネントに対して公開されたAPIを実装することで、API実装ソフトウェアコンポーネントとしても機能できることを理解されたい。
APIにより、複数のプログラミング言語で記述された複数のAPI呼び出しソフトウェアコンポーネントはAPI実装ソフトウェアコンポーネントと通信することができる(つまり、APIは、API実装ソフトウェアコンポーネントとAPI呼び出しソフトウェアコンポーネントとの間のコール及びリターンを翻訳する機能を含むことができる)。しかしながら、APIは、特定のプログラミング言語を用いて実行することができる。
図21は、API2120を実装するAPI実装ソフトウェアコンポーネント2110(例えば、オペレーティングシステム、ライブラリ、デバイスドライバ、API、アプリケーションプログラム、又は他のソフトウェアモジュール)を含むAPIアーキテクチャの1つの実施形態を示す。API2120は、1つ又はそれ以上の機能、方法、クラス、オブジェクト、プロトコル、データ構造、フォーマット、及び/又はAPI呼び出しソフトウェアコンポーネント2130が使用できるAPI実装ソフトウェアコンポーネントの他の機能を特定する。API2120は、API実装ソフトウェアコンポーネントの機能がAPI呼び出しソフトウェアコンポーネントからパラメータを受信する方法、及びこの機能が結果をAPI呼び出しソフトウェアコンポーネントに返信する方法を規定する、少なくとも1つの呼び出し規則を規定できる。API呼び出しソフトウェアコンポーネント2130は(例えば、オペレーティングシステム、ライブラリ、デバイスドライバ、API、アプリケーションプログラム、又は他のソフトウェアモジュール)、API2120を介してAPI呼び出しを行い、API2120で規定されるAPI実装ソフトウェアコンポーネント 2110の機能を使用する。API実装ソフトウェアコンポーネント2110は、API呼び出しに応答して、API2120を介してAPI呼び出しソフトウェアコンポーネント2130に値を戻すことができる。
API実装ソフトウェアコンポーネント2110は、追加の機能、方法、クラス、データ構造及び/又はAPI2120で規定されずAPI呼び出しソフトウェアコンポーネント2130が利用できない他の機能を含み得ることを理解されたい。API呼び出しソフトウェアコンポーネント2130は、API実装ソフトウェアコンポーネント2110と同じシステム上にあることができること、又は遠く離れて配置されてネットワーク上でAPI2120を使用してAPI実装ソフトウェアコンポーネント2110にアクセスすることができることを理解されたい。図21はAPI2120と対話する単一のAPI呼び出しソフトウェアコンポーネント2130を示すが、API呼び出しソフトウェアコンポーネント2130とは異なる言語(又は同じ言語)で記述することができる他のAPI呼び出しソフトウェアコンポーネントは、API2120を使用できることを理解されたい。
API実装ソフトウェアコンポーネント2110、API2120、及びAPI呼び出しソフトウェアコンポーネント2130は、コンピュータ(例えば、コンピュータ又は他のデータ処理システム)が可読の形態で情報を記憶する何らかの機構を有するコンピュータ可読媒体に記憶できる。例えば、コンピュータ可読媒体は、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリーメモリ、フラッシュメモリデバイス等を含む。
図22において、例示的な実施形態(ソフトウェアスタック)のアプリケーションは、サービスAPIを用いてサービス1又は2を呼び出すこと、及び複数のOS APIを用いてオペレーティングシステム(OS)を呼び出すことができる。サービス1及び2は、複数のOS APIを用いてOSを呼び出すことができる。
サービス2は2つのAPIを備え、一方は(サービス2 API 1)は、アプリケーション1から呼び出しを受信してこれに値を戻し、他方は(サービス2 API 2)は、アプリケーション2から呼び出しを受信してこれに値を戻す。サービス1(これは、例えばソフトウェアライブラリとすることができる)は、OS API 1を呼び出して戻り値を受信し、サービス2(これは、例えばソフトウェアライブラリとすることができる)は、OS API 1及びOS API 2を呼び出して戻り値を受信する。アプリケーション2は、OS API 2を呼び出して戻り値を受信する。
例示的なデータ処理装置
図23は、本発明の特定の実施形態で使用できる例示的なコンピュータシステムを示すブロック図である。図23はコンピュータシステムの種々のコンポーネントを示すが、各コンポーネントを相互接続する何らかの特定のアーキテクチャ又は方法を示すことは意図されておらず、詳細事項は本発明とは密接な関係がないことを理解されたい。本発明ではより少ないコンポーネント又はより多くのコンポーネントを有する他のコンピュータシステムを使用できることを理解されたい。
図23に示すように、データ処理システムの形態のコンピュータシステム2300は、処理システム2320、電源2325、メモリ2330、及び不揮発性メモリ2340(例えば、ハードドライブ、フラッシュメモリ、相変化メモリ(PCM))に接続されるバス2350を含む。バス2350は、従来から知られている種々のブリッジ、コントローラ、及び/又はアダプタを介して相互に接続できる。処理システム2320は、命令をメモリ2330及び/又は不揮発性メモリ2340から呼び出して、この命令を実行して前述の動作を行うことができる。バス2350は前述のコンポーネントを相互接続し、また、これらのコンポーネントを随意的なドック2360、表示コントローラ及び表示装置2370、入力/出力デバイス2380(例えば、NIC(Network Interface Card)、カーソル制御部(例えば、マウス、タッチスクリーン、タッチパッド)、キーボード)、及び随意的な無線送受信機2390(例えば、Bluetooth(登録商標)、WiFi、Infrared)に相互接続ことができる。
図24は、本発明の特定の実施形態で使用できる例示的なデータ処理システムを示すブロック図である。例えば、データ処理システム2400は、ハンドヘルドコンピュータ、携帯情報端末(PDA)、携帯電話、携帯ゲームシステム、携帯メディアプレーヤー、並びに携帯電話、メディアプレーヤー、及び/又はゲームシステムを含むことができるタブレット又はハンドヘルドコンピュータ装置とすることができる。他の例として、データ処理システム2400は、ネットワークコンピュータ、又は他のデバイスに組み込まれた処理デバイスとすることができる。
本発明の1つの実施形態によれば、データ処理システム2400の例示的なアーキテクチャは、前述のモバイル装置に使用できる。データ処理システム2400は、集積回路上の1つ又はそれ以上のマイクロプロセッサ及び/又はシステムを含むことができる、処理システム2420を含む。処理システム2420は、メモリ2410、電源2425(1つ又はそれ以上のバッテリを含む)、オーディオ入力/出力2440、表示コントローラ及び表示装置2460、随意的な入力/出力2450、入力デバイス2470、及び無線送受信機2430に接続する。本発明の特定の実施形態において、図24に示されていない追加のコンポーネントをデータ処理システム2400の一部とすることができ、本発明の特定の実施形態において、図24よりも少ないコンポーネントを使用できることを理解されたい。更に、図24に示されていない1つ又はそれ以上のバスを、従来から知られているように、種々のコンポーネントを相互接続するために使用できることを理解されたい。
メモリ2410は、データ及び/又はデータ処理システム2400で実行するプログラムを記憶することができる。オーディオ入力/出力2440は、例えば、音楽を再生するための及び/又はスピーカ及びマイクロフォンによって電話機能を実現するための、マイクロフォン及び/又はスピーカを含むことができる。表示コントローラ及び表示装置2460は、グラフィカルユーザインタフェース(GUI)を含むことができる。無線(例えば、RF)送受信機2430(例えば、WiFi送受信機、赤外線送受信機、Bluetooth(登録商標)送受信機、無線セルラ電話送受信機)は、他のデータ処理システムと通信するために使用できる。1つ又はそれ以上の入力デバイス2470により、ユーザはシステムへの入力を行うことができる。これらの入力デバスは、キーパッド、キーボード、タッチパネル、マルチタッチパネル等とすることができる。随意的な他の入力/出力2450はドックコネクタとすることができる。
本発明の実施形態は、前述の種々のステップを含むことができる。各ステップは、汎用又は特定用途向けプロセッサに特定のステップを実行させるコンピュータ実行可能命令に組み込むことができる。もしくは、これらのステップは、このステップを実行するハードワイヤロジックを含む特定のハードウェアコンポーネントによって、又はプログラムコンピュータコンポーネント及び特注ハードウェアコンポーネントの任意の組み合わせによって実行できる。
また、本発明の構成要素は、コンピュータ実行可能プログラムコードを記憶するコンピュータ可読媒体として提供できる。コンピュータ可読媒体は、限定されるものではないが、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、及び光磁気ディスク、ROM、RAM、EPROM、EEPROM、磁気及び光カード、又は電子プログラムコードを記憶するのに適する他のタイプの媒体/コンピュータ可読媒体とすることができる。
前述の説明の全体を通して、例示目的で、複数の特定の詳細事項は、本発明の種々の実施形態を完全に理解するために提示される。しかしながら、当業者であれば、これらの特定の詳細事項がなくても本発明を実施できる。例えば、当業者であれば、本明細書で説明する機能モジュール及び方法はソフトウェア、ハードウェア、又はこれらの任意の組み合わせで実装できることを容易に理解できるはずである。更に、本発明の実施形態は、モバイルコンピューティング環境に関連して説明されるが(つまり、モバイル装置120−123;601−603を使用して)、本発明の基本的原理は、モバイルコンピューティングの実施例に限定されるものではない。特定の実施形態において、例えば、ディスクトップワークステーションコンピュータを含む種々の他のタイプのクライアント又はピアデータ処理装置を使用することができる。従って、本発明の範囲及び精神は、以下の請求項に関して判断する必要がある。