(57)【要約】イベントコンテンツを配信するための、方法、システム、及び、コンピュータ記憶媒体上にエンコードされたコンピュータプログラムを含む装置。方法の１つは、１つ又は複数のクライアントデバイスについて、トピックへのサブスクリプションを開始するステップと、トピックに関するイベントを受信するステップと、トピックに対応するチャンネルサーバの数を決定するステップであって、各チャンネルサーバは、１つ又は複数のクライアントデバイスに関連付けられている、ステップと、トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数より大きいと決定するステップと、トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数より大きいとの決定に応じて、イベントプロセッサからの受信されたイベントをイベントファンアウトキューに書き込むステップと、イベントファンアウトキューからの受信されたイベントを読み出すステップと、受信されたイベントを、各チャンネルサーバそれぞれに関連する１つ又は複数のクライアントデバイスに送信するステップと、を含む。
2021535515.tif 000002
【特許請求の範囲】
【請求項１】
１つ又は複数のクライアントデバイスのそれぞれについて、トピックへのサブスクリプションを開始するステップと、
イベントプロセッサ上で、前記トピックに関するイベントを受信するステップと、
前記トピックを扱っているチャンネルサーバがいくつあるかを決定するステップであって、各チャンネルサーバは、１つ又は複数のクライアントデバイスによってサブスクライブされたトピックを扱う、ステップと、
前記トピックを扱っているチャンネルサーバの数がチャンネルサーバの閾値数より大きいと決定するステップと、
前記トピックに対応する前記チャンネルサーバの数が前記チャンネルサーバの閾値数より大きいとする前記決定に応じて、前記イベントプロセッサからの前記受信されたイベントをイベントファンアウトキューに書き込むステップと、
前記チャンネルサーバによって、前記イベントファンアウトキューから前記受信されたイベントを読み出すステップと、
前記トピックを扱っている各チャンネルサーバそれぞれからの前記受信されたイベントを、前記トピックをサブスクライブする前記１つ又は複数のクライアントデバイスに送信するステップと、
を含む、方法。
【請求項２】
前記１つ又は複数のクライアントデバイスのそれぞれについて、トピックへのサブスクリプションを開始するステップは、
前記１つ又は複数のクライアントデバイスそれぞれから、前記１つ又は複数のクライアントデバイスからの１つ又は複数のサブスクリプション要求を受信するステップであって、前記１つ又は複数のサブスクリプション要求は、前記トピックを含む、ステップと、
前記１つ又は複数のクライアントデバイスに対する、前記トピックへの１つ又は複数のサブスクリプションを、受信された前記１つ又は複数のサブスクリプション要求に応じて開始するステップであって、開始された各サブスクリプションについて、前記クライアントデバイスに関連するセッション識別子を、トピックへのセッション識別子をマッピングに追加することを含む、ステップと、
を含む、
請求項１に記載の方法。
【請求項３】
サブスクリプションを開始するステップは、構成パケットを前記クライアントデバイスに送信するステップであって、前記構成パケットは、前記クライアントデバイスに対して一意の１つ又は複数のサブスクリプションタイマーを含む、ステップを含む、
請求項２に記載の方法。
【請求項４】
前記１つ又は複数のサブスクリプションタイマーは、前記クライアントデバイスに関連するユーザがアイドルであることを示し、アイドルであることは、前記ユーザが、閾値量の時間より長い間、それらのクライアントデバイスと対話していないことを含むことができる、
請求項３に記載の方法。
【請求項５】
前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記１つ又は複数のクライアントデバイスに送信するステップは、
前記１つ又は複数のクライアントデバイスがアイドルでないと決定するステップと、
前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記１つ又は複数のクライアントデバイスに送信するステップと、
をさらに含む、
請求項１に記載の方法。
【請求項６】
１つ又は複数のクライアントデバイスがアイドルであると決定するステップと、
１つ又は複数のチャンネルサーバを前記１つ又は複数のクライアントデバイスから切り離すステップと、
をさらに含む、
請求項４に記載の方法。
【請求項７】
前記１つ又は複数のクライアントデバイスがもはやアイドルではないと決定するステップと、
前記１つ又は複数のチャンネルサーバを前記１つ又は複数のクライアントデバイスに再び関連付けるステップと、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記１つ又は複数のサブスクリプション要求は、ブロードキャストに関する１つ又は複数のエンゲージメントを受信するための要求であり、前記１つ又は複数のエンゲージメントは、ライク又は再ブロードキャストを含み、前記トピックは、前記ブロードキャストに関する情報を含むことができる、
請求項２に記載の方法。
【請求項９】
前記１つ又は複数のサブスクリプション要求は、１又は複数の参加者との会話に関連する１つ又は複数のエンゲージメントを受信するための要求であり、前記エンゲージメントは、１又は複数の前記参加者がメッセージを作成しているというインジケーションを含み、前記トピックは、前記会話に関する情報を含むことができる、
請求項２に記載の方法。
【請求項１０】
１つ又は複数のサブスクリプション要求を、１つ又は複数のクライアントデバイスから受信するように構成されたエッジサーバと、
前記１つ又は複数のサブスクリプション要求を、前記エッジサーバから受信するように構成されたルーティングエンジンと、
１つ又は複数のサブスクリプション要求の１つを前記ルーティングエンジンから受信し、前記１つ又は複数のサブスクリプション要求の１つに対応するサブスクリプションセッションを開始するようにそれぞれ構成された、複数のチャンネルサーバと、
前記複数のチャンネルサーバのそれぞれとイベントを通信するように構成されたイベントファンアウトキューと、
前記イベントを前記イベントファンアウトキューにルーティングするように構成されたイベントプロセッサと、を含み、
前記イベントプロセッサは、前記イベントを記憶するように構成されたキューイングエンジンをさらに含む、
システム。
【請求項１１】
第２のクライアントからインジケーションを受信し、前記インジケーションに対応する第２のイベントを前記キューイングエンジンに中継するように構成されたパブリッシュサービスをさらに含む、
請求項１０に記載のシステム。
【請求項１２】
１つ又は複数の非一時的なコンピュータ記憶媒体上でエンコードされ、１つ又は複数のコンピュータによって実行されたとき、前記１つ又は複数のコンピュータに、
１つ又は複数のクライアントデバイスについて、トピックへのサブスクリプションを開始するステップと、
イベントプロセッサ上で、前記トピックに関するイベントを受信するステップと、
前記トピックに対応するチャンネルサーバの数を決定するステップであって、各チャンネルサーバは、１つ又は複数のクライアントデバイスに関連付けられている、ステップと、
前記トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数より大きいと決定するステップと、
前記トピックに対応する前記チャンネルサーバの数が前記チャンネルサーバの閾値数より大きいとする前記決定に応じて、前記イベントプロセッサからの前記受信されたイベントをイベントファンアウトキューに書き込むステップと、
前記イベントファンアウトキューから前記受信されたイベントを読み出すステップと、
前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記１つ又は複数のクライアントデバイスに送信するステップと、
を含む処理を実行させる命令を備える、コンピュータプログラム製品。
【請求項１３】
１つ又は複数のクライアントデバイスについて、トピックへのサブスクリプションを開始するステップは、を含む、
１つ又は複数のクライアントデバイスから、１つ又は複数のイベント要求を受信するステップと、
受信された前記１つ又は複数のイベント要求に応じて、１つ又は複数の構成パケットを前記１つ又は複数のクライアントデバイスに送信するステップと、
１つ又は複数のサブスクリプション要求を、前記１つ又は複数のクライアントデバイスから受信するステップであって、前記１つ又は複数のサブスクリプション要求は、前記トピックを含む、ステップと、
前記１つ又は複数のクライアントデバイスに対する、前記トピックへの１つ又は複数のサブスクリプションを、受信された前記１つ又は複数のサブスクリプション要求に応じて開始するステップと、
請求項１２に記載のコンピュータプログラム製品。
【請求項１４】
前記１つ又は複数のクライアントデバイスに送信された前記１つ又は複数の構成パケットは、前記１つ又は複数のクライアントデバイスに対して一意の１つ又は複数のサブスクリプションタイマーを含む、
請求項１３に記載のコンピュータプログラム製品。
【請求項１５】
前記１つ又は複数のサブスクリプションタイマーは、前記１つ又は複数のクライアントデバイスに関連付けられた前記１つ又は複数のクライアントそれぞれがアイドルであることを示し、アイドルであることは、前記１つ又は複数のクライアントが、閾値量の時間より長い間、それらのクライアントデバイスそれぞれと対話していないことを含むことができる、
請求項１４に記載のコンピュータプログラム製品。
【請求項１６】
前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記１つ又は複数のクライアントデバイスに送信するステップは、をさらに含む、
前記１つ又は複数のクライアントデバイスがアイドルでないと決定するステップと、
前記決定された数のチャンネルサーバからの前記受信されたイベントを、各チャンネルサーバそれぞれに関連する前記１つ又は複数のクライアントデバイスに送信するステップと、
請求項１５に記載のコンピュータプログラム製品。
【請求項１７】
１つ又は複数のクライアントデバイスがアイドルであると決定するステップと、
１つ又は複数のチャンネルサーバをアイドル状態にある前記１つ又は複数のクライアントデバイスから切り離すステップと、
をさらに含む、
請求項１５に記載のコンピュータプログラム製品。
【請求項１８】
前記１つ又は複数のクライアントデバイスがもはやアイドルではないと決定するステップと、
前記１つ又は複数のチャンネルサーバを前記１つ又は複数のクライアントデバイスに再び関連付けるステップと、
をさらに含む、請求項１７に記載のコンピュータプログラム製品。
【請求項１９】
前記１つ又は複数のサブスクリプション要求は、ブロードキャストに関する１つ又は複数のエンゲージメントを受信するための要求であり、前記１つ又は複数のエンゲージメントは、ライク又は再ブロードキャストを含み、前記トピックは、前記ブロードキャストに関する情報を含むことができる、
請求項１３に記載のコンピュータプログラム製品。
【請求項２０】
前記１つ又は複数のサブスクリプション要求は、１又は複数の参加者との会話に関連する１つ又は複数のエンゲージメントを受信するための要求であり、前記エンゲージメントは、１又は複数の前記参加者がメッセージを作成しているというインジケーションを含み、前記トピックは、前記会話に関する情報を含むことができる、
請求項１３に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書は、イベントコンテンツを１つ又は複数のユーザデバイスに提供することに関する。
【背景技術】
【０００２】
従来の要求−応答モデルは、第１のコンピューティングデバイスが、情報を求める要求を第２のコンピューティングデバイスに送信すること、次いで要求に対する応答を第２のコンピューティングデバイスから受信することを含む。
【０００３】
対して、従来のトピックベースのパブリッシュ−サブスクライブモデルにおいては、コンピューティングデバイスのユーザが、特定のトピックにサブスクライブすることができる。トピックについてパブリッシュされたコンテンツは、トピックにサブスクライブされた全てのユーザに提供される。例えば、サブスクリプションは、トピックに関連付けられているとして識別されたメッセージを、トピックにサブスクライブされた各コンピューティングデバイスに送信するように構成されたサーバによってホストされ得る。一旦トピックにサブスクライブされると、コンピューティングデバイスは、通常、サーバへの個々の要求を実施することなく、進行中のサブスクリプションコンテンツを受信する。
【発明の概要】
【０００４】
本明細書は、トピックにサブスクライブし、トピックに関係したコンテンツを受信するための技術を説明する。
【０００５】
これらの技術は、概して、ユーザからのサブスクリプション要求を受信するシステムに関する。各サブスクリプション要求は、ユーザがそれについての情報を受信したいトピックを識別する。サブスクリプション要求に応答して、システムは、システムのチャンネルサーバによってホストされるトピックへのサブスクリプションセッションを開始する。サブスクリプションセッションは、ユーザがサブスクリプション要求を行うために使用したクライアントに対して一意である。チャンネルサーバは、イベントと呼ばれる、特に定義された、トピックに関係した情報をクライアントに送信する。
【０００６】
トピックについてのイベントが受信されるとき、イベント情報が、トピックへのサブスクリプションをホストするチャンネルサーバに対応する１つ又は複数のイベントキューに追加される。システムが同じトピックへのサブスクリプションをホストするチャンネルサーバの数が閾値を上回ることを判定した場合、ファンアウトキュー（fan-out queue）が使用されて、個々のイベントキューへのイベント情報の過度の書き込みを制限する。とりわけ、ファンアウトキューに書き込まれたイベントは、トピックのサブスクリプションをホストするチャンネルサーバの全てに提供され得る。例えば、チャンネルサーバは、ファンアウトキューから周期的に読み出して、イベントを取得することができる。
【０００７】
概して、本明細書において説明される主題の１つの革新的な態様は、１つ又は複数のクライアントデバイスの各々のためにトピックへのサブスクリプションを開始するアクションと、イベントプロセッサ上で、トピックに該当したイベントを受信するアクションと、いくつのチャンネルサーバがトピックを扱っているのかを判定するアクションであって、ここで、各チャンネルサーバは１つ又は複数のクライアントデバイスによってサブスクライブされたトピックを扱う（handle）、アクションと、トピックを扱っているチャンネルサーバの数がチャンネルサーバの閾値数よりも大きいことを判定するアクションと、トピックに対応するチャンネルサーバの数がチャンネルサーバの閾値数よりも大きいという判定に応答して、イベントプロセッサから受信されたイベントをイベントファンアウトキューに書き込むアクションと、チャンネルサーバによって、受信されたイベントをイベントファンアウトキューから読み出すアクションと、トピックを扱っている各チャンネルサーバそれぞれから受信されたイベントを、トピックにサブスクライブされた１つ又は複数のクライアントデバイスに送信するアクションとを含む方法において具現化されてよい。
【０００８】
この態様の他の実施形態は、方法のアクションを実施するように各々構成された、対応するコンピュータシステム、装置、及び１つ又は複数のコンピュータストレージデバイス上に記録されたコンピュータプログラムを含む。特定の動作又はアクションを実施するように構成されることになる１つ又は複数のコンピュータのシステムの場合、システムは、動作においてシステムに動作又はアクションを実施させる、ソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せをそれにインストールしていることを意味する。特定の動作又はアクションを実施するように構成されることになる１つ又は複数のコンピュータプログラムの場合、１つ又は複数のプログラムは、データ処理装置によって実行されるときに、装置に動作又はアクションを実施させる命令を含むことを意味する。
【０００９】
上述の、及び他の実施形態は、各々、オプションで、以下の特徴のうちの１つ又は複数を、単独で、又は組み合わせて含むことができる。とりわけ、一実施形態は、全ての以下の特徴を組み合わせて含む。１つ又は複数のクライアントデバイスの各々のためにトピックへのサブスクリプションを開始することは、１つ又は複数のクライアントデバイスの各々から、１つ又は複数のクライアントデバイスからの１つ又は複数のサブスクリプション要求を受信することであって、ここで、１つ又は複数のサブスクリプション要求はトピックを含む、ことと、１つ又は複数の受信されたサブスクリプション要求に応答して、開始されるサブスクリプションごとに、クライアントデバイスに関連付けられたセッション識別子をトピックへのセッション識別子のマッピングに追加することを含む、１つ又は複数のクライアントデバイスのためにトピックへの１つ又は複数のサブスクリプションを開始することとを含む。
【００１０】
サブスクリプションを開始することは、クライアントデバイスに構成パケットを送信することを含み、ここで、構成パケットは、クライアントデバイスに対して一意の（unique）１つ又は複数のサブスクリプションタイマーを含む。１つ又は複数のサブスクリプションタイマーは、クライアントデバイスに関連付けられたユーザがアイドルであることを示し、ここで、アイドルであることは、ユーザが閾値量の時間よりも長い間それらのクライアントデバイスと対話（interact）していないことを含むことができる。判定された数のチャンネルサーバから受信されたイベントを、各チャンネルサーバそれぞれに関連付けられた１つ又は複数のクライアントデバイスに送信することは、１つ又は複数のクライアントデバイスがアイドルではないことを判定することと、判定された数のチャンネルサーバから受信されたイベントを、各チャンネルサーバそれぞれに関連付けられた１つ又は複数のクライアントデバイスに送信することとをさらに含む。方法は、１つ又は複数のクライアントデバイスがアイドルであることを判定することと、１つ又は複数のチャンネルサーバを１つ又は複数のアイドルクライアントデバイスから切り離すこととをさらに含む。方法は、１つ又は複数のクライアントデバイスがもはやアイドルではないことを判定することと、１つ又は複数のチャンネルサーバを１つ又は複数のクライアントデバイスに再び関連付けることとをさらに含む。１つ又は複数のサブスクリプション要求は、ブロードキャストに関係した１つ又は複数のエンゲージメント（engagements）を受信するための要求であり、１つ又は複数のエンゲージメントは、ライク（likes）及び再ブロードキャストを含み、ここで、トピックは、ブロードキャストに関係した情報を含むことができる。１つ又は複数のサブスクリプション要求は、１人又は複数の参加者との会話（conversation）に関係した１つ又は複数のエンゲージメントを受信するための要求であり、エンゲージメントは、参加者のうちの１人又は複数がメッセージを作成しているというインジケーション（Indication）を含み、ここで、トピックは、会話に関係した情報を含むことができる。
【００１１】
本明細書で説明される主題は、以下の利点のうちの１つ又は複数を実現するように、特定の実施形態において実装されてよい。
【００１２】
開示されたシステム及び方法は、例えば、要求−応答モデルによって要されるように、クライアントのデバイスがデータを求める多数の要求を送信する必要なしに、クライアントが該当したデータを受信することを可能にする。従って、本主題は、要求−応答モデルを使用するシステムと比べて、コンピューティングリソース及びネットワーク使用量の低減を特徴とする。
【００１３】
システム及び方法は、特定のサブスクライブされたトピックについてのイベントを多くの個々のキューに書き込む冗長化を制限するために、指定された基準下でイベントファンアウトキューを使用することによって、イベントの効率的な分配を考慮する。多くの数のチャンネルサーバに関連付けられたイベントに対して単一のイベントファンアウトキューを使用することは、イベントプロセッサが単一のイベントファンアウトキューに書き込むことを可能にすることによって、個々のチャンネルサーバイベントキューへの書き込み動作の数を低減する。それに応じて、イベントは、多くの数のチャンネルサーバにファンアウトすることができ、チャンネルサーバの各々は、イベントを、多くの数のホストされるクライアントに送信することができる。結果として、イベントは、例えば、何百万ものサブスクライブされたクライアントに同時に配信され得る。非アクティブであると判定しているユーザのサブスクリプションを維持することを回避するために、システムは、サブスクリプションごとに生存時間（ＴＴＬ）を課すことができる。これは、システムが、非アクティブであると判定されたユーザのサブスクリプションを終了して、アクティブなユーザのためにコンピューティングリソースを温存することを可能にする。
【図面の簡単な説明】
【００１４】
【図１】クライアントに通信可能に結合された例示的なメッセージングプラットフォームのブロック図である。
【図２】クライアントに通信可能に結合された例示的なサブスクリプションモジュールのブロック図である。
【図３】サブスクリプションモジュールにサブスクライブされたクライアントにイベントを送信するための例示的なプロセスの流れ図である。
【発明を実施するための形態】
【００１５】
様々な図面において、同様の参照番号及び呼称は、同様の要素を示す。
【００１６】
多くのモバイルデバイスのためのネットワークアクティビティは、要求−応答モデルに基づいている。しかし、特定のタイプのアクティビティは、要求−応答モデルによってうまく機能が果たされない。例えば、メッセージングプラットフォームは、例えば、第１のユーザと第２のユーザとの間の会話の一部として別のユーザがメッセージをタイピングしていることを示す、クライアントデバイスに提供されるアラートを含むことがある。しかし、要求−応答モデルを使用するとき、第１のユーザのコンピューティングデバイスは、メッセージングプラットフォームに、第２のユーザがタイピングしているのかどうかをそれに「尋ねる（ask）」ために、継続して要求を送信しなければならないことになる。次いで、メッセージングプラットフォームもまた、受信された要求ごとに応答を送信しなければならないことになる。
【００１７】
継続して要求及び応答を送信することは、コンピューティングデバイスのＣＰＵによる著しい量の計算を要することがある。これのために、ユーザは、電池寿命の低減、データ使用量の増加、及びコンピューティングデバイスの速度の減少を経験することがある。
【００１８】
これらの影響のいくつかは、パブリッシュ−サブスクライブモデルを使用して緩和され得る。しかし、大量のイベント及びサブスクライバのためのイベント配布をスケーリングするメッセージングシステムの場合、他の課題を持ち込むことがある。
【００１９】
本明細書は、要求−応答モデル及び従来のパブリッシュ−サブスクライブモデルの欠点なしに、適時なやり方で、特定のイベントについての情報を提供するための技法を説明する。
【００２０】
図１は、多くのクライアントデバイス、例えば、クライアントデバイス１０２に通信可能に結合された例示的なメッセージングプラットフォーム１００のブロック図である。メッセージングプラットフォームは、メッセージングシステム１１０と、サブスクリプションシステム１２０と、接続グラフリポジトリ１３２と、アカウントリポジトリ１３４とを含む。
【００２１】
メッセージングプラットフォーム１００は、例えば、アカウントリポジトリ１３４を使用して、何百もの個人の、ビジネスの、及び／又は他のエンティティのアカウント、例えば、仮名アカウント、ノベルティアカウント、その他を記憶することができる。
【００２２】
クライアントは、メッセージングプラットフォームを使用して、メッセージングプラットフォームの内部及び／又は外部の他のアカウントにメッセージを送信することができる。いくつかの実装において、メッセージングプラットフォームは、クライアントが、「実時間」で通信すること、即ち、最小の遅延で他のクライアントと会話すること、及び同時セッションの間に１つ又は複数の他のクライアントと会話を行うことができるように構成されてよい。
【００２３】
メッセージングシステムは、クライアントが、メッセージをブロードキャストすることを可能にすることができる。クライアントはまた、メッセージングシステムのユーザ間の実時間対話を提供するのに十分短い時間フレーム内で、メッセージングシステムによってブロードキャストされたメッセージを表示することができる。メッセージの受信者は、メッセージをブロードキャストするクライアントのアカウントと、予め定義された関係を有することができる。予め定義された関係は、接続グラフリポジトリ１３２において表されてよい。
【００２４】
サブスクリプションシステム１２０は、クライアントからのサブスクリプション要求を受信するように構成される。サブスクリプション要求は、トピックを識別する。サブスクリプション要求に応答して、サブスクリプションシステムは、クライアントをトピックにサブスクライブする。サブスクリプションシステムは、クライアントがトピックに該当した情報を求める要求を継続して送信することを要することなく、サブスクライブされたクライアントに情報を送信する。
【００２５】
クライアントは、最初にイベント要求をサブスクリプションシステムに送信することによって、サブスクリプションを開始することができる。イベント要求は、クライアントのデバイスとサブスクリプションシステムとの間にネットワーク接続を確立するＨＴＴＰ  ＧＥＴ要求であってよい。イベント要求に応答して、サブスクリプションシステムのチャンネルサーバは、構成パケットをクライアントに送信することができる。構成パケットは、ユーザに対して一意の識別子であるセッション識別子（ＩＤ）を含むことができる。ネットワーク接続を確立し、構成パケットを受信した後で、クライアントは、サブスクリプション要求をサブスクリプションシステムに送信することができる。サブスクリプション要求は、クライアントのセッションＩＤと、クライアントがサブスクライブされたいものに対応したトピックとを含むＨＴＴＰ  ＰＯＳＴ要求であってよい。サブスクリプションシステムは次いで、サブスクリプション要求によって指定されたトピックへの、クライアントのためのサブスクリプションセッションを開始する。一旦クライアントがトピックにサブスクライブされると、サブスクリプションシステムは、トピックに関係したイベントをクライアントに送信することができる。例えば、サブスクリプションは、イベント要求によって確立されたネットワーク接続を使用して、トピックに関係したイベントを、サブスクライブするクライアントデバイスに送信することができる。
【００２６】
図２は、クライアント２０２に通信可能に結合された例示的なサブスクリプションシステム２００のブロック図である。クライアント２０２は、代表的なクライアントである。多くの異なるクライアントデバイスが、サブスクリプションシステム２００に通信可能に結合されてよい。
【００２７】
サブスクリプションシステム２００は、フロントエンド２１０と、チャンネルサーバ２１２、２２２、及び２２４と、サブスクリプションリポジトリ２２６と、イベントキュー２３２、２３３、及び２３４と、ファンアウトキュー２２８と、イベントプロセッサ２４０と、キューイングエンジン２４５と、パブリッシュサービス２５２及び２５４とを含む。サブスクリプションシステムのコンポーネント間の接続は、例えば、ローカルエリアネットワーク（ＬＡＮ）、インターネット、その他のネットワーク接続であってよい。
【００２８】
フロントエンド２１０は、クライアント２０２からの通信、例えば、サブスクリプション要求を受信し、イベントをクライアント２０２に送信するように構成された、サブスクリプションシステム２００のエンドポイントを表す。いくつかの実装において、フロントエンド２１０は、エッジサーバと、１つ又は複数のルーティングエンジンとの両方を含む。エッジサーバは、外部ネットワークからサブスクリプションシステムへのゲートウェイを提供する。エッジサーバは、クライアントからのＨＴＴＰトラフィックを受信し、イベントをクライアントに送信するように構成される。ＨＴＴＰトラフィックは、サブスクリプション要求を含むことができる。サブスクリプション要求は、サブスクリプション要求を特定のチャンネルサーバにルーティングする１つ又は複数のルーティングエンジンのうちの１つに送信されてよい。特定のチャンネルサーバは、任意の好適な技法を使用して選択されてよく、例えば、受信されたサブスクリプション要求を個々のチャンネルサーバに分配するためにラウンドロビン技法が使用されてもよい。イベント要求を受信するチャンネルサーバは、イベント要求を送信したクライアントのためのサブスクリプションセッションをホストする。
【００２９】
サブスクリプションシステム２００は、３つのチャンネルサーバを含むように示されているが、他の実装において、サブスクリプションモジュールは、はるかに多いチャンネルサーバ、例えば、数百のチャンネルサーバをメッセージングプラットフォームのために含むことができる。各チャンネルサーバ２１２、２２２、及び２２４は、一意のチャンネルサーバ識別子（ＩＤ）に関連付けられている。各チャンネルサーバＩＤは、チャンネルサーバの具体的なイベントキューを識別するために使用されてよい。
【００３０】
サブスクリプションパス
サブスクリプション要求を受信することに応答して、特定のチャンネルサーバは、フロントエンド２１０を通して、クライアントに構成パケットを送信することができる。構成パケットは、クライアントサブスクリプションに対して一意の識別子であるセッション識別子（ＩＤ）を含む。構成パケットには、サブスクライブされたトピックのためのサブスクリプションタイマーもまた含まれる。サブスクリプションタイマーは、サブスクリプションの生存時間、即ちＴＴＬを示すことができ、これは、チャンネルサーバがＴＴＬの間にクライアントが非アクティブであったことを判定した場合に、チャンネルサーバがサブスクライブされたクライアントをトピックからサブスクライブ解除することになるまでの時間期間に対応する。
【００３１】
サブスクリプションプロセスの一部として、クライアントは、クライアントをサブスクライブするための具体的なトピックで構成パケットに応答することができる。いくつかの実装において、応答は、クライアントのセッションＩＤとトピックとを含むＨＴＴＰ  ＰＯＳＴ要求である。例えば、トピックは、メッセージングプラットフォームの特定のメッセージ又は会話であってもよい。トピックは、特定の識別子、例えば、メッセージングプラットフォームによって使用されるメッセージ識別子又は会話識別子によって識別され得る。トピックは、メッセージであってもよく、ここで、トピックに関連付けられたイベントは、例えば、エンゲージメントアクティビティなどの、メッセージとの任意の対話を含む。別の例として、トピックは、例えば、識別された会話に関するタイピングなど、会話についてより具体的であってもよく、ここで、トピックについてのイベントは、ユーザがタイピングしているという通知を含む。
【００３２】
サブスクリプション要求を受信するチャンネルサーバは、セッションＩＤをローカルマッピングに追加することを含むサブスクリプションを確立し、ローカルマッピングは、セッションＩＤをサブスクリプショントピックに関係付ける。こうして、各チャンネルサーバは、チャンネルサーバによってホストされるトピックごとにクライアントセッションを識別するマッピングを有する。結果として、チャンネルサーバによってホストされるトピックについて特定のイベント情報を受信すると、チャンネルサーバは、マッピングを使用して各サブスクライブされたクライアントを識別して、セッション識別子へのトピックのマッピングに基づいて、イベントを提供することができる。
【００３３】
サブスクリプションセッションを確立することはまた、サブスクリプションリポジトリ２２６に記憶されたマップにおいて、チャンネルサーバをトピックに関連付けることを含む。具体的には、サブスクリプションリポジトリ２２６は、チャンネルサーバへのトピックのマッピングを含み、その結果、トピックごとに、そのトピックへのクライアントサブスクリプションをホストする１つ又は複数のチャンネルサーバが識別され得る。
【００３４】
いくつかの事例において、チャンネルサーバは、チャンネルサーバが既に扱っているトピックへのサブスクリプション要求を受信する。例えば、チャンネルサーバは、１つ又は複数の他のクライアントセッションＩＤのためのトピックについてサブスクリプションセッションを既にホストしていることがある。そのような事例において、チャンネルサーバＩＤは、サブスクリプションリポジトリ２２６において、チャンネルサーバＩＤへのトピックのマッピングに既に記憶されている。その結果、チャンネルサーバは、マップにおける冗長なエントリを回避するために、そのチャンネルサーバＩＤをマッピングに追加しない。
【００３５】
トピックへの各クライアントサブスクリプションは、ＴＴＬと呼ばれる、予め決められた時間の量の間持続する。ＴＴＬはまた、チャンネルサーバがセッションＩＤへのトピックのローカルマッピングにおいてクライアントのセッションＩＤを維持することになる時間の期間として考えられてもよい。チャンネルサーバがトピックへのサブスクリプションを開始するとき、それは、サブスクリプションに関連付けられたサブスクリプションタイマーを、ＴＴＬによって指定された時間の量に設定する。サブスクリプションタイマーが満了した場合、クライアントをホストするチャンネルサーバは、セッションＩＤへのトピックのローカルマッピングからクライアントのセッションＩＤを取り除くことによって、クライアントをトピックからサブスクライブ解除することになる。サブスクリプションタイマーを維持する１つの利点は、それが、サブスクリプションシステムに、アイドルである、又は反応しないクライアントのサブスクリプションを終了させることを可能にすることである。ＴＴＬについての好適な値は、２分、５分である。さらに、チャンネルサーバのいずれの他のセッションＩＤもトピックにサブスクライブされていない場合、チャンネルサーバＩＤが、サブスクリプションリポジトリマッピングから取り除かれてもよい。
【００３６】
この実装において、中断されないサブスクリプションを維持するためには、サブスクライブされたクライアントは、ＴＴＬの満了に先立って、トピックを求める新しいサブスクリプション要求をサブスクリプションシステムに送信しなければならない。新しいサブスクリプション要求を受信することに応答して、チャンネルサーバは、ＴＴＬに対してクライアントのサブスクリプションに関連付けられたサブスクリプションタイマーをリセットする、即ち、ＴＴＬに対応する時間の量をサブスクリプションタイマーに再割り当てすることができる。
【００３７】
サブスクリプションシステムはまた、クライアントが一度に有することができるサブスクリプションの数を制限することができる。いくつかの実装において、サブスクリプションシステムは、各クライアントを、サブスクリプションの最大数、例えば、１０又は２５のサブスクリプションに制限する。
【００３８】
イベント配信パス
メッセージングプラットフォーム、例えば、メッセージングプラットフォーム１００の異なるサービスが、イベントをサブスクリプションシステム２００にパブリッシュすることができる。例えば、パブリッシュサービス２５２、２５４は、メッセージングプラットフォームの他のサービスが、例えば、Ｔｈｒｉｆｔ  ＡＰＩを使用してイベントをパブリッシュすることを可能にするアプリケーションプログラミングインターフェース（ＡＰＩ）を提供することができる。パブリッシュサービスはまた、例えば、イベントの妥当性検査又はレート制限などのイベントへの処理を、それらをイベントプロセッサ２４０に提供することに先立って、実施することができる。この例において、サブスクリプションシステム２００は、２つのパブリッシュサービス２５２及び２５４を含んでいるが、他の実装において、サブスクリプションモジュールは、サブスクリプションシステム２００の具体的な要件に応じて、より多い、又はより少ないパブリッシュサービスを含むことができる。
【００３９】
パブリッシュサービス２５２、２５４は、イベントをイベントプロセッサ２４０に渡す。イベントプロセッサ２４０は、各イベントを、イベントのトピックへのサブスクリプションを収容する対応するチャンネルサーバへとルーティングする。
【００４０】
イベントプロセッサ２４０は、イベントを、イベントキュー２３０、２３２、２３４に送信する。この実装において、サブスクリプションシステムは、単一のイベントプロセッサ２４０を含んでいるが、他の実装において、サブスクリプションモジュールは、多数のイベントプロセッサを含むことができる。
【００４１】
各イベントは、トピックに関連付けられている。イベントコンテンツは、１つ又は複数のトピックに対応する識別子を含むことができる。例えば、エンゲージメントカウンタがメッセージについてインクリメントされていることを示すイベントは、対応するメッセージ識別子を使用して、そのメッセージを識別することになる。サブスクライブされたトピックはまた、メッセージ識別子であることがある。従って、イベントコンテンツは、どのトピックにイベントが関連付けられているのかを判定するために使用されてもよい。
【００４２】
イベントプロセッサ２４０は、サブスクリプションリポジトリ２２６におけるトピックへのチャンネルサーバＩＤのマッピングを使用して、どのチャンネルサーバが所与のトピックを扱っているのかを判定する。マッピングを使用して、イベントプロセッサ２４０は、イベントを受信するための１つ又は複数のチャンネルサーバを判定する。イベントプロセッサは次いで、トピックを扱うチャンネルサーバに対応する１つ又は複数のイベントキューに、イベントを送信することができる。とりわけ、各チャンネルサーバ２１２、２２２、２２４は、対応するイベントキュー２３０、２３２、２３４に関連付けられている。いくつかの実装において、イベントプロセッサ２４０は、トピックを求めるルックアップ要求を、サブスクリプションリポジトリ２２６に送信する。サブスクリプションリポジトリ２２６は次いで、トピックを扱っているチャンネルサーバＩＤのセットを返す。
【００４３】
例えば、所与のイベントが、トピック１に関連付けられることがある。サブスクリプションリポジトリ２２６におけるマッピングを使用して、イベントプロセッサ２４０は、トピック１がチャンネルサーバ２１２及び２２４によって扱われていることを判定することができる。その結果、イベントは、チャンネルサーバ２１２及び２２４にそれぞれ対応するイベントキュー２３０及び２３４に送信される。
【００４４】
チャンネルサーバ２１２、２２２、２２４は、それらのそれぞれのイベントキューを通して、イベントプロセッサ２４０からイベントを受信する。いくつかの実装において、各チャンネルサーバ２１２、２２２、２２４は、対応するイベントキュー２３０、２３２、２３４から周期的にイベントを読み出す。例えば、チャンネルサーバは各々、それらのそれぞれのイベントキューから、５０ｍｓごとに読み出すことができる。いくつかの他の実装において、イベントプロセッサ２４０は、イベントキューを使用して、例えば、周期的な時間間隔に基づいて、イベントがキューに追加されるときに基づいて、又はキューにおける待ち状態のイベントのボリュームに基づいて、対応するチャンネルサーバにイベントをプッシュする。
【００４５】
チャンネルサーバがイベントキューからイベントを受信した後、チャンネルサーバは、どのクライアントが受信されたイベントのトピックにサブスクライブされているのかを判定するために、チャンネルサーバがオープンな接続を有するクライアントのセッションＩＤへのトピックのそのローカルマッピングに照会することができ、それらのクライアントにイベントを送信する。
【００４６】
こうして、イベントは、イベントプロセッサによって、イベントのトピックをホストするチャンネルサーバにファンアウトされる。各チャンネルサーバは次いで、イベントを、トピックにサブスクライブされたクライアントにファンアウトする。
【００４７】
ファンアウトキュー
上で説明されたように、イベントプロセッサ２４０は、イベントのトピックへのサブスクライバを扱うチャンネルサーバごとに、それぞれのイベントキューにイベントを送信する。しかし、いくつかの状況において、これは、多くの個々のイベントキューにイベントを書き込むことを意味することがある。個々のキューへの多くの冗長な書き込みから生じる非効率性を回避するために、イベントプロセッサは、いくつのチャンネルサーバがイベントのトピックへのサブスクリプションを扱っているのかを最初に判定する。チャンネルサーバの数が指定された閾値数を超えるという判定に応答して、イベントプロセッサ２４０は、イベントを、代わりにイベントファンアウトキュー２２８に送信し、個々のチャンネルサーバキューには送信しない。いくつかの実装において、イベントファンアウトキュー２２８は、必要に応じて動的に生成されて、イベントをチャンネルサーバにルーティングする。
【００４８】
イベントファンアウトキュー２２８は、イベントを多数のチャンネルサーバに提供することができる。いくつかの実装において、各チャンネルサーバは、ファンアウトキュー２２８から周期的に読み出す。いくつかの他の実装においては、ファンアウトキュー２２８が、チャンネルサーバにイベントを周期的にプッシュする。チャンネルサーバの閾値数は、ゼロよりも大きく、所与のサブスクリプションモジュールに含まれるチャンネルサーバの合計数よりも小さい、又は合計数に等しい任意の好適な数であってよい。例えば、１０００のチャンネルサーバが存在する場合、イベントファンアウトキュー２２８は、サブスクリプショントピックを扱うチャンネルサーバの数がチャンネルサーバの合計数の半分を超えるときに使用されてもよい。特定の閾値数は、様々な基準に基づいて判定されてもよく、いくつかの事例において、イベントプロセッサのリソース使用量、イベントのボリューム、チャンネルサーバの数、その他に経験的に基づいて判定されてもよい。
【００４９】
失敗挙動
いくつかの事例において、クライアントのデバイスがネットワーク接続性を喪失することがある。クライアントがチャンネルサーバへの接続を確立している場合、サブスクリプションシステムは、多数のやり方で、クライアントネットワーク喪失を検出することができる。
【００５０】
第１の例として、チャンネルサーバがイベントをフロントエンド２１０に送信する場合、フロントエンド２１０は、イベントをクライアント２０２に送信するように試行することになる。クライアント２０２がネットワーク接続性を喪失している場合、フロンドエンド２１０は、それを通してイベントを送信するためのネットワーク接続が存在しないことを検出することができる。この検出に続いて、フロントエンド２１０は、ネットワーク接続の喪失を、クライアント２０２をホストするチャンネルサーバに通信することができる。チャンネルサーバは次いで、クライアントをサブスクライブ解除することができ、これは、トピックにサブスクライブされたクライアントのセッションＩＤにトピックを関係付けるマップから、クライアントのセッションＩＤを取り除くことを含むことができる。
【００５１】
第２の例として、クライアントのサブスクリプションに関連付けられたＴＴＬが、クライアントがネットワーク接続性を喪失していることを示すことができる。ＴＴＬが満了した後で、サブスクリプションシステムは、クライアントを自動的にサブスクライブ解除することになる。
【００５２】
図３は、サブスクリプションモジュールにサブスクライブされたクライアントにイベントを送信するための例示的なプロセス３００の流れ図である。便宜上、プロセスは、１つ又は複数の位置に位置付けられ、本明細書に従って適正にプログラムされた、１つ又は複数のコンピュータのシステムによって実施されるものとして説明されることになる。例えば、サブスクリプションシステム２００は、適切にプログラムされるとき、例示的なプロセスを実施することができる。
【００５３】
システムは、１つ又は複数のクライアントデバイスのためのトピックへのサブスクリプションを開始する（３０５）。より具体的には、システムは、システムとの通信を確立するためのイベント要求を受信する。各イベント要求に応答して、システムのチャンネルサーバが、対応するクライアントデバイスに、セッション識別子を含む構成パケットを送信する。応答して、クライアントは、ユーザがサブスクライブすることを望むトピックを識別するサブスクリプション要求を送信する。サブスクリプション要求に応答して、チャンネルサーバは、クライアントデバイスサブスクライバのセッションＩＤにトピックをマップするサブスクリプションリポジトリにおいて、クライアントサブスクリプションのためのセッションＩＤをトピックに関連付けることを含む、クライアントデバイスのためのトピックへのサブスクリプションを開始する。
【００５４】
システムは、イベントプロセッサ上で、それぞれのトピックに概ね該当したイベントを受信する（３１０）。イベントプロセッサは、システムのクライアントを含む１つ又は複数のソースからイベントを受信するパブリッシュサービスから、イベントを受信することができる。
【００５５】
システムは、いくつのチャンネルサーバが特定のトピックを扱っているのかを判定する（３１５）。イベントプロセッサは、それが受信する各イベントに関係付けられたトピックを判定する。イベントプロセッサはまた、例えば、トピックを扱うチャンネルサーバにトピックを関係付けるマッピングにアクセスすることによって、どのチャンネルサーバがトピックを扱っているのかを判定することができる。
【００５６】
システムは、トピックに対応するチャンネルサーバの数が、チャンネルサーバの閾値数よりも大きいかどうかを判定する（３２０）。
【００５７】
チャンネルサーバの数が閾値数よりも大きいという判定に応答して、システムは、イベントプロセッサから受信されたイベントを、イベントファンアウトキューに送信する、例えば、書き込む（３２５、即ち、「Ｙｅｓ」分岐）。いくつかの実装において、システムは、判定に応答して、イベントファンアウトキューを動的に生成する。イベントファンアウトキューは、イベントプロセッサを、トピックを扱っているチャンネルサーバに通信可能に結合する。
【００５８】
それぞれのチャンネルサーバは、受信されたイベントを、イベントファンアウトキューから読み出す（３３０）。とりわけ、各チャンネルサーバは、チャンネルサーバによって扱われるトピックについてのイベントを、イベントファンアウトキューにおいて取得する。
【００５９】
システムは、各チャンネルサーバにおいて、どのクライアントデバイスが受信されたイベントのトピックにサブスクライブされているのかを判定し、それらのクライアントデバイスにイベントを送信する（３３５）。トピックにサブスクライブされたクライアントデバイスのセッションＩＤにトピックを関係付けるマッピングを使用して、イベントのトピックにサブスクライブされたクライアントデバイスが識別される。トピックにサブスクライブされたクライアントをホストする各チャンネルサーバは、受信されたイベントを、ホストされるクライアントに送信する。
【００６０】
チャンネルサーバの数が閾値数よりも大きくないという判定に応答して、システムは、イベントプロセッサから受信されたイベントを、１つ又は複数のイベントキューに送信する、例えば、書き込む（４４０、即ち、「Ｎｏ」分岐）。イベントキューの各々は、イベントに該当したトピックへのサブスクリプションを扱うチャンネルサーバのうちの１つに対応する。イベントプロセッサは、トピックを扱っているチャンネルサーバのチャンネルサーバＩＤにトピックを関係付けるマッピングを使用して、イベントを送信するための適正なイベントキューを判定することができる。追加として、各イベントキューは、対応するチャンネルサーバＩＤに関連付けられる。
【００６１】
それぞれのチャンネルサーバは、受信されたイベントを、対応するイベントキューから読み出す（３４５）。１つ又は複数のイベントキューから読み出した後で、各チャンネルサーバは、例えば、イベントに含まれた、対応するトピックを識別する識別子を使用して、イベントが対応するトピックを判定することができる。
【００６２】
段階３４５に続いて、「Ｎｏ」分岐は、上で説明された段階３３５を実施することによって継続することができる。
【００６３】
例として、ユーザは、メッセージングプラットフォーム上でブロードキャストされた特定のメッセージなどのコンテンツにサブスクライブしたいことがある。サブスクリプションは、例えば、メッセージ「ライク（likes）」の更新されたカウントなどの、メッセージに関係した１つ又は複数のエンゲージメントについての更新を受信するユーザの所望を表すことができる。サブスクリプションのトピックは、メッセージを識別する情報を含むことができる。１つ又は複数のエンゲージメントは、１人又は複数の他のユーザが、例えば、特定のエンゲージメントタイプについてのエンゲージメントカウントをインクリメントすることによって、メッセージと対話しているというインジケーションであってもよい。例えば、１つ又は複数のエンゲージメントは、１人又は複数の他のユーザがメッセージを、ライクしている、又は再ブロードキャストしていることを示すことができる。１人又は複数の他のユーザのデバイスは、メッセージシステムに１つ又は複数のエンゲージメントを通知することができる。メッセージングシステムは、この情報をサブスクリプションシステムに通信することができ、サブスクリプションシステムは、応答して、イベントとしてのエンゲージメントを、サブスクライブされたユーザのデバイスに送信することができる。ユーザは、従って、エンゲージメントのインクリメントインジケーションを実時間で見ることができる。トピックにサブスクライブされたユーザは、ユーザがトピックからサブスクライブ解除することを選ぶまで、サブスクリプションシステムからイベントを受信することを継続する。クライアントは、サブスクライブ解除要求をサブスクリプションモジュールに送信することによって、トピックからサブスクライブ解除することができる。例えば、サブスクライブ解除要求は、ＨＴＴＰ  ＰＯＳＴ要求であってよい。ＨＴＴＰ  ＰＯＳＴ要求は、クライアントのセッションＩＤと、ユーザがサブスクライブ解除したいトピックとを含むことができる。エッジサーバが、サブスクライブ解除要求をルーティングエンジンのうちの１つに送信することができ、ルーティングエンジンのうちの１つが次いで、それを、トピックへのクライアントのサブスクリプションをホストしているチャンネルサーバに送信することができる。サブスクリプション解除要求に応答して、トピックを扱うチャンネルサーバは、クライアントをサブスクライブ解除する、即ち、クライアントのサブスクリプションセッションを終了することができる。
【００６４】
クライアントをサブスクライブ解除することは、クライアントがサブスクライブされていたトピックから、クライアントのセッションＩＤを切り離すことを含む。言い換えれば、チャンネルサーバは、セッションＩＤへのトピックのローカルマッピングから、クライアントのセッションＩＤを削除する。チャンネルサーバがトピックについての別のクライアントセッションをホストしていない場合、サブスクリプションリポジトリは、トピックからトピックを扱うチャンネルサーバＩＤへのローカルマッピングにおいて、トピックからチャンネルサーバＩＤを切り離す。
【００６５】
トピックから手動でサブスクライブ解除することに加えて、クライアントはまた、サブスクリプションシステムによって、トピックから自動的にサブスクライブ解除されてもよい。ユーザが、例えば、クライアントのサブスクリプションセッションのＴＴＬなどの閾値量の時間よりも長い間アイドルであると判定された場合、サブスクリプションシステムは、クライアントのサブスクリプションセッションを自動的に終了することができる。例えば、クライアントは、コンピューティングデバイスを使用して、ブロードキャストにサブスクライブすることができる。サブスクリプションシステムは、コンピューティングデバイスがスリープモードに入ったかどうかを検出し、ユーザがアイドルであることを判定することができる。コンピューティングデバイスが閾値量の時間よりも長い間スリープモードにとどまる場合、サブスクリプションモジュールは、ブロードキャストへのコンピューティングデバイスのサブスクリプションを終了することができる。
【００６６】
いくつかの実施形態において、ユーザが閾値量の時間の間アイドルであるという検出に応答して、サブスクリプションシステムは、サブスクライブ解除通知をクライアントに送信して、サブスクリプションシステムが一定の時間枠の後にクライアントのサブスクリプションを終了することになることを示すことができる。例えば、ユーザは、コンピューティングデバイスを使用して、トピックにサブスクライブすることができる。サブスクリプションシステムは、閾値量の時間の間、ユーザがコンピューティングデバイスと対話していないことを判定することができる。サブスクリプションモジュールは次いで、サブスクライブ解除通知をコンピューティングデバイスに送信することができる。サブスクライブ解除通知は、トピックからサブスクライブ解除されることを回避するために、ユーザがコンピューティングデバイスと対話しなければならない時間枠を含むことができる。
【００６７】
クライアントは、ユーザがアイドルでない限り、ユーザのサブスクリプションがアクティブのままであることを保証する。即ち、ユーザがアイドルでない限り、クライアントは、再サブスクリプション要求をサブスクリプションシステムに発行することができる。従って、サブスクリプションシステムは、サブスクリプションを維持するために、非アイドルユーザが継続して再サブスクライブすることは要さない。
【００６８】
ユーザのサブスクリプションはまた、サブスクリプションシステムに接続されたコンピューティングデバイス上でユーザが現在見ているものに基づいていてもよい。例えば、ユーザは、ユーザのデバイスによって現在ディスプレイされている投稿にサブスクライブすることができる。投稿がもはやデバイス上に見えない場合（例えば、ユーザが投稿から離れて移動する場合）、サブスクリプションモジュールは、投稿からユーザを自動的にサブスクライブ解除することができる。
【００６９】
本明細書で説明された主題の実施形態ならびにアクション及び動作は、本明細書で開示された構造及びそれらの構造的等価物を含む、デジタル電子回路で、有形に具現化されたコンピュータソフトウェア若しくはファームウェアで、コンピュータハードウェアで、又はそれらの１つ又は複数の組合せで実装されてよい。本明細書で説明された主題の実施形態は、１つ又は複数のコンピュータプログラムとして、即ち、データ処理装置による実行のために、又はデータ処理装置の動作を制御するために、有形の非一時的な記憶媒体上で符号化されたコンピュータプログラム命令の１つ又は複数のモジュールとして実装されてよい。代替的に、又は加えて、プログラム命令は、人工的に生成された伝播信号上で、例えば、データ処理装置による実行のために好適な受信機装置への伝送用に情報を符号化するために生成される、マシン生成された電気信号、光学信号、又は電磁信号上で符号化されてもよい。コンピュータ記憶媒体は、マシン可読ストレージデバイス、マシン可読ストレージ基板、ランダム若しくはシリアルアクセスメモリデバイスであっても、又はそれらの一部であっても、又はそれらのうちの１つ又は複数の組合せであってもよい。コンピュータ記憶媒体は、伝播信号ではない。
【００７０】
用語「データ処理装置」は、プログラマブルプロセッサ、コンピュータ、又は多数のプロセッサ若しくはコンピュータを例として含む、データを処理するための全ての種類の装置、デバイス、及びマシンを包含する。データ処理装置は、特殊目的論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、又はＧＰＵ（グラフィックス処理ユニット）を含むことができる。装置はまた、ハードウェアに加えて、コンピュータプログラムのための実行環境を作り出すコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、又はそれらのうちの１つ又は複数の組合せを組成するコードを含むことができる。
【００７１】
プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリ、モジュール、ソフトウェアモジュール、エンジン、スクリプト、若しくはコードとも称される、又はそれらとして説明されることがあるコンピュータプログラムは、コンパイル型若しくはインタープリタ型言語、又は宣言型若しくは手続き型言語を含む任意の形式のプログラミング言語で書かれてよく、それは、スタンドアロンプログラムとして、又はモジュール、コンポーネント、エンジン、サブルーチン、若しくはコンピューティング環境における実行に好適な他のユニットとして含む任意の形式で配置されてよく、その環境は、１つ又は複数の位置におけるデータ通信ネットワークによって相互接続された１つ又は複数のコンピュータを含むことができる。
【００７２】
コンピュータプログラムは、必須ではないものの、ファイルシステムにおけるファイルに対応してよい。コンピュータプログラムは、例えば、マークアップ言語ドキュメントに、問題となるプログラムに専用の単一のファイルに、又は、例えば１つ又は複数のモジュール、サブプログラム、若しくはコードの部分を記憶するファイルなどの多数の調整されたファイルに、記憶される１つ又は複数のスクリプトなどの、他のプログラム又はデータを保持するファイルの部分に記憶されてもよい。
【００７３】
本明細書で説明されるプロセス及び論理フローは、入力データに操作し、出力を生成することによって動作を実施するように１つ又は複数のコンピュータプログラムを実行する１つ又は複数のコンピュータによって実施されてよい。プロセス及び論理フローはまた、特殊目的論理回路、例えば、ＦＰＧＡ、ＡＳＩＣ、若しくはＧＰＵによって、又は特殊目的論理回路と１つ又は複数のプログラムされたコンピュータとの組合せによって実施されてもよい。
【００７４】
コンピュータプログラムの実行に好適なコンピュータは、汎用若しくは特殊目的マイクロプロセッサ、又は両方、又は任意の他の種類の中央処理ユニットに基づいていてよい。概して、中央処理ユニットは、読み出し専用メモリ若しくはランダムアクセスメモリ、又は両方から、命令及びデータを受信することになる。コンピュータの不可欠な要素は、命令を実行するための中央処理ユニット、ならびに命令及びデータを記憶するための１つ又は複数のメモリデバイスである。中央処理ユニット及びメモリは、特殊目的論理回路によって補われても、又は特殊目的論理回路に組み込まれてもよい。
【００７５】
概して、コンピュータはまた、１つ又は複数の大容量ストレージデバイスを含む、又は１つ又は複数の大容量ストレージデバイスに動作可能に結合されて、そこからデータを受信する、又はそこにデータを転送することになる。大容量ストレージデバイスは、例えば、磁気的な、磁気光学的な、若しくは光学的なディスク、又はソリッドステートドライブであってよい。しかし、コンピュータは、そのようなデバイスを有する必要はない。その上、コンピュータは、別のデバイス、例えば、数例を挙げれば、モバイル電話、パーソナルデジタルアシスタント（ＰＤＡ）、モバイルオーディオ若しくはビデオプレーヤ、ゲームコンソール、全地球測位システム（ＧＰＳ）受信機、又はポータブルストレージデバイス、例えば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブに埋め込まれていてもよい。
【００７６】
ユーザとの対話を提供するために、本明細書で説明される主題の実施形態は、例えば、ＬＣＤ（液晶ディスプレイ）モニタなどの、ユーザに情報をディスプレイするためのディスプレイデバイスと、例えば、キーボード、及びマウス、トラックボール、又はタッチパッドなどのポインティングデバイスなどの、ユーザがそれによってコンピュータに入力を提供することができる入力デバイスとを有するコンピュータ上で実装されても、又はそれらを有するコンピュータと通信するように構成されてもよい。他の種類のデバイスも同様にユーザとの対話を提供するために使用されてよく、例えば、ユーザに提供されるフィードバックは、例えば、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックなどの任意の形式の感覚フィードバックであってもよく、ユーザからの入力は、音響、スピーチ、又は触覚入力を含む任意の形式で受信されてもよい。加えて、ユーザによって使用されるデバイスにドキュメントを送信し、デバイスからドキュメントを受信することによって、例えば、ウェブブラウザから受信された要求に応答して、ユーザのデバイス上でウェブブラウザにウェブページを送信することによって、又は、例えば、スマートフォン若しくは電子タブレットなどのユーザデバイス上で稼働するアプリと対話することによって、コンピュータは、ユーザと対話することができる。また、テキストメッセージ又は他の形式のメッセージを、例えば、メッセージングアプリケーションを稼働しているスマートフォンなどのパーソナルデバイスに送信し、返信としてユーザから応答メッセージを受信することによって、コンピュータは、ユーザと対話することができる。
【００７７】
本明細書で説明された主題の実施形態は、例えば、データサーバとしてのバックエンドコンポーネントを含むコンピューティングシステムにおいて、又は、例えば、アプリケーションサーバなどのミドルウェアコンポーネントを含むコンピューティングシステムにおいて、又は、ユーザがそれを通して本明細書で説明された主題の実装と対話することができる、例えば、グラフィカルユーザインターフェース、ウェブブラウザ、若しくはアプリを有するクライアントコンピュータなどのフロントエンドコンポーネントを含むコンピューティングシステムにおいて、又は、１つ又は複数のそのようなバックエンド、ミドルウェア、若しくはフロントエンドコンポーネントの任意の組合せにおいて実装されてよい。システムのコンポーネントは、例えば、通信ネットワークなどのデジタルデータ通信の任意の形式又は媒体によって相互接続されていてよい。通信ネットワークの例は、ローカルエリアネットワーク（ＬＡＮ）、及びワイドエリアネットワーク（ＷＡＮ）、例えば、インターネットを含む。
【００７８】
コンピューティングシステムは、クライアントとサーバとを含むことができる。クライアントとサーバとは、概して互いにリモートであり、通常、通信ネットワークを通して対話する。クライアントとサーバとの関係は、それぞれのコンピュータ上で稼働し、互いにクライアント−サーバ関係を有する、コンピュータプログラムのおかげで生まれる。いくつかの実施形態において、サーバは、例えば、クライアントとして働くデバイスと対話するユーザにデータをディスプレイし、ユーザからユーザ入力を受信する目的のために、データ、例えば、ＨＴＭＬページをユーザデバイスに伝送する。ユーザデバイスで生成されたデータ、例えば、ユーザ対話の結果は、デバイスからサーバで受信されてもよい。
【００７９】
本明細書は多くの具体的な実装の詳細を収めているが、これらは、開示されるものの範囲、又は特許請求される、若しくは特許請求され得るものの範囲への制限として解釈されるべきではなく、むしろ、特定の実施形態に具体的であり得る特徴の説明として解釈されるべきである。別々の実施形態のコンテキストにおいて本明細書で説明された一定の特徴はまた、単一の実施形態において組み合わせて実装されてもよい。逆に言えば、単一の実施形態のコンテキストにおいて説明された様々な特徴はまた、多数の実施形態において別々に、又は任意の好適な下位組合せにおいて実装されてもよい。その上、特徴が一定の組合せにおいて作用するものとして上で説明され、最初にそのように特許請求され得るとしても、特許請求された組合せからの１つ又は複数の特徴は、いくつかの事例において、組合せから削られることがあり、請求は、下位組合せ又は下位組合せの変形に向けられることがある。
【００８０】
同様に、動作は、特定の順序で、図面に描かれ、特許請求の範囲に記載されるが、これは、そのような動作が、所望の結果を達成するために、示された特定の順序若しくはシーケンシャルな順序で実施されること、又は全ての例証された動作が実施されることを要するものとして理解されるべきではない。一定の事情においては、マルチタスキング及び並列処理が有利であることがある。その上、上で説明された実施形態における様々なシステムモジュール及びコンポーネントの分離は、全ての実施形態においてそのような分離を要するものとして理解されるべきではなく、説明されたプログラムコンポーネント及びシステムは、概して、単一のソフトウェア製品において一緒に統合されても、又は多数のソフトウェア製品の中にパッケージされてもよいことが理解されるべきである。
【００８１】
本主題の特定の実施形態が説明された。他の実施形態は、以下の請求項の範囲内にある。例えば、請求項に記載されたアクションは、異なる順序で実施されてもよく、なおも所望の結果を達成することができる。一例として、付属する図面に描かれたプロセスは、所望の結果を達成するために、示された特定の順序又はシーケンシャルな順序を必ずしも要さない。いくつかの事例においては、マルチタスキング及び並列処理が有利であることがある。
【図１】
2021535515.tif 000003
【図２】
2021535515.tif 000004
【図３】
2021535515.tif 000005
【国際調査報告】
2021535515.tif 000006
2021535515.tif 000007
2021535515.tif 000008
2021535515.tif 000009