(57)【要約】  クライアントデバイスにメッセージを提供するためにコンピュータストレージ媒体上に符号化されたコンピュータプログラムを含む方法、システム、及び装置を記述する。ある一定の例では、メッセージのストリームは、所望のメッセージ給送速度でクライアントデバイスのメッセージングアプリケーションに提供される。メッセージングアプリケーションによるメッセージのストリームのメッセージダウンロード速度がモニタされる。メッセージダウンロード速度が所望のメッセージ給送速度よりも遅いという決定が行われる。応答して、メッセージのストリームは、所望のメッセージ給送速度でクライアントデバイスのバッファに提供され、バッファからのメッセージのストリームは、メッセージダウンロード速度でメッセージングアプリケーションに送信される。メッセージダウンロード速度が所望のメッセージ給送速度よりも速いという決定が行われ、応答して、バッファ上に格納されたメッセージの量を減らすことができる。バッファ上に格納されたメッセージの量がゼロであるという決定が行われ、応答して、メッセージのストリームは、所望のメッセージ給送速度でメッセージングアプリケーションに提供される。【選択図】      図４Ｄ
2018532201.tif 000002
【特許請求の範囲】
【請求項１】
送信機からのメッセージのストリームをクライアントデバイスで受信する段階と、
前記メッセージのストリームを前記送信機に関連付けられた所望のメッセージ給送速度で前記クライアントデバイス上のメッセージングアプリケーションに提供する段階と、
前記メッセージングアプリケーションによる前記メッセージのストリームのメッセージダウンロード速度をモニタする段階と、
前記メッセージダウンロード速度が前記所望のメッセージ給送速度よりも遅いと決定し、応答して、
前記メッセージのストリームを前記所望のメッセージ給送速度で前記クライアントデバイス上のバッファに提供し、かつ
前記バッファから前記メッセージのストリームを前記メッセージダウンロード速度で前記メッセージングアプリケーションに送信する段階と、
前記メッセージダウンロード速度が前記所望のメッセージ給送速度よりも速いと決定し、応答して、前記バッファ上に格納されたメッセージの量を減少させる段階と、
前記バッファ上に前記格納されたメッセージの量がゼロであると決定し、応答して、前記メッセージのストリームを前記所望のメッセージ給送速度で前記メッセージングアプリケーションに提供する段階と、
を１又は２以上のコンピュータによって行う段階、
を含むことを特徴とする方法。
【請求項２】
前記メッセージのストリームは、ＰｕｂＳｕｂシステム内の単一チャネルに対応することを特徴とする請求項１に記載の方法。
【請求項３】
前記メッセージのストリームは、ＰｕｂＳｕｂシステム内の複数のチャネルに対応することを特徴とする請求項１に記載の方法。
【請求項４】
前記バッファは、各バッファが前記複数のチャネル内の１つのチャネルに対応する複数のバッファを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記送信機は、ＰｕｂＳｕｂシステム内のＭＸノードを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記所望のメッセージ給送速度は、メッセージがＰｕｂＳｕｂシステム内で発行される速度に対応することを特徴とする請求項１に記載の方法。
【請求項７】
前記ダウンロード速度は、前記メッセージングアプリケーションがメッセージをダウンロードすることができる最大速度に対応することを特徴とする請求項１に記載の方法。
【請求項８】
前記バッファから前記メッセージのストリームを前記クライアントデバイスに送信する段階は、メッセージを該メッセージが該バッファによって受信された順序で送信する段階を含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記バッファ上に前記格納されたメッセージの量は、前記所望のメッセージ給送速度が前記メッセージダウンロード速度よりも速い時に増えることを特徴とする請求項１に記載の方法。
【請求項１０】
前記バッファ上に前記格納されたメッセージの量は、前記所望のメッセージ給送速度が前記メッセージダウンロード速度よりも遅い時に減少することを特徴とする請求項１に記載の方法。
【請求項１１】
命令をそこに格納した非一時的コンピュータ可読媒体と、
送信機からのメッセージのストリームをクライアントデバイスで受信する段階、
前記メッセージのストリームを前記送信機に関連付けられた所望のメッセージ給送速度で前記クライアントデバイス上のメッセージングアプリケーションに提供する段階、
前記メッセージングアプリケーションによる前記メッセージのストリームのメッセージダウンロード速度をモニタする段階、
前記メッセージダウンロード速度が前記所望のメッセージ給送速度よりも遅いと決定し、応答して、
前記メッセージのストリームを前記所望のメッセージ給送速度で前記クライアントデバイス上のバッファに提供し、かつ
前記バッファから前記メッセージのストリームを前記メッセージダウンロード速度で前記メッセージングアプリケーションに送信する段階、
前記メッセージダウンロード速度が前記所望のメッセージ給送速度よりも速いと決定し、応答して、前記バッファ上に格納されたメッセージの量を減少させる段階、及び
前記バッファ上に前記格納されたメッセージの量がゼロであると決定し、応答して、前記メッセージのストリームを前記所望のメッセージ給送速度で前記メッセージングアプリケーションに提供する段階、
を含む作動を行うために前記命令を実行するように構成されたデータ処理装置と、
を含むことを特徴とするシステム。
【請求項１２】
前記メッセージのストリームは、ＰｕｂＳｕｂシステム内の単一チャネルに対応することを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記メッセージのストリームは、ＰｕｂＳｕｂシステム内の複数のチャネルに対応することを特徴とする請求項１１に記載のシステム。
【請求項１４】
前記バッファは、各バッファが前記複数のチャネル内の１つのチャネルに対応する複数のバッファを含むことを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記送信機は、ＰｕｂＳｕｂシステム内のＭＸノードを含むことを特徴とする請求項１１に記載のシステム。
【請求項１６】
前記所望のメッセージ給送速度は、メッセージがＰｕｂＳｕｂシステム内で発行される速度に対応することを特徴とする請求項１１に記載のシステム。
【請求項１７】
前記ダウンロード速度は、前記メッセージングアプリケーションがメッセージをダウンロードすることができる最大速度に対応することを特徴とする請求項１１に記載のシステム。
【請求項１８】
前記バッファから前記メッセージのストリームを前記クライアントデバイスに送信する段階は、メッセージを該メッセージが該バッファによって受信された順序で送信する段階を含むことを特徴とする請求項１１に記載のシステム。
【請求項１９】
前記バッファ上に前記格納されたメッセージの量は、前記所望のメッセージ給送速度が前記メッセージダウンロード速度よりも速い時に増えることを特徴とする請求項１１に記載のシステム。
【請求項２０】
前記バッファ上に前記格納されたメッセージの量は、前記所望のメッセージ給送速度が前記メッセージダウンロード速度よりも遅い時に減少することを特徴とする請求項１１に記載のシステム。
【請求項２１】
データ処理装置の処理モードを制御するための１又は２以上の非一時的ストレージ媒体に格納されたコンピュータプログラム製品であって、
送信機からのメッセージのストリームをクライアントデバイスで受信する段階、
前記メッセージのストリームを前記送信機に関連付けられた所望のメッセージ給送速度で前記クライアントデバイス上のメッセージングアプリケーションに提供する段階、
前記メッセージングアプリケーションによる前記メッセージのストリームのメッセージダウンロード速度をモニタする段階、
前記メッセージダウンロード速度が前記所望のメッセージ給送速度よりも遅いと決定し、応答して、
前記メッセージのストリームを前記所望のメッセージ給送速度で前記クライアントデバイス上のバッファに提供し、かつ
前記バッファから前記メッセージのストリームを前記メッセージダウンロード速度で前記メッセージングアプリケーションに送信する段階、
前記メッセージダウンロード速度が前記所望のメッセージ給送速度よりも速いと決定し、応答して、前記バッファ上に格納されたメッセージの量を減少させる段階、及び
前記バッファ上に前記格納されたメッセージの量がゼロであると決定し、応答して、前記メッセージのストリームを前記所望のメッセージ給送速度で前記メッセージングアプリケーションに提供する段階、
を含む作動を前記データ処理装置に行わせるために該データ処理装置によって実行可能である、
ことを特徴とする製品。
【請求項２２】
前記メッセージのストリームは、ＰｕｂＳｕｂシステム内の単一チャネルに対応することを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項２３】
前記メッセージのストリームは、ＰｕｂＳｕｂコンピュータプログラム製品内の複数のチャネルに対応することを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項２４】
前記バッファは、各バッファが前記複数のチャネル内の１つのチャネルに対応する複数のバッファを含むことを特徴とする請求項２３に記載のコンピュータプログラム製品。
【請求項２５】
前記送信機は、ＰｕｂＳｕｂコンピュータプログラム製品内のＭＸノードを含むことを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項２６】
前記所望のメッセージ給送速度は、メッセージがＰｕｂＳｕｂコンピュータプログラム製品内で発行される速度に対応することを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項２７】
前記ダウンロード速度は、前記メッセージングアプリケーションがメッセージをダウンロードすることができる最大速度に対応することを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項２８】
前記バッファから前記メッセージのストリームを前記クライアントデバイスに送信する段階は、メッセージを該メッセージが該バッファによって受信された順序で送信する段階を含むことを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項２９】
前記バッファ上に前記格納されたメッセージの量は、前記所望のメッセージ給送速度が前記メッセージダウンロード速度よりも速い時に増えることを特徴とする請求項２１に記載のコンピュータプログラム製品。
【請求項３０】
前記バッファ上に前記格納されたメッセージの量は、前記所望のメッセージ給送速度が前記メッセージダウンロード速度よりも遅い時に減少することを特徴とする請求項２１に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
〔関連出願への相互参照〕
この出願は、これによりその開示が引用によって本明細書に全体的に組み込まれる２０１５年１０月１６日出願の米国特許出願第１の４／８８５，０３４号に対する優先権を主張するものである。
【０００２】
本明細書は、データ通信システム、特に、リアルタイムのスケーラブル発行（出版）−購読（publish-subscribe）メッセージングを実施するシステムに関する。
【背景技術】
【０００３】
発行−購読パターン（又は「ＰｕｂＳｕｂ」）は、いわゆる発行者が、トピックに対するメッセージを発行し、いわゆる購読者が、購読している特定のトピックに関するメッセージを受信するソフトウエアシステムによって実施されるデータ通信メッセージング取り決めである。トピック毎に１又は２以上の発行者が存在する可能性があり、発行者は、一般的に、どの購読者が、もし居れば、発行されたメッセージを受信するかの知識を持っていない。一部のＰｕｂＳｕｂシステムは、メッセージをキャッシュに入れず、又は小さいキャッシュを有し、購読者が、特定のトピックに対する購読予約の時点の前で発行されたメッセージを受信しない場合があることを意味する。ＰｕｂＳｕｂシステムは、メッセージ発行のサージ中又は特定のトピックに対する購読者の数が増加する時に性能不安定を受け易い可能性がある。更に、既存のＰｕｂｓｕｂシステムは、クライアントデバイス上で可能なかぎり多くの事象及びメッセージの処理を試みる場合がある。これは、メッセージの流れがクライアントデバイスにとって多すぎる時に性能劣化に至る。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書に説明するシステム及び方法の例は、ユーザのクライアントデバイスで受信されたメッセージ及び他のデータを処理するために使用される。クライアントデバイス上のメッセージングアプリケーションが、メッセージがクライアントデバイス上で受信される速度に対応できない事例では、メッセージは、クライアントデバイス上のバッファに迂回される。次にバッファは、好ましくはメッセージが受信された順序でメッセージをメッセージングアプリケーションに転送する。バッファは一時的にメッセージデータを格納し、メッセージングアプリケーションが処理できる速度（例えば、メッセージングアプリケーションの最大ダウンロード速度）でメッセージをメッセージングアプリケーションに送信する。一般的に、バッファは、メッセージがバッファからメッセージングアプリケーションに転送されるよりも速くバッファがメッセージを受信する時にメッセージデータを累積する。同様に、バッファは、メッセージがバッファからメッセージングアプリケーションに転送されるよりも遅い速度でバッファがメッセージを受信する時に、より少ないメッセージを格納する。従って、バッファは、メッセージングアプリケーションに適した速度でメッセージングアプリケーションにメッセージを提供することができ、これによってメッセージングデバイスは適正な順序及び適正な速度でメッセージを受信する。これは、メッセージングアプリケーションがメッセージを過度に迅速に受信する場合があり、結果として過負荷に起因してある一定のメッセージを落とす及び／又はクラッシュする場合がある先行技術のシステムに関連付けられた問題を回避する。
【０００５】
一般的に、本明細書に説明する主題の一態様は、方法に関する。本方法は、送信機からのメッセージのストリームをクライアントデバイスで受信する段階、送信機に関連付けられた所望のメッセージ給送速度でクライアントデバイスのメッセージングアプリケーションにメッセージのストリームを提供する段階、メッセージングアプリケーションによるメッセージのストリームのメッセージダウンロード速度をモニタする段階、メッセージダウンロード速度が所望のメッセージ給送速度よりも遅いと決定し、応答して、所望のメッセージ給送速度でクライアントデバイスのバッファにメッセージのストリームを提供し、メッセージダウンロード速度でバッファからのメッセージのストリームをメッセージングアプリケーションに送信する段階、メッセージダウンロード速度が所望のメッセージ給送速度よりも速いと決定し、応答して、バッファ上に格納されたメッセージの量を減少させる段階、及びバッファ上に格納されたメッセージの量がゼロであると決定し、応答して所望のメッセージ給送速度でメッセージのストリームをメッセージングアプリケーションに提供する段階を１又は２以上のコンピュータによって行う段階を含む。
【０００６】
ある一定の例では、メッセージのストリームは、Ｐｕｂｓｕｂシステム内の単一のチャネル、又はこれに代えてＰｕｂｓｕｂシステム内の複数のチャネルに対応する。バッファは複数のバッファを含むことができ、複数のバッファの各バッファは、複数のチャネルの１つのチャネルに対応することができる。様々な事例では、送信機は、ＰｕｂＳｕｂシステムのＭＸノードであるか又はこれを含む。所望のメッセージ給送速度は、メッセージがＰｕｂＳｕｂシステムで発行される速度に対応することができる。一部の実施では、ダウンロード速度は、メッセージングアプリケーションがメッセージをダウンロードすることができる最大速度に対応する。ダウンロード速度は、例えばクライアントデバイスの所望のリフレッシュ速度に依存する場合がある。
【０００７】
一部の例では、バッファからのメッセージのストリームをクライアントデバイスに送信する段階は、メッセージがバッファによって受信された順序でメッセージを送信する段階を含むことができる。一般的には、所望のメッセージ給送速度がメッセージダウンロード速度よりも速い時はバッファ上に格納されたメッセージの量が増える（例えばメッセージデータがバッファで累積される）。様々な例では、所望のメッセージ給送速度がメッセージダウンロード速度よりも遅い時はバッファ上に格納されたメッセージの量が減少する。
【０００８】
別の態様では、本開示の主題は、命令をそこに格納した非一時的コンピュータ可読媒体を含むシステムに関する。本発明のシステムはまた、送信機からのメッセージのストリームをクライアントデバイスで受信する段階、送信機に関連付けられた所望のメッセージ給送速度でメッセージのストリームをクライアントデバイスのメッセージングアプリケーションに提供する段階、メッセージングアプリケーションによるメッセージのストリームのメッセージダウンロード速度をモニタする段階、メッセージダウンロード速度が所望のメッセージ給送速度よりも遅いと決定し、応答して、所望のメッセージ給送速度でメッセージのストリームをクライアントデバイスのバッファに提供し、メッセージダウンロード速度でバッファからのメッセージのストリームをメッセージングアプリケーションに送信する段階、メッセージダウンロード速度が所望のメッセージ給送速度よりも速いと決定し、応答して、バッファ上に格納されたメッセージの量を減少させる段階、及びバッファ上に格納されたメッセージの量がゼロであると決定し、応答して、所望のメッセージ給送速度でメッセージのストリームをメッセージングアプリケーションに提供する段階を含む作動を行うために命令を実行するよう構成されたデータ処理装置を含む。
【０００９】
ある一定の例では、メッセージのストリームは、ＰｕｂＳｕｂシステム内の単一のチャネルに、又はこれに代えてＰｕｂＳｕｂシステム内の複数のチャネルに対応する。バッファは、複数のバッファを含むことができ、複数のバッファの各バッファは、複数のチャネルの１つのチャネルに対応することができる。様々な事例では、送信機は、ＰｕｂＳｕｂシステムのＭＸノードであるか又はこれを含む。所望のメッセージ給送速度は、メッセージがＰｕｂＳｕｂシステムで発行される速度に対応することができる。一部の実施では、ダウンロード速度は、メッセージングアプリケーションがメッセージをダウンロードすることができる最大速度に対応する。ダウンロード速度は、例えばクライアントデバイスの所望のリフレッシュ速度に依存する場合がある。
【００１０】
一部の例では、バッファからのメッセージのストリームをクライアントデバイスに送信する段階は、メッセージがバッファによって受信された順序でメッセージを送信する段階を含むことができる。一般的に、所望のメッセージ給送速度がメッセージダウンロード速度よりも速い時にバッファ上に格納されたメッセージの量が増える（例えばメッセージデータがバッファに累積される）。様々な例では、所望のメッセージ給送速度がメッセージダウンロード速度よりも遅い時にバッファ上に格納されたメッセージの量が減少する。
【００１１】
別の態様では、本明細書に説明する主題は、データ処理装置の処理モードを制御するための１又は２以上の非一時的ストレージ媒体に格納されたコンピュータプログラム製品に具現化することができる。このコンピュータプログラム製品は、送信機からのメッセージのストリームをクライアントデバイスで受信する段階、送信機に関連付けられた所望のメッセージ給送速度でメッセージのストリームをクライアントデバイスのメッセージングアプリケーションに提供する段階、メッセージングアプリケーションによるメッセージのストリームのメッセージダウンロード速度をモニタする段階、メッセージダウンロード速度が所望のメッセージ給送速度よりも遅いと決定し、応答して、所望のメッセージ給送速度でメッセージのストリームをクライアントデバイスのバッファに提供し、メッセージダウンロード速度でバッファからのメッセージのストリームをメッセージングアプリケーションに送信する段階、メッセージダウンロード速度が所望のメッセージ給送速度よりも速いと決定し、応答して、バッファ上に格納されたメッセージの量を減少させる段階、及びバッファ上に格納されたメッセージの量がゼロであると決定し、応答して、所望のメッセージ給送速度でメッセージのストリームをメッセージングアプリケーションに提供する段階を含む作動をデータ処理装置に行わせるデータ処理装置によって実行可能である。
【００１２】
ある一定の例では、メッセージのストリームは、ＰｕｂＳｕｂシステム内の単一のチャネルに、又はこれに代えてＰｕｂＳｕｂシステム内の複数のチャネルに対応する。バッファは、複数のバッファを含むことができ、複数のバッファの各バッファは、複数のチャネルの１つのチャネルに対応することができる。様々な事例では、送信機は、ＰｕｂＳｕｂシステムのＭＸノードであるか又はこれを含む。所望のメッセージ給送速度は、メッセージがＰｕｂＳｕｂシステムで発行される速度に対応することができる。一部の実施では、ダウンロード速度は、メッセージングアプリケーションがメッセージをダウンロードすることができる最大速度に対応する。ダウンロード速度は、例えばクライアントデバイスの所望のリフレッシュ速度に依存する場合がある。
【００１３】
一部の例では、バッファからのメッセージのストリームをクライアントデバイスに送信する段階は、メッセージがバッファによって受信された順序でメッセージを送信する段階を含むことができる。一般的に、所望のメッセージ給送速度がメッセージダウンロード速度よりも速い時にバッファ上に格納されたメッセージの量が増える（例えばメッセージデータがバッファに累積される）。様々な例では、所望のメッセージ給送速度がメッセージダウンロード速度よりも遅い時はバッファ上に格納されたメッセージの量が減少する。
【００１４】
本明細書に説明する主題の１又は２以上の実施形態の詳細は、添付図面及び以下の説明に示している。本発明の主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１５】
【図１Ａ】ＰｕｂＳｕｂ通信パターンをサポートする例示的システムを示す図である。
【図１Ｂ】例示的クライアントデバイス上のソフトウエアの機能層を示す図である。
【図２】例示的メッセージングシステムの図である。
【図３Ａ】データをストリームレットに書き込む例示的方法のデータ流れ図である。
【図３Ｂ】ストリームレットからデータを読み取る例示的方法のデータ流れ図である。
【図４Ａ】メッセージデータをクライアントデバイスに提供するための例示的システムを示す略図である。
【図４Ｂ】メッセージデータをクライアントデバイスに提供する例示的システムを示す略図である。
【図４Ｃ】メッセージデータをクライアントデバイスに提供する例示的システムを示す略図である。
【図４Ｄ】メッセージデータをクライアントデバイスに提供する例示的システムを示す略図である。
【図４Ｅ】メッセージデータをクライアントデバイスに提供する例示的システムを示す略図である。
【図４Ｆ】メッセージデータをクライアントデバイスに提供する例示的システムを示す略図である。
【図５】メッセージデータをクライアントデバイスに提供する例示的方法の流れ図である。
【発明を実施するための形態】
【００１６】
図１Ａは、ＰｕｂＳｕｂ通信パターンをサポートする例示的システム１００を示している。発行者クライアント（例えば、発行者１）は、システム１００によってメッセージを指名チャネル（例えば、「チャネル１」）に発行することができる。メッセージは、テキスト、画像コンテンツ、音声コンテンツ、マルチメディアコンテンツ、ビデオコンテンツ、及びバイナリデータなどの１又は２以上を含むあらゆるタイプの情報を含むことができる。メッセージデータの他のタイプも可能である。購読者クライアント（例えば、購読者２）は、システム１００を使用して指名チャネルを購読予約し、かつ購読要求後に又は所与の位置（例えば、メッセージ番号又は時間オフセット）から発生するメッセージの受信を開始することができる。クライアントは、発行者及び購読者の両方とすることができる。
【００１７】
構成に応じて、ＰｕｂＳｕｂシステムは、以下のように分類することができる。
・１対１（１：１）。この構成では、チャネル毎に１人の発行者及び１人の購読者がいる。典型的な使用事例は、プライベートメッセージングである。
・１対多数（１：Ｎ）。この構成では、チャネル毎に１人の発行者と複数の購読者がいる。典型的な使用事例は、放送メッセージ（例えば、株価）である。
・多数対多数（Ｍ：Ｎ）。この構成では、単一チャネルに発行する多くの発行者がいる。
メッセージは、次に、複数の購読者に配信される。典型的な使用事例は、地図アプリケーションである。
【００１８】
指名チャネルを生成するのに必要な個別の作動はない。チャネルが購読された時又はメッセージがチャネルに発行された時にチャネルが暗黙的に生成される。一部の実施では、チャネル名は、名前空間によって限定することができる。名前空間は、１又は２以上のチャネル名を含む。異なる名前空間は、曖昧さを生じることなく同じチャネル名を有することができる。名前空間名は、名前空間及びチャネネームがドットによって分けられる場合のチャネル名の接頭辞とすることができる。一部の実施では、チャネル許可設定を指定する時に名前空間を使用することができる。例えば、メッセージングシステム１００は、ａｐｐ１．ｆｏｏ及びａｐｐ１．ｓｙｓｔｅｍ．ｎｏｔｉｆｉｃａｔｉｏｎｓチャネルを有することができ、ここで「ａｐｐｌ」は、名前空間の名称である。本発明のシステムは、クライアントがａｐｐｌ．ｆｏｏチャネルを購読及び発行することを可能にすることができる。しかし、クライアントは、ａｐｐｌ．ｓｙｓｔｅｍ．ｎｏｔｉｆｉｃａｔｉｏｎｓチャネルを発行しないが購読のみとすることができる。
【００１９】
図１Ｂは、例示的クライアントデバイス上のソフトウエアの機能層を示している。クライアントデバイス（例えば、クライアント１０２）は、例えば、パーソナルコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、スマートフォン、スマートウォッチ、又はサーバコンピュータのようなデータ処理装置である。他のタイプのクライアントデバイスも可能である。アプリケーション層１０４は、ＰｕｂＳｕｂシステム１００に統合することになるエンド−ユーザアプリケーションを含む。メッセージング層１０６は、アプリケーション層１０４がチャネル購読、メッセージ発行、メッセージ取り出し、ユーザ認証、及びユーザ許可のようなシステム１００のサービスを利用するプログラミングインタフェースである。一部の実施では、メッセージング層１０６との間で送られるメッセージは、ＪａｖａＳｃｒｉｐｔ（登録商標）オブジェクト表記（ＪＳＯＮ）オブジェクトとして符号化される。他のメッセージ符号化方式も可能である。
【００２０】
オペレーティングシステム１０８層は、クライアント１０２のオペレーティングシステムソフトウエアを含む。様々な実施では、持続的又は非持続的接続を使用してシステム１００にメッセージを送信する及びシステム１００からメッセージを受信することができる。持続的接続は、例えば、ネットワークソケットを使用して生成することができる。ＴＣＰ／ＩＰ層１１２のようなトランスポートプロトコルは、メッセージング層１０６によって使用されるシステム１００とのトランスポート制御プロトコル／インターネットプロトコル通信を実施し、接続を通じてシステム１００にメッセージを送信する。例えば、ユーザデータグラムプロトコル（ＵＤＰ）を含む他の通信プロトコルも可能である。更に別の実施では、任意的なトランスポート層セキュリティ（ＴＬＳ）層１１０を利用してメッセージの機密性を保証することができる。
【００２１】
図２は、例示的メッセージングシステム１００の図である。システム１００は、ＰｕｂＳｕｂ通信パターンを実施するための機能性を提供する。本発明のシステムは、例えば、１又は２以上の地理的な場所で１又は２以上のデータセンター１２２に配備することができるソフトウエア構成要素及びストレージを含む。本発明のシステムは、ＭＸノード（例えば、ＭＸノード又は多重化ノード２０２、２０４、及び２０６）、Ｑノード（例えば、Ｑノード又は待ち行列ノード２０８、２１０、及び２１２）、１又は２以上のチャネルマネージャノード（例えば、チャネルマネージャ２１４、２１５）、及び任意的に１又は２以上のＣノード（例えば、Ｃノード又はキャッシュノード２２０及び２２２）を含む。各ノードは、仮想機械又は物理機械（例えば、データ処理装置）で実行することができる。各ＭＸノードは、外部ネットワーク２１６を通じた１又は２以上の発行者及び／又は購読者接続の終端ポイントとして機能する。ＭＸノード、Ｑノード、Ｃノード、及びチャネルマネージャ間の内部通信は、例えば、内部ネットワーク２１８を通じて行われる。例示的に、ＭＸノード２０４をクライアント１０２からの購読者接続の終端とすることができる。各Ｑノードは、ＭＸノードによって消費するチャネルデータをバッファに入れる。チャネルに発行されたメッセージの順序付けられたシーケンスが論理的チャネルストリームである。例えば、３つのクライアントが所与のチャネルにメッセージを発行する場合に、クライアントによって発行された複合メッセージは、チャネルストリームを含む。メッセージは、チャネルストリーム内でクライアントによる発行の時間により、ＭＸノードによる受信の時間により、又はＱノードによる受信の時間によって順序付けることができる。チャネルストリームのメッセージを順序付けるための他の方法も可能である。１よりも多いメッセージが順序の同じ位置に割り当てられる場合に、順序の後ろのシーケンスを有するメッセージの１つを（例えば、ランダムに）選択することができる。各チャネルマネージャノードは、チャネルストリームをいわゆるストリームレットに分割することによってＱノードの負荷を管理する役割を果たす。ストリームレットは以下に詳しく説明する。任意的Ｃノードは、キャッシュ及びＱノードからの負荷除去を提供する。
【００２２】
例示的メッセージングシステム１００では、１又は２以上のクライアントデバイス（発行者及び／又は購読者）は、ＭＸノード（ＭＸ２０４など）へのそれぞれの持続的接続（例えば、ＴＣＰ接続）を設定する。ＭＸノードは、これらの接続の終端ポイントとして機能する。例えば、これらの接続によって運ばれた外部メッセージ（例えば、それぞれのクライアントデバイスとＭＸノード間）は、外部プロトコル（例えば、ＪＳＯＮ）に基づいて符号化することができる。ＭＸノードは、外部プロトコルを終了して外部メッセージを内部通信に翻訳し、逆も同様である。ＭＸノードは、クライアントの代わりにストリームレットを発行及び購読する。従って、ＭＸノードは、同じチャネルを購読又は発行するクライアントデバイスの要求を多重化及び融合することができ、従って、１つずつの代わりに１つとして複数のクライアントデバイスを表している。
【００２３】
例示的メッセージングシステム１００では、Ｑノード（例えば、Ｑノード２０８）は、１又は２以上のチャネルストリームの１又は２以上のストリームレットを格納することができる。ストリームレットは、チャネルストリームの一部分のためのデータバッファである。ストリームレットは、そのストレージが満杯である時に書込に対して閉じることになる。ストリームレットは、ストリームレットの有効期間（ＴＴＬ）が満了した時に読取及び書込に対して閉じて割り当てを解除する。例示的に、ストリームレットは、１ＭＢの最大サイズ及び３分のＴＴＬを有することができる。異なるチャネルが異なるＴＴＬによって制限されるストリームレットを有することができる。例えば、１つのチャネル内のストリームレットは、３分まで存在することができる一方、別のチャネル内のストリームレットは、１０分まで存在することができる。様々な実施では、ストリームレットは、Ｑノードで実行されるコンピュータ処理に対応する。コンピュータ処理は、ストリームレットのＴＴＬが満了した後に終了することができ、従って、例えば、Ｑノードに戻るコンピュータリソース（ストリームレット）を解放する。
【００２４】
クライアントデバイスから発行要求を受信した時に、ＭＸノード（例えば、ＭＸ２０４）は、チャネルマネージャ（例えば、チャネルマネージャ２１４）に要求してストリームレットへのアクセスを許可し、発行されるメッセージを書き込む。しかし、ＭＸノードがチャネル内のストリームレットへの書込アクセスを予め許可される（かつチャネルが書込に対して閉じていない）場合に、ＭＸノードは、ストリームレットにアクセスする許可を要求する必要なくこのストリームレットにメッセージを書き込むことができることに注意されたい。メッセージがチャネル内のストリームレットに書き込まれた状態で、メッセージは、ＭＸノードによって読み取られ、このチャネルの購読者に提供することができる。
【００２５】
同様に、クライアントデバイスからチャネル購読要求を受信した時に、ＭＸノードは、チャネル内のストリームレットへのアクセスの許可をチャネルマネージャに要求してメッセージを読み取る。ＭＸノードがチャネル内のストリームレットへの読取アクセスを予め許可されている（かつチャネルのＴＴＬが読取に対して閉じていない）場合に、ＭＸノードは、ストリームレットにアクセスする許可を要求する必要なくストリームレットからメッセージを読み取ることができる。読取メッセージは、チャネルに購読予約したクライアントデバイスに転送することができる。様々な実施では、ストリームレットから読み取られたメッセージは、ＭＸノードによってキャッシュに入れられ、それによってＭＸノードは、ストリームレットから読み取るのに必要な時間数を低減することができる。
【００２６】
例示的に、ＭＸノードは、ＭＸノードが特定のチャネル内のストリームレットを格納する特定のＱノードのストリームレットにデータのブロックを格納することを可能にするチャネルマネージャからの許可を要求することができる。例示的ストリームレット許可要求及び許可データ構造は以下の通りである。
2018532201.tif 000003
【００２７】
ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔデータ構造は、ストリームｃｈａｎｎｅｌの名前及びＭＸノードがストリームレットからの読取又はストリームレットへの書込を意図するか否かを示すモードを格納する。ＭＸノードは、ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔをチャネルマネージャノードに送信する。チャネルマネージャノードは、相応にＭＸノードにＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔデータ構造を送信する。ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｓｐｏｎｓｅは、ストリームレットの識別子（ｓｔｒｅａｍｌｅｔ−ｉｄ）、ストリームレットの最大サイズ（ｌｉｍｉｔ−ｓｉｚｅ）、ストリームレットが格納することができるメッセージの最大数（ｌｉｍｉｔ−ｍｓｇｓ）、ＴＴＬ（ｌｉｍｉｔ−ｌｉｆｅ）、及びストリームレットが存在するＱノードの識別子（ｑ−ｎｏｄｅ）を含有する。ＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｑｕｅｓｔ及びＳｔｒｅａｍｌｅｔＧｒａｎｔＲｅｓｐｏｎｓｅはまた、ストリームレットから読み取るためのストリームレットの位置（又はチャネルの位置）を示す位置フィールドを有することができる。
【００２８】
許可は、ストリームレットが閉じた状態で無効になる。例えば、ストリームレットは、ストリームレットのＴＴＬが満了した状態で読取及び書込に対して閉じ、ストリームレットのストレージが満杯の時はストリームレットが書込に対して閉じる。許可が無効になった時に、ＭＸノードは、ストリームレットから読み取る又はストリームレットに書き込むためのチャネルマネージャからの新しい許可を要求することができる。新しい許可は、異なるストリームレットを参照することになり、かつ新しいストリームレットが存在する場所に応じて同じか又は異なるＱノードを意味することになる。
【００２９】
図３Ａは、様々な実施形態でデータをストリームレットに書き込む例示的方法のデータ流れ図である。図３Ａでは、ストリームレットに書き込むためのＭＸノード（例えば、ＭＸ２０２）要求が、上述のようにチャネルマネージャ（例えば、チャネルマネージャ２１４）によって許可された時に、ＭＸノードは、チャネルマネージャ（３０２）から受信した許可応答で識別されたＱノードとの送信制御プロトコル（ＴＣＰ）接続を確立する。ストリームレットは、複数の書込許可（例えば、複数の発行者クライアントによって発行されたメッセージに対する）によって同時に書き込むことができる。ＭＸノードとＱノード間の接続プロトコルの他のタイプも可能である。
【００３０】
ＭＸノードは、次に、ＭＸノードがＱノードに書き込みたいストリームレットの識別子を備えた準備−発行メッセージを送信する（３０４）。ストリームレット識別子及びＱノード識別子は、上述のように書込許可でチャネルマネージャによって提供することができる。Ｑノードは、識別されたストリームレットのハンドラ処理３０１（例えば、Ｑノードで実行されるコンピュータ処理）にメッセージを渡す（３０６）。ハンドラ処理は、ＭＸノードに肯定応答を送信することができる（３０８）。肯定応答を受信した後に、ＭＸノードは、識別されたストリームレットに受信したデータを格納するハンドラ処理へのメッセージの書込（発行）（例えば、３１０、３１２、３１４、及び３１８）を開始する。ハンドラ処理はまた、受信したデータの肯定応答（３１６、３２０）をＭＸノードに送信することができる。一部の実施では、肯定応答は、抱き合わせ又は累積的とすることができる。例えば、ハンドラ処理は、予め決められたデータ量が受信される毎に（例えば、１００メッセージが受信される毎に）、又は予め決められた時間毎に（例えば、１ミリ秒毎に）ＭＸノードに肯定応答を送信することができる。ネーグルのアルゴリズムのような他の肯定応答スケジューリングアルゴリズムを使用することもできる。
【００３１】
ストリームレットが、発行されたデータをそれ以上受け入れられない場合（例えば、ストリームレットが満杯の時）、ハンドラ処理は、問題を示す否定応答（ＮＡＫ）メッセージ（３３０）、次に、ＥＯＦ（ファイルの終わり）メッセージ（３３２）を送信する。従って、ハンドラ処理は、発行許可のためのＭＸノードとのアソシエーションを閉じる。ＭＸノードが格納する追加のメッセージを有する場合に、ＭＸノードは、チャネルマネージャから別のストリームレットの書込許可を要求することができる。
【００３２】
図３Ｂは、様々な実施形態におけるストリームレットからデータを読み取る例示的方法のデータ流れ図である。図３Ｂでは、ＭＸノード（例えば、ＭＸ２０２）は、チャネルマネージャ（例えば、チャネルマネージャ２１４）に特定のメッセージから始まる特定のチャネル又はチャネルの時間オフセットを読み取るための要求を送信する。チャネルマネージャは、特定のメッセージを含有するストリームレットの識別子、特定のメッセージに対応するストリームレットにおける位置、及び特定のストリームレットを含有するＱノード（例えば、Ｑノード２０８）の識別子を含む読取許可をＭＸノードに戻す。ＭＸノードは、ＱノードとのＴＣＰ接続を確立する（３５２）。ＭＸノードとＱノード間の接続プロトコルの他のタイプも可能である。
【００３３】
ＭＸノードは、ストリームレットの識別子（Ｑノード内）及びＭＸノードが読み取りたいストリームレットの位置を備えた購読メッセージをＱノードに送信する（３５６）。Ｑノードは、購読メッセージをストリームレットのハンドラ処理３５１に渡す（３５６）。ハンドラ処理は、ＭＸノードに肯定応答を送信することができる（３５８）。ハンドラ処理は、ストリームレットの位置で開始されるメッセージ（３６０、３６４、３６６）をＭＸノードに送信する。一部の実施では、ハンドラ処理は、ストリームレットのメッセージの全てをＭＸノードに送信することができる。特定のストリームレット内の最後のメッセージを送信した後に、ハンドラ処理は、最後のメッセージの通知をＭＸノードに送信することができる。ＭＸノードは、特定のチャネル内の次のメッセージを含有する別のストリームレットに対する別の要求をチャネルマネージャに送信することができる。
【００３４】
特定のストリームレットが閉じた場合（例えば、特定のストリームレットのＴＴＬが満了した後）、ハンドラ処理は、非購読メッセージ（３９０）、次に、ＥＯＦメッセージ（３９２）を送信して読取許可のためのＭＸノードとのアソシエーションを閉じることができる。ＭＸノードは、ＭＸノードが特定のチャネル内のメッセージのために別のストリームレットに移る（例えば、チャネルマネージャによって示されたように）時にハンドラ処理とのアソシエーションを閉じることができる。ＭＸノードは、ＭＸノードが、対応するクライアントデバイスから非購読メッセージを受信した場合に、ハンドラ処理とのアソシエーションを閉じることができる。
【００３５】
様々な実施では、ストリームレットは、同じ時間インスタンスに書き込み、かつ読み取ることができる。例えば、同じ時間インスタンスに有効読取許可及び有効書込許可を存在させることができる。様々な実施では、複数の読取許可（例えば、複数の発行者クライアントによって購読されるチャネルに対する）によって同時にストリームレットを読み取ることができる。ストリームレットのハンドラ処理は、例えば、到着時間に基づいて同時書込許可からのメッセージを順序付けし、その順序に基づいてメッセージを格納することができる。従って、複数の発行者クライアントからチャネルに発行されたメッセージは、チャネル内のストリームレットにシリアル化して格納することができる。
【００３６】
メッセージングシステム１００では、１又は２以上のＣノード（例えば、Ｃノード２２０）は、１又は２以上のＱノードからのデータ転送をアンロードすることができる。例えば、特定のチャネルのためのストリームレットをＱノードから要求する多くのＭＸノードが存在する場合に、ストリームレットをアンロードして１又は２以上のＣノードをキャッシュに入れることができる。ＭＸノード（例えば、チャネルマネージャから読取許可によって命令される）は、代わりにＣノードからストリームレットを読み取ることができる。
【００３７】
上述のように、メッセージングシステム１００内のチャネルのためのメッセージは、チャネルストリームで順序付けされる。チャネルマネージャ（例えば、チャネルマネージャ２１４）は、それぞれのＱノードに各々が存在する固定サイズストリームレットにチャネルストリームを分割する。従って、チャネルストリームの格納は、多くのＱノード間で共有することができ、各Ｑノードは、チャネルストリームの一部分（１又は２以上のストリームレット）を格納する。特に、ストリームレットは、Ｑノード上のコンピュータ処理に関連付けられたレジスタ及び動的メモリ要素に格納することができ、従って、ハードディスクのような持続性低速ストレージデバイスにアクセスする必要性を回避する。これは高速のメッセージアクセスをもたらす。チャネルマネージャは、Ｑノードのそれぞれのワークロードをモニタし、いかなる１つのＱノードの過負荷も回避する方法でストリームレットを割り当てることにより、メッセージングシステム１００のＱノード間の負荷の均衡を取ることができる。
【００３８】
様々な実施では、チャネルマネージャは、各アクティブストリームレット、ストリームレットが存在するそれぞれのＱノード、及びストリームレットの第１のメッセージの位置の識別、及びストリームレットが書込に対して閉じているか否かを識別するリストを維持する。一部の実施では、Ｑノードは、満杯であるために又はストリームレットのＴＴＬが満了した時にストリームレットが閉じていることをストリームレットに発行しているチャネルマネージャ及びあらゆるＭＸノードに通知する。ストリームレットが閉じている時に、ＭＸノードがストリームレットからメッセージの取り出しを継続することができるようにストリームレットのＴＴＬが満了するまでアクティブストリームレットのチャネルマネージャのリストにストリームレットが残る。
【００３９】
ＭＸノードが所与のチャネルに対する書込許可を要求して書き込むことができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Ｑノードの１つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びＳｔｒｅａｍｌｅｔＧｒａｎｔのＱノードを戻す。そうでなければ、チャネルマネージャは、ストリームレット及び対応するＱノードをＳｔｒｅａｍｌｅｔＧｒａｎｔに書き込むために現在開いているというアイデンティティを戻す。ＭＸノードは、ストリームレットが満杯になるか又はストリームレットのＴＴＬが満了するまでストリームレットにメッセージを発行することができ、この後で新しいストリームレットをチャネルマネージャによって割り当てることができる。
【００４０】
ＭＸノードが所与のチャネルの読取許可を要求して読み取ることができるチャネルのためのストリームレットがない時に、チャネルマネージャは、Ｑノードの１つに新しいストリームレットを割り当て、ストリームレットのアイデンティティ及びＳｔｒｅａｍｌｅｔＧｒａｎｔのＱノードを戻す。そうでなければ、チャネルマネージャは、ストリームレットのアイデンティティ及びＭＸノードが読み取りたい位置を含有するＱノードを戻す。Ｑノードは、送信するストリームレットのメッセージがなくなるまで指定された位置で始まるストリームレットからＭＸノードへのメッセージの送信を開始することができる。新しいメッセージがストリームレットに発行された時に、このストリームレットを購読しているＭＸノードは、新しいメッセージを受信する。ストリームレットのＴＴＬが満了した場合に、ハンドラ３５１は、ＥＯＦメッセージ（３９２）をストリームレットを購読するいずれのＭＸノードにも送信する。
【００４１】
図２に関して上述したように、メッセージングシステム１００は、複数のチャネルマネージャ（例えば、チャネルマネージャ２１４、２１５）を含むことができる。複数のチャネルマネージャは、弾力性を提供して単一障害点を回避する。例えば、１つのチャネルマネージャは、それが維持するストリームレットと現在の許可のリストとを別の「スレーブ」チャネルマネージャに複製することができる。別の例として、複数のチャネルマネージャは、Ｐａｘｏｓ又はＲａｆｔプロトコルのような分散コンセンサスプロトコルを使用して複数のチャネルマネージャ間で作動を調整することができる。
【００４２】
様々な例では、クライアントデバイスへのメッセージデータの転送をモニタ及び制御するためのシステム及び方法を提供する。メッセージのストリームをクライアントデバイスに送信する時に、本発明のシステム及び方法は、例えばクライアントデバイスの所望のリフレッシュ速度、又は所望のバイト／秒数に対応する場合がある所望のメッセージ転送速度でメッセージストリームの送信を試みる場合がある。高メッセージトラフィックの期間中、クライアントデバイスは、所望のメッセージ転送速度でメッセージストリームを受信又はダウンロードすることができない。例えば、クライアントデバイスのダウンロード速度は、所望のメッセージ転送速度よりも遅くなる可能性がある。このような事例では、メッセージストリームは、メッセージデータを格納又は累積してメッセージデータをクライアントデバイスに渡すことができるバッファに好ましくはバッファがメッセージデータを受信した順序で迂回させることができる。バッファがメッセージデータをクライアントデバイスに転送するよりも速く（例えば所望のメッセージ給送速度がクライアントデバイスのダウンロード速度よりも速いので）メッセージデータを受信する時に、メッセージデータはバッファに累積される。同様に、バッファがメッセージデータを受信するよりも速く（例えば、クライアントデバイスのダウンロード速度が所望のメッセージ給送速度よりも速いので）メッセージデータをクライアントデバイスに転送する時に、メッセージデータはバッファから排除される。バッファ上に格納されたメッセージの数がゼロに等しい時に、メッセージは、最初にバッファに迂回することなく、クライアントデバイスに再度直接送信することができる。
【００４３】
図４Ａは、メッセージデータの転送をモニタ及び制御するための例示的システム４００である。本発明のシステム４００は、メッセージをクライアントデバイス４０４に送信するメッセージ送信機４０２を含む。クライアントデバイス４０４は、コントローラ４０５、バッファ４０６、メッセージングアプリケーション４０７、及びセンサ４０８を含む。コントローラ４０５、バッファ４０６、及び／又はセンサ４０８は、好ましくはソフトウエアに実施される。本発明のシステム４００の作動中、送信機４０２（例えば、ＭＸノード）は、コントローラ４０５への入力経路４０９に沿ってクライアントデバイス４０４にメッセージのストリームを転送する。メッセージはコントローラ４０５を通過して一次経路４１０に沿ってメッセージングアプリケーション４０７に移動する。センサ４０８は、メッセージングアプリケーション４０７でメッセージのダウンロード速度をモニタしてダウンロード速度をフィードバック経路４１２に沿ってコントローラ４０５に報告する。
【００４４】
一般的に、送信機４０２は、メッセージストリームを所望のメッセージ給送速度でクライアントデバイス４０４に転送する。所望のメッセージ給送速度は、例えば送信機４０２がメッセージデータを受信してクライアントデバイス４０４に送信する速度とすることができ、又はそれに対応することができる。送信機４０２が高速でメッセージを受信した時に、送信機は、相応の高速でのクライアントデバイス４０４へのメッセージストリームの転送を試みることができる。従って、所望のメッセージ給送速度は、送信機４０２によって処理又は扱われるメッセージの数に従って経時的に変動する場合がある。
【００４５】
ある一定の事例では、メッセージングアプリケーション４０７は、所望のメッセージ給送速度でメッセージストリームを受信又はダウンロードすることができない。これが起こった時に、メッセージアプリケーション４０７のダウンロード速度及び能力をモニタしているセンサ４０８は、コントローラ４０５に命じて一次経路４１０に沿ったメッセージの送信を中止させ、代わりにバッファ入力経路４１４に沿ってバッファ４０６にメッセージを迂回させる。メッセージは、バッファ４０６からメッセージングアプリケーション４０７にバッファ出力経路４１６に沿って転送される。バッファ４０６は、メッセージを格納又は累積することができ、従ってメッセージを所望のメッセージ給送速度よりも遅い速度でバッファ４０６からメッセージングアプリケーション４０７に送信することができる。例えば、バッファ４０６からメッセージングアプリケーション４０７に送信される速度（本明細書では「バッファ給送速度」と呼ぶ）は、メッセージングアプリケーション４０７に関連付けられた最大ダウンロード速度（例えば、メッセージングアプリケーション４０７がメッセージをダウンロードすることができる最大速度）に等しくすることができる。この最大ダウンロード速度は固定値（例えば、メッセージングアプリケーション４０７又はクライアントデバイス４０４の所望のリフレッシュ速度に基づく）にすることができ、又は経時的に変えることができる。一部の実施では、最大ダウンロード速度がセンサ４０８によってモニタ及び検出される。
【００４６】
一般的に、バッファ４０６がメッセージを累積する速度は、所望のメッセージ給送速度とバッファ給送速度の関数である。所望のメッセージ給送速度がバッファ給送速度を超えた時に、バッファ４０６に格納されるメッセージの数が増える。所望の給送速度がバッファ給送速度よりも遅い時に、バッファ４０６に格納されるメッセージの数が減少する。
【００４７】
メッセージングアプリケーションは、好ましくはメッセージデータを閲覧又は受信するためにクライアントデバイスのユーザが使用するソフトウエアプログラムである。メッセージングアプリケーションは、例えば、テキストメッセージ、電子メール、ニュースフィード、画像、音楽、ビデオ、又はこれらの組合せを閲覧又は受信するためのソフトウエアプログラムとすることができる。メッセージングアプリケーションは、例えば、スマートフォン、タブレットコンピュータ、パーソナルコンピュータ、及びワークステーションを含む何れかの適切なクライアントデバイスに実施することができる。
【００４８】
図４Ｂから４Ｆは、一次経路４１０、バッファ入力経路４１４、及びバッファ出力経路４１６に沿って配信されているメッセージを示す。図４Ｂの例では、コントローラ４０５は、メッセージＭ１を一次経路４１０に沿ってメッセージングアプリケーション４０７に送信する。この瞬間に、メッセージングアプリケーション４０７は、所望のメッセージフォード速度に等しい速度でメッセージをダウンロードすることができる（例えば、所望のメッセージ給送速度は、メッセージングアプリケーション４０７の最大ダウンロード速度よりも遅い）。
【００４９】
後の時間に、図４Ｃに関して、コントローラ４０５は、別のメッセージＭ２を一次経路４１０に沿ってメッセージングアプリケーション４０７に送信するが、メッセージングアプリケーション４０７のダウンロード速度（例えば、センサ４０８によって測定される）は所望のメッセージ給送速度よりも遅い。送信機４０２が所望のメッセージ給送速度でメッセージの配信を続けることを可能にするために、コントローラ４０５は、次のメッセージＭ３をバッファ入力経路４１４に沿ってバッファ４０６に送信する。
【００５０】
更に別の瞬間に、図４Ｄに関して、コントローラ４０５は、バッファ入力経路４１４に沿ってバッファ４０６へのメッセージの送信を続け、メッセージは、バッファ４０６からバッファ出力経路４１６に沿ってメッセージングアプリケーション４０７に転送される。この時間に、メッセージＭ３は、バッファ４０６からメッセージングアプリケーション４０７に送信され、メッセージＭ８は、コントローラ４０５からバッファ４０６に送信される。バッファ４０６はまた、以前にコントローラ４０５から送信されてバッファ４０６によって受信されたメッセージＭ４からＭ７を格納中である。この時間の所望のメッセージ給送速度は、ダウンロード速度よりに速く、バッファ４０６に格納されるメッセージの数が増える。
【００５１】
後の時間に、図４Ｅに関して、バッファ４０６は、これ以上メッセージを格納せず、メッセージＭ８がバッファ４０６からメッセージングアプリケーション４０７に送信される。この時間に、所望のメッセージ給送速度は、メッセージングアプリケーション４０７のダウンロード速度よりも遅く、バッファ４０６に格納されるメッセージの数はゼロに減っている。バッファ４０６は今のところ空であり、メッセージングアプリケーション４０７は所望の給送速度でメッセージをダウンロードすることができ、コントローラ４０５は、図４Ｆに示すように、次のメッセージＭ９を一次経路４１０に沿ってメッセージングアプリケーション４０７に直接送信する。
【００５２】
様々な実施では、所望のメッセージ給送速度は、送信機４０２がメッセージを送信及び受信する速度に等しい。ＭＸノード又は他のＰｕｂＳｕｂシステムデバイスとすることができる送信機４０２は、メッセージのストリームを受信又は取得し、このメッセージをクライアントデバイス４０４に転送する。送信機４０２がメッセージを転送する速度は、送信機４０２がメッセージを受信する速度に等しくすることができる。送信機４０２は、好ましくはメッセージが受信された順序でメッセージを転送する。
【００５３】
一部の事例では、バッファ４０６が満杯であり、メッセージングアプリケーション４０７が追加のメッセージを受信できない時に、１つ又は２以上のメッセージ（例えば、最長期間バッファによって格納されているメッセージ）は、メッセージングアプリケーション４０７に送信することなくバッファバッファ４０６から削除することができる。この方式でメッセージを削除することでバッファ膨脹を回避することができる。
【００５４】
ある一定の例では、本発明のシステム４００は、処理制御方式を利用して送信機４０２からメッセージングアプリケーション４０７へのメッセージデータ転送の所望の速度を取得する。センサ４０８は、メッセージングアプリケーション４０７でダウンロード速度をモニタし、測定したダウンロード速度をコントローラ４０５（例えば、フィードバック経路４１２に沿って）及び／又は本発明のシステム４００の１又は２以上の他の構成要素に提供する。同様に、所望のメッセージ給送速度は、本発明のシステム４００のコントローラ４０５及び／又は１つ又は２以上の他の構成要素によってモニタされる。ダウンロード速度が所望のメッセージ給送速度よりも遅い（すなわち、メッセージングアプリケーション４０７が受信しているメッセージのフローレートに対処できない）時に、本発明のシステム４００によって使用されるコントローラ４０５又は処理コントローラ（例えばクライアントデバイス４０４内）は、メッセージをバッファ４０６に迂回させ、これによってメッセージングアプリケーション４０７におけるメッセージ入力要求を軽減する。コントローラ４０５は、ダウンロード速度及び所望のメッセージ給送速度のモニタリングを続ける。バッファ４０６が空である及び／又はクライアントデバイス４０４へのメッセージの流れを低減する必要がない時に、コントローラ４０５は、（例えば、最初にメッセージデータをバッファ４０６に通過させる必要なく）一次経路４１０に沿ってメッセージングアプリケーション４０７に直接メッセージを送信することを再開することができる。
【００５５】
代替の実施では、本発明のシステム４００は、一次経路４１０を含まなくてもよく、バッファ入力経路４１４及びバッファ出力経路４１６を使用してバッファ４０６を介して常にメッセージをメッセージングアプリケーション４０７に送信することができる。この構成では、所望のメッセージ給送速度がダウンロード速度を超えない時に、バッファ４０６は、メッセージデータを格納しなくてもよく、代わりにメッセージがメッセージングアプリケーション４０７に送信されるルートとして作用することができる。所望のメッセージ給送速度が本明細書で説明するようにダウンロード速度を超えた時に、バッファ４０６は必要に応じてメッセージを格納することができる。
【００５６】
図５は、ある一定の例に従ってメッセージデータをクライアントデバイスに提供する方法５００の流れ図である。送信機（例えばＰｕｂＳｕｂシステムのＭＸノード）からのメッセージのストリームがクライアントデバイスで受信される（段階５０１）。メッセージのストリームが、送信機に関連付けられた所望のメッセージ給送速度でクライアントデバイスのメッセージングアプリケーションに提供される（段階５０２）。所望のメッセージ給送速度は、例えば、メッセージがＰｕｂＳｕｂシステムで発行される速度とすることができる。メッセージングアプリケーションによるメッセージのストリームのメッセージダウンロード速度がモニタされる（段階５０４）。メッセージダウンロード速度が所望のメッセージ給送速度よりも遅いという決定が行われる（段階５０６）。応答して、メッセージのストリームは、所望のメッセージ給送速度でクライアントデバイスのバッファに提供され（段階５０８）、メッセージのストリームは、メッセージダウンロード速度でバッファからメッセージングアプリケーションに送信される（段階５１０）。メッセージダウンロード速度が所望のメッセージ給送速度よりも速いという決定が行われ（段階５１２）、応答して、バッファ上に格納されたメッセージの量を減らすことができる（段階５１４）。バッファ上に格納されたメッセージの量がゼロであるという決定が行われ（段階５１６）、応答して、メッセージのストリームが所望のメッセージ給送速度でメッセージングアプリケーションに提供される（段階５１８）。
【００５７】
本明細書に説明する主題及び作動の実施形態は、本明細書及び本明細書の構造的均等物又はこれらの１又は２以上の組合せで開示する構造を含むデジタル電子回路、又はコンピュータソフトウエア、ファームウエア、又はハードウエアを用いて実施することができる。本明細書に説明する主題の実施形態は、１又は２以上のコンピュータプログラムとして、すなわち、デジタル処理装置によって実行するために又はその作動を制御するためにコンピュータストレージ媒体上に符号化されるコンピュータプログラム命令の１又は２以上のモジュールとして実施することができる。これに代えて又はこれに加えて、プログラム命令は、人工的に生成された伝播信号、例えば、データ処理装置によって実行するのに適する受信装置に送信する情報を符号化するために生成される機械発生式電気、光学、又は電磁信号で符号化することができる。コンピュータストレージ媒体は、コンピュータ可読ストレージデバイス、コンピュータ可読ストレージ基板、ランダム又はシリアルアクセスメモリアレイ又はデバイス、又はこれらの１又は２以上の組合せとすることができ、又はこれらに含めることができる。更に、コンピュータストレージ媒体は伝播信号ではないが、コンピュータストレージ媒体は、人工的発生式伝播信号で符号化されたコンピュータプログラム命令のソース又は宛先とすることができる。コンピュータストレージ媒体は、１又は２以上の個別の物理的構成要素又は媒体（例えば、複数のＣＤ、ディスク、又は他のストレージデバイス）とすることができ、又はこれらに含めることができる。
【００５８】
本明細書に説明する作動は、１又は２以上のコンピュータ可読ストレージデバイスに格納されたか又は他のソースから受信したデータにデータ処理装置によって実行される作動として実施することができる。
【００５９】
「データ処理装置」という語は、一例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又はマルチプロセッサ、又は上述の組合せを含むデータを処理するための全ての種類の装置、デバイス、及び機械を網羅する。装置は、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）を含むことができる。装置は、ハードウエアに加えて、問題のコンピュータプログラムのための実行環境を生成するコード、例えば、プロセッサファームウエア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォーム実行時間環境、仮想機械、又はこれらの１又は２以上の組合せを構成するコードを含むことができる。装置及び実行環境は、ウェブサービス、分散コンピュータ及びグリッドコンピュータインフラストラクチャーのような様々な異なるコンピュータモデルインフラストラクチャーを実現することができる。
【００６０】
コンピュータプログラム（プログラム、ソフトウエア、ソフトウエアプリケーション、スクリプト、又はコードとしても公知）は、コンパイル又は解釈言語、宣言、手順、又は機能言語を含むプログラミング言語のあらゆる形態で書くことができ、独立プログラムとして又はモジュール、構成要素、サブルーチン、オブジェクト、又はコンピュータ環境に使用するのに適する他のユニットとして含むいずれの形態でも配備することができる。コンピュータプログラムは、ファイルシステムのファイルに対応することができるが、対応する必要はない。プログラムは、他のプログラム又はデータ（例えば、マークアップ言語リソースに格納された１又は２以上のスクリプト）を保持するファイルの一部分に、問題のプログラム専用単一ファイルに、又は複数の調節されたファイル（例えば、１又は２以上のモジュール、サブプログラム、又はコードの一部分を格納するファイル）に格納することができる。コンピュータプログラムは、１つのコンピュータ又は１つのサイトに位置するか又は複数のサイトにわたって分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるように配備される。
【００６１】
本明細書に説明した処理及び論理フローは、１又は２以上のコンピュータプログラムを実行する１又は２以上のプログラマブルプロセッサによって実行され、入力データを演算して出力を生成することによってアクションを実行することができる。処理及び論理フローは、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）によって実行することができ、装置は、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）として実施することができる。
【００６２】
コンピュータプログラムの実行に適するプロセッサは、一例として、汎用及び専用マイクロプロセッサの両方、及びあらゆる種類のデジタルコンピュータのいずれか１つ又はそれよりも多いプロセッサを含む。一般的に、プロセッサは、読取専用メモリ又はランダムアクセスメモリ又はこれらの両方から命令及びデータを受信する。コンピュータの基本的な要素は、命令に従ってアクションを実行するためのプロセッサ、及び命令及びデータを格納するための１又は２以上のメモリデバイスである。一般的にコンピュータは、データを格納するための１又は２以上の大容量ストレージデバイス、例えば、磁気、磁気光学ディスク、又は光学ディスクを含むか、これらからデータを受信するか又はデータを転送し、又はこの両方のために作動的に結合される。しかし、コンピュータは、そのようなデバイスを有する必要はない。コンピュータは、別のデバイス、幾つか挙げると、例えば、スマートフォン、移動音声又は映像プレーヤ、ゲームコンソール、全地球測位システム（ＧＰＳ）受信機、又は携帯式ストレージデバイス（例えば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）に組み込むことができる。コンピュータプログラム命令及びデータを格納するのに適するデバイスは、一例として、半導体メモリデバイス、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、及びフラッシュメモリデバイス、磁気ディスク、例えば、内部ハードディスク又は着脱可能ディスク、磁気光学ディスク、及びＣＤ−ＲＯＭ及びＤＶＤ−ＲＯＭディスクを含む不揮発性メモリ、媒体、及びメモリデバイスの全ての形態を含む。プロセッサ及びメモリは、専用論理回路によって補足又は専用論理回路に組み込むことができる。
【００６３】
ユーザとの対話を提供するために、本明細書に説明する主題の実施形態は、ディスプレイデバイス、例えば、ユーザに情報を表示するためのディスプレイデバイス、例えば、ＣＲＴ（ブラウン管）又はＬＣＤ（液晶ディスプレイ）モニタ、及びキーボード及びポインティングデバイス、例えば、ユーザがコンピュータに入力を与えることを可能にするマウス又はトラックボールを有するコンピュータを用いて実施することができる。他の種類のデバイスを使用して、同様にユーザとの対話を提供することができ、例えば、ユーザに提供されるフィードバックは、センサ式フィードバックのあらゆる形態、例えば、視覚フィードバック、聴覚フィードバック、又は触知フィードバックとすることができ、ユーザからの入力は、音響、音声、又は触知入力を含むあらゆる形態で受信することができる。コンピュータは、ユーザによって使用されるデバイスにリソースを送信し、デバイスからリソースを受信することにより、例えば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイスのウェブブラウザにウェブページを送信することによってユーザと対話することができる。
【００６４】
本明細書に説明する主題の実施形態は、バックエンド構成要素を例えばデータサーバとして含むか、又はミドルウェア構成要素、例えば、アプリケーションサーバを含むか、又はフロントエンド構成要素、例えば、ユーザが本明細書に説明する主題の実施と対話することを可能にするグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータ、又は１又は２以上のこれらのバックエンド、ミドルウェア、又はフロントエンド構成要素のあらゆる組合せを含むコンピュータシステムを用いて実施することができる。本発明のシステムの構成要素は、デジタルデータ通信のあらゆる形態又は媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク（「ＬＡＮ」）及びワイドエリアネットワーク（「ＷＡＮ」）、インターネットワーク（例えば、インターネット）及びピアツーピアネットワーク（例えば、アドホックピアツープアネットワーク）を含む。
【００６５】
コンピュータシステムは、クライアント及びサーバを含むことができる。クライアント及びサーバは、一般的に互いから遠隔にあり、一般的に通信ネットワーク上で対話する。クライアントとサーバの関係は、それぞれのコンピュータで実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって発生する。一部の実施形態では、サーバは、データ（例えば、ＨＴＭＬページ）をクライアントデバイスに送信する（クライアントデバイスと対話するユーザにデータを表示してユーザからユーザ入力を受信するために）。クライアントデバイスで生成されたデータ（例えば、ユーザ対話の結果）は、サーバでクライアントデバイスから受信することができる。
【００６６】
１又は２以上のコンピュータのシステムは、作動中にシステムにアクションを実行させるシステム上にインストールされたソフトウエア、ファームウエア、ハードウエア、又はその組合せを有することによって特定の作動又はアクションを実行するように構成することができる。１又は２以上のコンピュータプログラムは、データ処理装置によって実行された時に装置にアクションを実行させる命令を含むことによって特定の作動又はアクションを実行するように構成することができる。
【００６７】
本明細書は多くの特定の実施の詳細を含有するが、これらは、いずれの発明又は主張することができる範囲の制限として解釈すべきではなく、逆に特定の発明の特定の実施形態に固有の特徴の説明として解釈しなければならない。個別の実施形態の関連で本明細書に説明するある一定の特徴は、単一実施形態に組み合わせて実施することができる。対照的に、単一実施形態の関連で説明する様々な特徴は、複数の実施形態で別々に又はあらゆる適切な部分組合せを用いて実施することができる。更に、特徴は、ある一定の組合せで作用するように上述し、更にそのように最初に主張したが、主張した組合せからの１又は２以上の特徴は、一部の事例では組合せから削除することができ、主張した組合せを部分組合せ又は部分組合せの変形に向けることができる。
【００６８】
同様に、作動は、特定の順序で図面に示されているが、これは、望ましい結果を達成するためにそのような作動を示された特定の順序又は連続的な順序で実行し、又は全ての例示された作動を実行することが望ましいとして理解すべきではない。ある状況では、マルチタスク及び並列処理が有利である場合がある。上述の実施形態における様々なシステム構成要素の分離は、全ての実施形態においてそのような分離を要求するものとして理解すべきではなく、説明したプログラム構成要素及びシステムは、一般的に単一ソフトウエア製品に互いに統合するか又は複数のソフトウエア製品にパッケージ化することができることを理解しなければならない。
【００６９】
すなわち、本主題の特定の実施形態を説明した。他の実施形態も特許請求の範囲内である。一部の事例では、特許請求の範囲に説明するアクションを異なる順序で実行して望ましい結果を達成することができる。更に、添付の図に示す処理は、望ましい結果を達成するために必ずしも示す特定の順序又は連続的な順序を必要としない。ある一定の実施では、マルチタスク及び並列処理が有利である場合がある。
【符号の説明】
【００７０】
４００  メッセージデータの転送をモニタ及び制御するための例示的なシステム
４０２  送信機
４０４  クライアントデバイス
４０６  バッファ
４１０  一次経路
【図１Ａ】
2018532201.tif 000004
【図１Ｂ】
2018532201.tif 000005
【図２】
2018532201.tif 000006
【図３Ａ】
2018532201.tif 000007
【図３Ｂ】
2018532201.tif 000008
【図４Ａ】
2018532201.tif 000009
【図４Ｂ】
2018532201.tif 000010
【図４Ｃ】
2018532201.tif 000011
【図４Ｄ】
2018532201.tif 000012
【図４Ｅ】
2018532201.tif 000013
【図４Ｆ】
2018532201.tif 000014
【図５】
2018532201.tif 000015
【国際調査報告】
2018532201.tif 000016
2018532201.tif 000017