(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-10-13
(45)【発行日】2023-10-23
(54)【発明の名称】インタフェースによるユーザインタラクションに基づく動的オブジェクトアップデートサブスクリプション
(51)【国際特許分類】
H04L 67/55 20220101AFI20231016BHJP
H04M 3/487 20060101ALI20231016BHJP
H04L 67/06 20220101ALI20231016BHJP
H04L 67/56 20220101ALI20231016BHJP
【FI】
H04L67/55
H04M3/487
H04L67/06
H04L67/56
(21)【出願番号】P 2022084386
(22)【出願日】2022-05-24
(62)【分割の表示】P 2021133951の分割
【原出願日】2019-09-09
【審査請求日】2022-05-26
(32)【優先日】2018-09-10
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-10-31
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2018-11-30
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-07-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】506332063
【氏名又は名称】セールスフォース インコーポレイテッド
(74)【代理人】
【識別番号】110001427
【氏名又は名称】弁理士法人前田特許事務所
(72)【発明者】
【氏名】ラーグマン レッサ
(72)【発明者】
【氏名】クリム ジェイソン
(72)【発明者】
【氏名】グリネンコ ダニル
(72)【発明者】
【氏名】ウォーカー ニール
(72)【発明者】
【氏名】クリスチャン マーク
(72)【発明者】
【氏名】ムラチョフ セルゲイ
【審査官】前田 健人
(56)【参考文献】
【文献】米国特許出願公開第2008/0103854(US,A1)
【文献】特開2018-013960(JP,A)
【文献】特表2009-519509(JP,A)
【文献】米国特許出願公開第2017/0289289(US,A1)
【文献】中国特許出願公開第105610959(CN,A)
【文献】特開2020-057376(JP,A)
【文献】米国特許出願公開第2017/0237785(US,A1)
【文献】米国特許第09577836(US,B1)
【文献】米国特許出願公開第2014/0297766(US,A1)
【文献】中村 太一,ラズパイ実験室 はじめてのIoT 2017,Interface 第43巻 第7号 ,日本,CQ出版株式会社 CQ Publishing Co.,Ltd.,2017年07月01日,第43巻,p119,122
(58)【調査した分野】(Int.Cl.,DB名)
H04L 67/55
H04M 3/487
H04L 67/06
H04L 67/56
(57)【特許請求の範囲】
【請求項1】
サブスクリプション管理システムであって、
1つ以上のオブジェクトについての最新のオブジェクトデータを保持し、1つ以上のクライアントのうちのそれぞれについてのサブスクリプションリストを保持する1つ以上のメモリ記憶領域であって、
前記1つ以上のクライアントのうちのそれぞれについての前記サブスクリプションリストは、前記1つ以上のクライアントのうちのそれぞれについての前記1つ以上のオブジェクトのうちのサブスクライブされたオブジェクトに対応するオブジェクト識別子を含む、
メモリ記憶領域と、
1つ以上のプロセッサであって、
前記1つ以上のクライアントのうちのあるクライアントから、トリガイベントの表示を受け取ることであって、
前記トリガイベントは、前記1つ以上のオブジェクトのうちのあるオブジェクトに関連付けられている、
トリガイベントの表示を受け取ることと、
前記トリガイベントの前記表示を受け取ることと、前記トリガイベントがサブスクリプションに対する変更に関連付けられている
ことを示すサブスクリプション変更リクエストを受け取ることとに少なくと
も基づいて、前記サブスクリプションリストをアップデートすることによって、少なくとも前記クライアントについてのアップデートされたサブスクリプションリストを生成することと、
前記アップデートされたサブスクリプションリスト内で特定された前記サブスクライブされたオブジェクトについての現在のオブジェクトデータを、少なくとも前記クライアントに提供することと、
を全体として行うよう構成された1つ以上のプロセッサと、
を備えるサブスクリプション管理システム。
【請求項2】
前記オブジェクトは、ユーザプロファイル、ファイル、又はトピックを含む、
請求項1に記載のサブスクリプション管理システム。
【請求項3】
前記トリガイベントは、
前記サブスクリプション変更リクエストに関連付けられ、
前記サブスクリプション変更リクエストは、前記オブジェクト及び前記オブジェクトについてのサブスクリプション変更リクエストタイプを特定する、
請求項1に記載のサブスクリプション管理システム。
【請求項4】
前記サブスクリプション変更リクエストタイプは、前記オブジェクトを、サブスクライブされたオブジェクトとして前記サブスクリプションリストに追加するためのサブスクライブリクエストを含む、
請求項3に記載のサブスクリプション管理システム。
【請求項5】
前記サブスクリプション変更リクエストタイプは、前記オブジェクトを、サブスクライブされたオブジェクトとして前記サブスクリプションリストから削除するためのアンサブスクライブリクエストを含む、
請求項3に記載のサブスクリプション管理システム。
【請求項6】
前記1つ以上のプロセッサは、
少なくとも前記クライアントは、少なくとも1つのサブスクライブされたオブジェクトについての前記現在のオブジェクトデータを含まないという判定に少なくと
も基づいて、前記サブスクライブされたオブジェクトについての現在のオブジェクトデータを、少なくとも前記クライアントに提供するように、全体としてさらに構成される、
請求項1に記載のサブスクリプション管理システム。
【請求項7】
前記トリガイベントは、前記オブジェクトに対応するバージョン識別子を含むサブスクリプション変更リクエストに関連付けられ、
前記1つ以上のプロセッサは、
前記サブスクリプション変更リクエストに反映された前記バージョン識別子が、前記1つ以上のメモリ記憶領域に記憶された現在のオブジェクトデータのバージョン識別子に対応するかの判定に少なくと
も基づいて、少なくとも前記クライアントが前記現在のオブジェクトデータを含むかを判定することと、
少なくとも前記クライアントが、少なくとも1つのサブスクライブされたオブジェクトについての前記現在のオブジェクトデータを含まないという判定に少なくと
も基づいて、前記サブスクライブされたオブジェクトについての前記現在のオブジェクトデータを、少なくとも前記クライアントに提供することと、
を行うように全体としてさらに構成される、
請求項1に記載のサブスクリプション管理システム。
【請求項8】
サブスクリプション管理システムによって少なくと
も実行される方法であって、
クライアントからトリガイベントの表示を受け取ることであって、
前記トリガイベントは、1つ以上のオブジェクトのうちの1つのオブジェクトに関連付けられ、
前記1つ以上のオブジェクトは、前記サブスクリプション管理システムの記憶領域に記憶された現在のオブジェクトデータに関連付けられ、
前記記憶領域は、前記現在のオブジェクトデータと、1つ以上のクライアントのうちのそれぞれについてのサブスクリプションリストとを保持し、
前記1つ以上のクライアントのうちのそれぞれについての前記サブスクリプションリストは、前記1つ以上のクライアントのうちのそれぞれについての前記1つ以上のオブジェクトのうちのサブスクライブされたオブジェクトに対応するオブジェクト識別子を含む、
トリガイベントの表示を受け取ることと、
前記トリガイベントの前記表示を受け取ることと、前記トリガイベントがサブスクリプションに対する変更に関連付けられている
ことを示すサブスクリプション変更リクエストを受け取ることとに少なくと
も基づいて、前記サブスクリプションリストをアップデートすることによって、少なくとも前記クライアントについてのアップデートされたサブスクリプションリストを生成することと、
前記アップデートされたサブスクリプションリスト内で特定された前記サブスクライブされたオブジェクトについての現在のオブジェクトデータを、少なくとも前記クライアントに提供することと、
を含む方法。
【請求項9】
前記オブジェクトは、ユーザプロファイル、ファイル、又はトピックを含む、
請求項8に記載の方法。
【請求項10】
前記トリガイベントは、
前記サブスクリプション変更リクエストに関連付けられ、
前記サブスクリプション変更リクエストは、前記オブジェクト及び前記オブジェクトについてのサブスクリプション変更リクエストタイプを特定する、
請求項8に記載の方法。
【請求項11】
前記サブスクリプション変更リクエストタイプは、前記オブジェクトを、サブスクライブされたオブジェクトとして前記サブスクリプションリストに追加するためのサブスクライブリクエストを含む、
請求項10に記載の方法。
【請求項12】
前記サブスクリプション変更リクエストタイプは、前記オブジェクトを、サブスクライブされたオブジェクトとして前記サブスクリプションリストから削除するためのアンサブスクライブリクエストを含む、
請求項10に記載の方法。
【請求項13】
少なくとも前記クライアントは、少なくとも1つのサブスクライブされたオブジェクトについての前記現在のオブジェクトデータを含まないという判定に少なくと
も基づいて、前記サブスクライブされたオブジェクトについての現在のオブジェクトデータを、少なくとも前記クライアントに提供することをさらに含む、
請求項8に記載の方法。
【請求項14】
前記トリガイベントは、前記オブジェクトに対応するバージョン識別子を含むサブスクリプション変更リクエストに関連付けられ、
前記方法は、
前記サブスクリプション変更リクエストに反映された前記バージョン識別子が、前記記憶領域に記憶された現在のオブジェクトデータのバージョン識別子に対応するかの判定に少なくと
も基づいて、少なくとも前記クライアントが前記現在のオブジェクトデータを含むかを判定することと、
少なくとも前記クライアントが、少なくとも1つのサブスクライブされたオブジェクトについての前記現在のオブジェクトデータを含まないという判定に少なくと
も基づいて、前記サブスクライブされたオブジェクトについての前記現在のオブジェクトデータを、少なくとも前記クライアントに提供することと
をさらに含む、
請求項8に記載の方法。
【請求項15】
サブスクリプション管理システムに関連付けられたクライアントによって少なくと
も実行される方法であって、
ユーザインターフェイスのオブジェクトとのインタラクションに少なくと
も基づいて、トリガイベントを検出することと、
前記トリガイベントの表示を前記サブスクリプション管理システムに送ることと、
前記トリガイベントの前記表示を前記サブスクリプション管理システムに送ることに少なくと
も基づいて、サブスクリプションリストにアップデートを行うことによって、少なくとも前記クライアントについてのアップデートされたサブスクリプションリストを
前記サブスクリプション管理システムに生成
させることであって、
前記サブスクリプションリストは、1つ以上のクライアントのうちのそれぞれについて、前記サブスクリプション管理システムによって保持され、
前記サブスクリプションリストは、前記1つ以上のクライアントのうちのそれぞれがサブスクライブしている、サブスクライブされたオブジェクトに対応するオブジェクト識別子を含む、
サブスクリプションリストを生成することと、
前記サブスクリプションリストに対する前記アップデートを行うことに少なくと
も基づいて、少なくとも前記クライアントについての前記アップデートされたサブスクリプションリスト内で特定された前記サブスクライブされたオブジェクトについての現在のオブジェクトデータを、前記サブスクリプション管理システムから受け取ることと、
を含む方法。
【請求項16】
前記トリガイベントは、サブスクリプション変更リクエストに関連付けられ、
前記サブスクリプション変更リクエストは、前記オブジェクト及び前記オブジェクトについてのサブスクリプション変更リクエストタイプを特定する、
請求項15に記載の方法。
【請求項17】
前記サブスクリプション変更リクエストタイプは、前記オブジェクトを、サブスクライブされたオブジェクトとして前記サブスクリプションリストに追加するためのサブスクライブリクエストを含む、
請求項16に記載の方法。
【請求項18】
前記サブスクリプション変更リクエストタイプは、前記オブジェクトを、サブスクライブされたオブジェクトとして前記サブスクリプションリストから削除するためのアンサブスクライブリクエストを含む、
請求項16に記載の方法。
【請求項19】
前記サブスクライブされたオブジェクトについての前記現在のオブジェクトデータを受け取ることは、少なくとも前記クライアントが、少なくとも1つのサブスクライブされたオブジェクトについての前記現在のオブジェクトデータを含まないという
、前記サブスクリプション管理システムによる判定に少なくと
も基づく、
請求項15に記載の方法。
【請求項20】
前記オブジェクトは、ユーザプロファイル、ファイル、又はトピックを含む、
請求項15に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
この特許出願は、2018年9月10日に出願された米国仮出願番号62/729,180の優先権を主張する、2018年10月31日に出願された米国出願番号16/176,851の継続出願であり、これらの両方は、ここでその全体を参照によって援用される。
【背景技術】
【0002】
公開されたアップデートを複数のクライアントデバイスに少なくとも部分的には集中メッセージングシステムを介して配信するシステムが提供されてきた。
【0003】
適用された努力、独創性、及び革新を通して、そのようなシステムの多くの欠点は、本発明の実施形態による解決策を開発することによって解決されてきており、その多くの例がここで詳細に記載される。
【発明の概要】
【課題を解決するための手段】
【0004】
クライアントデバイスについてコンテンツ送信を管理するよう構成された動的トピックサブスクリプションを保持することは、メッセージ配信システム(例えばグループベース通信プラットフォームのような)から個々のクライアントデバイスへネットワークを通して送信されるデータ量を大幅に減らし得る。所望のユーザ機能及び特定のクライアントデバイスのユーザに対して関心があるトピックス(例えばオブジェクト)のリアルタイムアップデートを維持するために、サブスクリプションは、クライアントデバイスのインタフェースとのユーザ相互作用に基づいて動的に調節され得る。例えば、クライアントデバイスは、クライアントデバイスのインタフェース内で現在、可視であるオブジェクトに関するオブジェクトアップデートについてのサブスクリプションをリクエストするよう構成され得る。
【0005】
さまざまな実施形態は、オブジェクトアップデートをクライアントデバイスに提供する動的サブスクリプション管理システムに関する。ある実施形態では、動的サブスクリプション管理システムは、複数のオブジェクトについての最新のオブジェクトデータを保持する1つ以上のメモリ記憶領域と、1つ以上のプロセッサであって、サブスクリプション変更リクエストを1つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記サブスクリプション変更リクエストは、前記1つ以上のクライアントデバイスのうちの対応する1つのグラフィカルユーザインタフェースの視野の境界を横切って動かされるオブジェクトを特定するデータをそれぞれ備え、前記1つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記1つ以上のクライアントデバイスのうちのそれぞれについてのサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、1つ以上のクライアントデバイスのうちのそれぞれの前記グラフィカルユーザインタフェースの視野の中の前記複数のオブジェクトのうちの可視オブジェクトを特定し、前記1つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される1つ以上の可視オブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記可視オブジェクトのアップデートを前記特定のク
ライアントデバイスに通信接続を介してリアルタイムで送信するように全体として構成される1つ以上のプロセッサとを備える。
【0006】
ある実施形態では、前記動的サブスクリプション管理システムは、前記特定のクライアントデバイスとウェブソケット接続を介して通信する。さらに、前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれの可視オブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、1つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記1つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む。さまざまな実施形態では、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記1つ以上の新しいオブジェクトを含むこととを含む。さまざまな実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記1つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む。
【0007】
ある実施形態では、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記1つ以上の特定のオブジェクトを削除することとを含む。さらに、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記1つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む。さまざまな実施形態では、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、1つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記1つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む。前記サブスクリプションデータは、前記サブスクリプションデータ内に反映されたオブジェクトの最大個数を規定し得る。
【0008】
ある実施形態は、クライアントデバイスにオブジェクトアップデートを提供する方法に関する。この方法は、サブスクリプション変更リクエストを1つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記1つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記1つ以上のクライアントデバイスのうちのそれぞれについてのサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、1つ以上のクライアントデバイスのうちのそれぞれについての複数のオブジェクトのうちのサブスクライブされたオブジェクトを特定し、前記1つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される1つ以上のサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記サブスクライブされたオブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信することを含む。
【0009】
ある実施形態では、前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトに対応するバージョン識別子を備え、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、1つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記1つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記1つ以上の新しいオブジェクトを含むこととを含む。ある実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記1つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む。
【0010】
さまざまな実施形態において、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記1つ以上の特定のオブジェクトを削除することとを含む。ある実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記1つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む。
さまざまな実施形態において、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、1つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記1つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む。
【0011】
ある実施形態は、クライアントデバイスへのオブジェクトアップデートデータストリームを保持するコンピュータプログラム製品に関し、前記コンピュータプログラム製品は、その中に記憶されたコンピュータ読み取り可能なプログラムコード部分を有する、少なくとも1つの非一時的コンピュータ読み取り可能な記憶媒体を備え、前記コンピュータ読み取り可能なプログラムコード部分は、サブスクリプション変更リクエストを1つ以上のクライアントデバイスのうちのそれぞれから受け取り、前記1つ以上のクライアントデバイスのうちのそれぞれから受け取られたサブスクリプション変更リクエストに少なくとも一部は基づいて、前記1つ以上のクライアントデバイスのうちのそれぞれについてのオブジェクトサブスクリプションデータを動的に保持し、前記サブスクリプションデータは、1つ以上のクライアントデバイスのうちのそれぞれについての複数のオブジェクトのうちのサブスクライブされたオブジェクトを特定し、前記1つ以上のクライアントデバイスのうちの特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断し、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映される1つ以上のサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えないと判断するとき、前記サブスクリプションデータに反映される前記サブスクライブされたオブジェクトのアップデートを前記特定のクライアントデバイスに通信接続を介してリアルタイムで送信するよう構成された実行可能な部分を備える。
【0012】
さまざまな実施形態において、前記特定のクライアントデバイスから受け取られた前記サブスクリプション変更リクエストは、前記特定のクライアントデバイスにおいて記憶されるオブジェクトのローカルコピーに対応するバージョン識別子を備え、前記特定のクライアントデバイスが、前記特定のクライアントデバイスについてのサブスクリプションデータに反映されるそれぞれのサブスクライブされたオブジェクトに対応する最新のオブジェクトデータを備えるかを判断することは、1つ以上のオブジェクトについての前記サブスクリプション変更リクエストに反映される前記バージョン識別子が、前記1つ以上のメモリ記憶領域に記憶される最新のオブジェクトデータのバージョン識別子と対応するかを判断することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記1つ以上の新しいオブジェクトを含むこととを含む。ある実施形態では、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記1つ以上の新しいオ
ブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータに結合することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、アンサブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記アンサブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の特定のオブジェクトを特定することによって前記サブスクリプションデータから削除する、サブスクリプション変更リクエストを受け取ることと、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることによって前記1つ以上の特定のオブジェクトを削除することとを含む。さまざまな実施形態においては、前記複数のオブジェクトのそれぞれは、対応するオブジェクト識別子を有し、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、前記1つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについての前記サブスクリプションデータから削除することを含む。さらに、前記特定のクライアントデバイスについてのサブスクリプションデータを動的に保持することは、サブスクライブリクエストとして実現されたサブスクリプション変更リクエストを前記特定のクライアントデバイスから受け取ることであって、前記サブスクライブリクエストは、前記複数のオブジェクトのうち1つ以上の新しいオブジェクトを特定することによって前記サブスクリプションデータに追加する、サブスクリプション変更リクエストを受け取ることをさらに含み、前記特定のクライアントデバイスについての前記サブスクリプションデータをアップデートすることは、1つ以上の特定のオブジェクトのそれぞれに対応するオブジェクト識別子を、前記クライアントデバイスについての前記サブスクリプションデータから削除した後に、前記1つ以上の新しいオブジェクトのそれぞれに対応するオブジェクト識別子を、前記特定のクライアントデバイスについて前記サブスクリプションデータに結合することをさらに含む。
【0013】
さまざまな実施形態は、クライアントデバイス上に記憶されたオブジェクトアップデートを動的に保持するためのクライアントデバイスに関し、クライアントデバイスは、複数のオブジェクトについてのオブジェクトデータのローカルデータストアを保持する1つ以上のメモリ記憶領域、複数のオブジェクトとのユーザ相互作用をモニタし、複数のオブジェクトのうちの1つ以上の特定のオブジェクトとのユーザ相互作用における変化を示す1つ以上のトリガイベントを検出し、検出された1つ以上のトリガイベントに少なくとも一部は基づいて、1つ以上の特定のオブジェクトについてサブスクリプション変更リクエストを生成し、サブスクリプション変更リクエストをリモート計算プラットフォームに送信することによって、1つ以上の特定のオブジェクトに関連するクライアントデバイスに送信されるオブジェクトデータの変更をリクエストするよう、全体として構成される1つ以上のプロセッサを備える。
【0014】
ある実施形態においては、1つ以上のトリガイベントは、1つ以上のオブジェクトを、グラフィカルユーザインタフェースの可視部分及び隠された部分の間で移動させることを含む。さまざまな実施形態では、1つ以上のトリガイベントは、1つ以上のオブジェクトをグラフィカルユーザインタフェースの可視部分の境界を越えて移動させることを含む。さらに、グラフィカルユーザインタフェースの隠された部分から可視部分へ1つ以上のオブジェクトの動きを検出すると、サブスクリプション変更リクエストを生成することは、1つ以上のオブジェクトについてのサブスクライブリクエストを生成することによって、1つ以上のオブジェクトに関するサブスクリプションを開始することを含み得る。さらに、グラフィカルユーザインタフェースの可視部分から隠された部分への1つ以上のオブジェクトの動きを検出すると、サブスクリプション変更リクエストを生成することは、1つ以上のオブジェクトについてのアンサブスクライブリクエストを生成することによって1つ以上のオブジェクトに関するサブスクリプションを終了させることを含み得る。
【図面の簡単な説明】
【0015】
添付図面にこれから参照がなされるが、これらは必ずしも一律の縮尺で描かれてはいない。
【
図1】ある実施形態によるクライアントデバイスと通信するグループベース通信プラットフォームの概略図である。
【
図2】ある実施形態によるメッセージ配信サーバの概略図である。
【
図3】ある実施形態によるインタフェース計算エンティティの概略図である。
【
図4】ある実施形態によるグループベース通信インタフェースのディスプレイウィンドウ間のデータ送信相互作用の概略図である。
【
図5】さまざまな実施形態によるさまざまな計算エンティティの機能を示すフロー図である。
【
図6】さまざまな実施形態によるさまざまな計算エンティティの機能を示すフロー図である。
【発明を実施するための形態】
【0016】
本開示は、添付の図面を参照してさまざまな実施形態をより完全に記載する。ここにはいくつかの実施形態が示され記載されてはいるが、全ての実施形態が示され記載されているわけではないことを理解されたい。実際、実施形態は、多くの異なる形態を取り得て、したがってこの開示は、ここで述べられた実施形態に限定されるものとして解釈されるべきではない。むしろこれら実施形態は、この開示が適用され得る法的要件を充足するように提供される。全体を通して同様の番号は、同様の要素を表す。
【0017】
概観
グループベースの通信プラットフォームの個々のユーザによってモニタされるオブジェクト(例えばユーザ、ファイル、トピック、及び/又はその他)の個数が増すと、それらユーザによって用いられるクライアントデバイスに課せられる処理の負担も増し、ユーザのクライアントデバイスがモニタされているオブジェクトに関する全てのアップデートを受け取ることを確実にするために、ユーザのクライアントデバイス及びグループベースの通信プラットフォームの間のネットワークトラフィックも増す。これらの技術的問題は、実時間メッセージングの文脈で特に深刻であり、そこではこれらオブジェクトベースのアップデートは、アップデートが発生するたびにクライアントデバイスに配信される。単一のユーザ(及び関連付けられたクライアントデバイス)が多数のオブジェクトをモニタする、もっとも極端な場合において、オブジェクトアップデートは、クライアントデバイスにほとんど常時、送信され得る。
【0018】
多くの場合、ユーザがフォローすることにほとんど関心がないオブジェクトに関するアップデート、及び/又はユーザが現在、レビューしていないオブジェクト(例えばユーザインタフェースの隠れた部分又はそうでなければ非表示の部分に表されているオブジェクト)に対するアップデートは、長時間にわたってユーザには完全に気付かれないままであり得る。現実的には、個々のユーザは、多数のオブジェクトアップデートを同時には精神的に把握できず、したがって、いくつかのオブジェクトアップデートは、優先順位が他のオブジェクトアップデートよりもより低いレベルに降格され得る。
【0019】
さまざまな実施形態は、動的サブスクリプションベースのモデルを利用することによって、与えられた時刻においてユーザにリレーされるオブジェクトアップデートの個数を減らす。ユーザが現在、サブスクライブされているオブジェクトに関するアップデートだけがクライアントデバイスに送信され、それによってグループベースの通信プラットフォーム及びクライアントデバイスの間に流れるネットワークトラフィックの量を減らす。これらサブスクリプションは、クライアントデバイスとのユーザインタラクション(user int
eractions)に基づき得て、したがってクライアントデバイスは、さまざまなオブジェク
トに関するサブスクライブリクエスト及びアンサブスクライブリクエストのような、サブスクリプション変更リクエスト(subscription modification requests)を、クライアントデバイスにおける1つ以上のトリガイベントの発生に基づいて生成するよう構成され得る。それらトリガイベントは、ユーザインタラクションベースであり得て、特定のオブジェクトに対するユーザの関心レベルについてのプロキシと考えられ得る。例えばクライアントデバイス上で、オブジェクトをユーザインタフェースの可視の視野の境界を越えて移動すること(例えばオブジェクトが見えるようになるまでスクロールすること)によって、例えば、特定のオブジェクトをユーザインタフェースの可視の視野内に移動することは、オブジェクトについてのサブスクライブリクエストを生成及び送信するためにクライアントデバイスによって利用されるトリガイベントであると考えられ得て、例えばオブジェクトをユーザインタフェースの可視視野の境界を越えて移動させること(例えばオブジェクトがもはや可視ではないまでスクロールすること)によって、オブジェクトをユーザインタフェースの可視視野の外に移動する結果は、オブジェクトについてのアンサブスクライブリクエストを生成及び送信するためにクライアントデバイスによって利用されるトリガイベントであると考えられ得る。適切な状況の下ではバックグラウンドオブジェクト(例えば可視視野に現在存在しないオブジェクト)についてのアップデートがクライアントデバイスに送信され得るようにするためには、他のトリガイベントも同様に利用され得る。それらサブスクライブ/アンサブスクライブのリクエストは、正確でかつ最新のオブジェクトサブスクリプションがグループベースのコミュニケーションプラットフォームにおいて維持されることを確実にするために、クライアントデバイスによってリアルタイムで生成及び送信され得る。結果として、特定のユーザにとって関心があると現在みなされているオブジェクトに関するオブジェクトアップデートだけが、任意の与えられた時刻においてユーザのクライアントデバイスに送信される。
【0020】
個別のクライアントデバイスについてのオブジェクトサブスクリプションを示すサブスクリプションデータは、グループベースのコミュニケーションプラットフォームにおいて(例えば1つ以上のメッセージ配信サーバ(message distribution servers)にアクセス可能なメモリ記憶領域において)記憶され得て、クライアントデバイスから受け取られたサブスクリプション変更リクエストに基づいてリアルタイムでアップデートされ得る。この記憶されたサブスクリプションデータは、クライアントデバイスに送信されるべきオブジェクトアップデートをフィルタリングし、サブスクライブされたオブジェクトに関連するアップデートだけがクライアントデバイスに送信されるようにするためにメッセージ配信サーバによって使用され得る。より詳細にここで説明されるように、オブジェクトアップデートは、グループベースの通信プラットフォームに位置するインタフェース計算エンティティを通して送信され得る。
【0021】
定義
ここで用いられるように、「データ」、「コンテンツ」、「情報」という語、及び同様の語は、本発明の実施形態によって送信され、受信され、及び/又は記憶されることが可能なデータを表すために交換可能に用いられ得る。よって、このような語の使用は、本発明の実施形態の精神及び範囲を限定するようには解釈されるべきではない。さらに、計算デバイスが他の計算デバイスからデータを受け取るとここで記載される場合においては、データは、他の計算デバイスから直接に受け取られてもよく、又は、例えば、1つ以上のサーバ、リレー、ルータ、ネットワークアクセスポイント、ベースステーション、ホスト等のような1つ以上の中間計算デバイスを介して間接的に受け取られてもよい。同様に、計算デバイスが他の計算デバイスにデータを送るとここで記載される場合においては、データは、他の計算デバイスに直接に送られてもよく、又は、例えば、1つ以上のサーバ、リレー、ルータ、ネットワークアクセスポイント、ベースステーション、ホスト等のような1つ以上の中間計算デバイスを介して間接的に送られてもよい。
【0022】
「ユーザ」という語は、個人、個人のグループ、会社、組織等を表すと理解されるべきである。ユーザは、クライアントデバイスを用いてグループベースの通信又はメッセージングのシステムにアクセスし得る。「グループベース」とは、定義されたユーザのグループだけにアクセス可能であるようにするために十分なセキュリティを有する、システム、チャンネル、メッセージ、又は仮想環境を表すようここでは用いられる。このグループは、組織又は営利事業のコモンアクセスクレデンシャルのような、コモンアクセスクレデンシャルによって定義され得る。アクセスは、ジョインするためのバリデートされたリクエスト(validated request)、つまりあるグループメンバユーザによって他の非メンバユ
ーザに送信されたジョインするためのインビテーションによってさらに促進され得る。グループ識別子(Group identifiers)(以下に定義される)がデータ、情報、メッセージ
等を特定のグループと関連付けるのに用いられる。
【0023】
「ユーザプロファイル(user profile)」、「ユーザアカウント(user account)」、及び「ユーザアカウント詳細(user account details)」という語は、ユーザに関連付けられた情報を表し、これは例えば、ユーザ識別子、ユーザがアクセスを認められた通信チャネル(例えばグループベース通信チャネル(group-based communication channels))に関連付けられた1つ以上の通信チャネル識別子(例えばグループベース通信チャネル識別子)、ユーザが関連付けられているグループについての1つ以上のグループ識別子、ユーザがグループベース通信チャネルのうちのいずれかのオーナーであるかについての表示、ユーザがグループベース通信チャネル制限のうちのいずれかを有するかについての表示、複数のメッセージ、複数の絵文字、複数の会話、複数の会話トピックス、アバター、電子メールアドレス、実名(例えばJohn Doe)、ユーザ名(例えばjdoe)、パスワード、タイムゾーン、ステータス等を含む。ユーザアカウントの詳細は、例えばユーザのユーザ名及びパスワードを含むユーザについてのログイン情報のような、ユーザ資格情報(user credentials)のサブセット指定を含み得る。
【0024】
「クライアントデバイス」という語は、1つ以上のサーバによって利用可能にされた1つ以上のサービスにアクセスするよう構成されているコンピュータハードウェア(群)及び/又はソフトウェア(群)を表す。サーバ(群)は、しばしば(必ずそうというわけではないが)他のコンピュータシステム上に存在し、この場合、クライアントデバイスは、ネットワークを介してサービスにアクセスする。クライアントデバイスは、グループ識別と関連付けられ得て、ここでグループ識別は、ユーザが属するグループ(例えばユーザグループ)を示唆する電子的表示である。クライアントデバイスは、以下に限定されないが、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、デスクトップコンピュータ、ウェラブルデバイス、パーソナルコンピュータ、エンタープライズコンピュータ等を含み得る。
【0025】
「グループベースの通信プラットフォーム」という語は、1つ以上のクライアントデバイスにアクセス可能であり、データベースの運用に関連する複数のソフトウェアアプリケーションへのアクセスを提供するよう動作可能である計算サービスの集合体を表す。ある例では、グループベースの通信プラットフォームは、ソフトウェアアプリケーションを実行していて、ディジタルコンテンツアイテム、アプリケーション関連データ等を記憶する1つ以上のデータベースへのアクセスを有する1つ以上のさらなるサーバと通信するよう構成された1つ以上の中央サーバの形態を取り得る。
【0026】
「通信チャネル」という語は、情報ルート、及びシステム間及びシステムの部分間でのデータのやりとりのために用いられる関連付けられた回路を表す。例えば、通信チャネルは、さまざまなクライアントデバイスの間で確立され得ることによって、これらクライアントデバイスが互いの間でデータを通信し共有することを可能にする。これら通信チャネ
ルは、グループの全てのユーザの間でメッセージを共有するための、クライアントデバイス(及びそれら各々のユーザ)のうちの選ばれたグループの間で確立された「グループベース通信チャネル」であり得る。この通信チャネルは、追加で及び/又は代替として、それら2つのユーザの間だけでメッセージを共有するための、2つのクライアントデバイスの間で確立された1対1の直接メッセージ通信チャネルであり得る。
【0027】
複数の通信チャネルは、1つ以上の計算デバイスのそれぞれの上で動作し得て、したがって通信チャネル識別子は、通信チャネルに割当され得て、その通信チャネルの関連するデータが記憶されているデータベースにおける物理アドレスを示し、その通信チャネル上でやりとりされるデータを受け取るために通信チャネル内で参加するクライアントデバイスを識別するのに利用される。したがって通信チャネル識別子は、複数の通信チャネルと関連付けられた計算デバイス上であっても、通信チャネルが別個であり、分離している状態にとどまることを確実にする。
【0028】
通信チャネルは、「パブリック」であり得て、これは、任意のクライアントデバイスが当該通信チャネルを通した情報シェアリングに加わって参加することを許可し得る。通信チャネルは、「プライベート」であり得て、これは、当該通信チャネルにおけるデータ通信を特定のクライアントデバイス及び/又はユーザに制限し得る。
【0029】
「グループベース通信チャネルインタフェース」という語は、チャネルメンバ(例えばクライアントデバイスを用いてその環境にアクセスするバリデートされたユーザ)によってポストされた、そのグループのメンバだけにしか見えないメッセージング通信を表示するよう構成される仮想通信環境又はフィードを表す。グループベース通信チャネルインタフェースのフォーマットは、グループベース通信チャネルの異なるメンバには異なるように見えるかもしれない。しかし、グループベース通信チャネルインタフェースのコンテンツ(すなわちメッセージング通信)は、グループベース通信チャネルのそれぞれのメンバに表示される。例えば、グループベースのメッセージング通信のコモンセットは、各グループベース通信チャネルのそれぞれのメンバに表示されることによって、グループベース通信チャネルインタフェースのコンテンツ(すなわちメッセージング通信)は、グループベース通信チャネルのメンバによっても変わらない。
【0030】
ある実施形態では、グループベース通信チャネルインタフェースの一部は、可視性に基づいて区別され得る。グループベース通信チャネルインタフェースは、実際に表示されるコンテンツを含む可視視野境界(visible field of view boundary)によって囲まれる可視視野(visible field of view)によって特徴付けられる。グループベース通信チャネ
ルインタフェースの他のコンテンツは、ユーザの視野から隠され得る。具体的な例として、コンテンツの長いフィードは、スクロール可能であり得て、それによりコンテンツの長いフィードの一部しか、所与の時刻においてグループベース通信チャネルインタフェース内には表示されない。ユーザがコンテンツのフィードを通してスクロールしていくと、可視部分は、グループベース通信チャネルインタフェースに対してするユーザのスクロールするインタラクションと同期して変化し、したがってさまざまなオブジェクトは、可視視界とグループベース通信チャネルインタフェースの隠された部分との間の可視視界境界を越えて移動する。
【0031】
ある実施形態では、グループベース通信チャネルインタフェースの可視部分は、例えば
図4に示されるように、ディスプレイウィンドウ内に複数の可視ペインを備え得る。ある実施形態では、それぞれのディスプレイペインは、特定のデータタイプを表示するよう構成され得る。例えば、最も左のペインは、チャネルのリスト及び/又はユーザへのダイレクトメッセージを提供し得て、最も右(又は3ペイン構成におけるセンターペイン)は、メッセージがやりとりされている特定のチャネルのコンテンツを表示し得て、これは表示
されたメッセージの全てを表示することを含む。センターペインのコンテンツは、ある実施形態では、コンテンツがペインの不可視部分(例えば可視部分の上又は下にスクロールされる)と、ペインの可視部分との間でスクロールがされ得るように、スクロール可能なフィードとして提示され得る。メインディスプレイウィンドウが3ペインを備える実施形態では、最も右のペインは、特定の選択されたメッセージ、チャネル等に関する追加のデータを備え得る。
【0032】
ここで用いられるように、「メッセージング通信」及び「メッセージ」という語は、クライアントデバイスを使用しているユーザによって提供される電子的に生成され、グループベース通信チャネルインタフェース内での表示のために構成されている任意のディジタルコンテンツオブジェクトを表す。メッセージ通信は、ユーザ(クライアントデバイスを用いて)によって提供される、任意のテキスト、画像、ビデオ、オーディオ、又はこれらの組み合わせを含み得る。例えば、ユーザは、メッセージコンテンツとして、メッセージング通信内に、画像及びビデオと共にテキストも含むメッセージング通信を提供し得る。そのような場合、テキスト、画像、及びビデオは、メッセージング通信つまりディジタルコンテンツオブジェクトを構成する。グループベースの通信システムの通信チャネル(例えばグループベース通信チャネル)に送信又はポストされたそれぞれのメッセージは、以下を含むメタデータを含み、すなわち送信するユーザの識別子、メッセージ識別子、メッセージコンテンツ、オブジェクト識別子、グループ識別子、及び/又はグループベース通信チャネルの識別子を含む。上述の識別子のそれぞれは、ASCIIテキスト、ポインタ、メモリアドレス等を含み得る。メッセージは、グループベースの通信インタフェースの個々のペイン内で生成及び/又は編集され得て(単一のペインが特定のディスプレイウィンドウ内で可視である)、及び/又はメッセージは、別個のディスプレイウィンドウ内で生成及び/又は編集され得る(例えば、通信チャネル内でシェアされるべきポスティングを生成するために、及び/又は他のユーザとの通話を開始するために、別個のディスプレイウィンドウ群が利用され得る)。
【0033】
「オブジェクト」という語は、ここで用いられるように、1つ以上のクライアントデバイスにアップデートが提供及び配信され得る任意のコンテンツソースを表し得る。特定のユーザは、その特定のユーザのアクティビティについてのアップデートが他のクライアントデバイスに配信され得るという点で、他のユーザにとってのオブジェクトだと考えられ得る。オブジェクトは、ある実施形態ではファイルとしても実現され得て、この場合、これらファイルのアップデートは、個別のクライアントデバイスに配信され得る。特定のオブジェクトに関連するアップデートは、グループベースの通信プラットフォームから(特に、ある実施形態ではサブスクリプション管理システムから)個別のクライアントデバイスにメッセージとして配信され得て、このメッセージは、当該アップデートが関連する具体的なオブジェクトを特定する追加のメタデータ(ここでは「オブジェクト識別子」と呼ばれる)を含み得る。これらオブジェクト識別子は、クライアントデバイスが、適切なオブジェクトと関連付けてアップデートを表示できるようにする。ある実施形態では、オブジェクト識別子は、オブジェクトが関係するオブジェクトのタイプ(例えばユーザオブジェクト、ファイルオブジェクト、及び/又はその他)を示すデータを備え、追加として又は代替として、オブジェクトをユニークに特定する(例えば全てのオブジェクトの中で、又は特定のオブジェクトタイプの全てのオブジェクトの中で)ユニークなストリング(例えばユニークな番号、ユニークなアルファニューメリックのストリング、及び/又はその他)を示すデータを備え得る。
【0034】
ある実施形態では、オブジェクトと関連付けられるメタデータは、オブジェクトと関連付けられる「バージョン識別子」を追加として備え得て、これら識別子は、オブジェクトが現在の物(アップトゥデート)であるかを示す。オブジェクトについてのこのバージョン識別子は、増加していく数字の番号であり得て、ここでバージョン識別子は、オブジェ
クトのそれぞれのアップデートと共に増加する。しかし他の構成も可能であること(例えばアルファニューメリック値、ハッシュ値、及び/又はその他)が理解されるべきである。
【0035】
「グループ識別子」又は「チーム識別子」という語は、グループベースの通信システム内でグループが特定され得るデータの1つ以上のアイテムを表す。例えば、グループ識別子は、ASCIIテキスト、ポインタ、メモリアドレス等を備え得る。
【0036】
「グループベース通信チャネル識別子」又は「チャネル識別子」は、グループベース通信チャネルが特定され得る、データの1つ以上のアイテムを表す。例えば、グループベース通信チャネル識別子は、ASCIIテキスト、ポインタ、メモリアドレス等を備え得る。クロスグループ通信チャネルが別のチームのユーザと関連付けられたクライアントデバイスの間で利用可能であり得るが、ある実施形態では、通信チャネル(パブリック、プライベートにかかわらず)は、共通のグループ/チームのユーザ(及び彼らの関連付けられたクライアントデバイス)の間での使用のために利用可能であり得る。よって、チャネル識別子は、特定の通信チャネルに関連するデータ/メッセージがどこに記憶されているかを具体的に特定するために、1つ以上のグループ識別子と共に提供され得る。
【0037】
「送信ユーザ識別子」は、特定のユーザ(すなわち特定のユーザに関連付けられたクライアントデバイス)によって送られるメッセージのコレクションと関連付けられる。これらメッセージは、ユーザに関するコンテキストを決定するために分析され得る(例えばあるトピックにおけるユーザの専門知識又は興味は、そのようなメッセージの中のそのトピック又はそのトピックに関連付けられたキーワードの言及の頻度に基づいて決定され得る)。
【0038】
グループベースの通信システムユーザは、組織グループの中に組織化され(例えばそれぞれの会社の従業員は、別々の組織グループであり得る)、それぞれの組織グループは、ユーザが割当され得る又はユーザが参加し得る(例えばグループベース通信チャネルは、部署、オフィスのような地理的位置、製品ライン、ユーザの関心、トピック、問題、及び/又はその他を表し得る)1つ以上の通信チャネル(例えばグループベース通信チャネル)を有し得る。グループ識別子は、メッセージのためのアクセス制御を促進するのに用いられ得る(例えばサーチクエリに応答してサーチ結果の一部としてメッセージリターンを持つようなメッセージへのアクセスは、それらのユーザプロファイルに関連付けられたグループ識別子を有するそれらユーザに制限され得る)。グループ識別子は、メッセージについてのコンテキストを決定するのに用いられ得る(例えば組織の名称及び/又は組織の簡単な説明のようなグループの説明がグループ識別子に関連付けられ得る)。
【0039】
グループベースの通信システムユーザは、通信チャネル(例えばグループベース通信チャネル)に参加及び/又は作成をし得る。一部のグループベース通信チャネルは、それらのユーザプロファイルに関連付けられた特定の組織グループ識別子を有するそれらユーザにとってはグローバルにアクセス可能であり得る(すなわちその組織のメンバであるユーザ)。一部のグループベース通信チャネルへのアクセスは、特定のグループのメンバに制限され得て、それによってグループベース通信チャネルは、それらのユーザプロファイルに関連付けられた特定のグループ識別子を有するそれらユーザにアクセス可能である。グループベース通信チャネル識別子は、メッセージについてのアクセス制御を促進するために用いられ得る(例えば、サーチクエリに応答してサーチ結果の一部としてメッセージリターンを持つようなメッセージへのアクセスは、それらのユーザプロファイルに関連付けられたグループ識別子を有し、又はグループベース通信チャネルに参加する能力を有するそれらユーザに制限され得る)。グループベース通信チャネル識別子は、メッセージのコンテキストを決定するのに用いられ得る(例えば、グループベース通信チャネルで議論さ
れるプロジェクトの説明のような、グループベース通信チャネルの説明は、グループベース通信チャネル識別子に関連付けられ得る)。
【0040】
「プライベートグループベース通信チャネル」という語は、制限されたアクセスを持つことによって、グループベースの通信システムの他のメンバによって一般にはアクセス可能ではなく及び/又はサーチ可能ではないグループベース通信チャネルを表す。例えば、プライベートグループベース通信チャネルへのアクセスについての知識及び許可を有する(例えば、ユーザが許可/認証された後に、プライベートグループベース通信チャネルについてのグループベース通信チャネル識別子がそれらのユーザプロファイルに関連付けられる)ユーザ又は管理者だけが、プライベートグループベース通信チャネルのコンテンツを見ることができる。
【0041】
さまざまな実施形態を参照してここで説明されている「インタフェース計算エンティティ」は、さまざまなクライアントデバイスとの通信接続を維持するための計算デバイス(又は計算デバイスの一部)である。具体的には、インタフェース計算エンティティは、グループベース通信プラットフォームのメッセージ配信サーバ及びそれぞれのクライアントデバイスの間でリアルタイムでメッセージ(例えばオブジェクトアップデート)及び対応するメタデータ(例えばオブジェクト識別子を備える)を送信する複数のクライアントデバイスのそれぞれによって開始されたウェブソケット接続(又は他の通信接続)を維持するよう構成され得る。
【0042】
ある実施形態を参照してここで説明されている「メッセージ配信サーバ」は、オブジェクトアップデート及び/又はその他メッセージをクライアントデバイス間で受信及び/又は配信するためのさまざまなクライアントデバイスと相互作用する(interacting)(例
えばインタフェース計算エンティティを介して)よう構成された計算デバイスである。メッセージ配信サーバは、ユーザから受信された及び/又はユーザに配信された(例えば対応するクライアントデバイスを介して)メッセージを受信し、生成し、記憶し(関連付けられたデータベース内に)、及び/又は仕向ける(direct)よう構成され得る。メッセージ配信サーバの機能は、単一のサーバ又は共通の機能を有するサーバ群の集合体を介して提供され得て、又はメッセージ配信サーバの機能は、メッセージ配信サーバの記載された機能のサブセットを実行する複数のサーバ又はサーバ群の集合体の中で分割され得る。例えば、メッセージ配信サーバの第1サブセット--ゲートウェイサーバ--は、インタフェース計算エンティティを介してクライアントデバイスからのメッセージを受信し、クライアントデバイスへのメッセージを送信するよう構成され得る。これらのゲートウェイサーバは、通信チャネル内で配信されるメッセージを収集し、これらメッセージをインデキシング及びアーカイビングのためにメッセージリポジトリデータベース内に記憶するよう構成された、メッセージ配信サーバの第2サブセット--チャネルサーバ--と通信し得る。ある実施形態では、チャネルサーバは、クライアントデバイスにさまざまなメッセージを提供するためにインタフェース計算エンティティと通信し得る。
【0043】
ある実施形態では、メッセージ配信サーバは、クライアントデバイスがサブスクライブするオブジェクトを特定する、それぞれのクライアントデバイスに関連付けられた「サブスクリプションデータ」に基づいて、オブジェクトアップデートを、グループベース通信プラットフォームの中又は外の両方のクライアントデバイスの間で配信するクライアントデバイスと相互作用する(例えばインタフェース計算エンティティを介して)グループベースの通信プラットフォームの「サブスクリプション管理システム」として、又はそれと協働して機能し得る。このサブスクリプションデータは、特定のクライアントデバイスについてサブスクライブされたオブジェクトのリスティングとして実現され得て、オブジェクトは、例えば、オブジェクト識別子を結合すること、又はオブジェクト識別子をサブスクリプションデータから削除することによって、オブジェクトデータに追加又はそれから
削除され得る。ある実施形態では、インタフェース計算エンティティは、ここで説明されるように、さまざまなクライアントデバイスに配信されるべきメッセージ(例えばオブジェクトアップデート)を獲得するために、1つ以上のメッセージ配信サーバとのバックエンド接続を生成及び維持し、メッセージ配信サーバは、適切なクライアントデバイスへの配信のために、サブスクリプション管理システムの機能を通して、サブスクライブされたオブジェクトに関するメッセージ(例えばオブジェクトアップデート)をインタフェース計算エンティティに提供する。
【0044】
ある実施形態のサブスクリプション管理システムは、特定のクライアントデバイスについてのサブスクリプションデータが、対応するクライアントデバイスから受信された1つ以上の「サブスクリプション変更リクエスト」に基づいてアップデートされ得る(例えばリアルタイムで)よう、もともと動的である。これらサブスクリプション変更リクエストは、サブスクリプションデータ内で現在表現されていない新しいオブジェクトがサブスクリプションデータに追加されることによって、新しいオブジェクトについてのさらなるアップデートがクライアントデバイスに送信されるよう、クライアントデバイスがリクエストする、「サブスクライブリクエスト」として実現され、又はオブジェクトがサブスクリプションデータから除去されることによって、オブジェクトに関するさらなるアップデートがクライアントデバイスに送信されない(例えばオブジェクトが再びサブスクリプションデータに新しいオブジェクトとして追加されるまで)よう、クライアントデバイスがリクエストする、「アンサブスクライブリクエスト」として実現され得る。
【0045】
ある実施形態では、1つ以上のインタフェース計算エンティティ及び/又はメッセージ配信サーバは、例えば、1つ以上の計算エンティティに地理的に近接して位置するクライアントデバイスにサービスするために、地理的に分散され得る。しかしある実施形態では、さまざまな計算エンティティ(インタフェース計算エンティティ及び/又はメッセージ配信サーバを含む)は、中央に配置され得る。
【0046】
例示的システムアーキテクチャ
本発明の方法、装置、及びコンピュータプログラム製品は、さまざまなデバイスの任意のものによって実現され得る。例えば、例示的実施形態の方法、装置、及びコンピュータプログラム製品は、1つ以上のクライアントデバイスのような1つ以上のデバイスと通信するよう構成されるサーバ又は他のネットワークエンティティのようなネットワークデバイスによって実現され得る。ある好ましい非限定的な実施形態において、計算デバイスは、パーソナルコンピュータ又はコンピュータワークステーションのような固定された計算デバイスを含み得る。さらに例示的実施形態は、携帯デジタルアシスタント(PDA)、携帯電話、スマートフォン、ラップトップコンピュータ、タブレットコンピュータ、ウェアラブルデバイス、又は前述のデバイスの任意の組合せのような、さまざまなモバイルデバイスの任意のものによって実現され得る。
【0047】
図1は、本発明の実施形態が動作し得る例示的計算システムを示す。ユーザは、クライアントデバイス101A-101Nを用いて通信ネットワーク103を介してグループベース通信プラットフォーム105にアクセスし得る。
【0048】
通信ネットワーク103は、例えば、それを実現するのに要求される任意のハードウェア、ソフトウェア及び/又はファームウェア(例えばネットワークルータ等のような)と共に、有線又は無線ローカルエリアネットワーク(LAN)、パーソナルエリアネットワーク(PAN)、メトロポリタンエリアネットワーク(MAN)、ワイドエリアネットワーク(WAN)等を含む任意の有線又は無線通信ネットワークを含み得る。例えば、通信ネットワーク103は、セルラー式電話、802.11、802.16、802.20、及び/又はWiMaxネットワークを含み得る。さらに、通信ネットワーク103は、イ
ンターネットのような公衆ネットワーク、イントラネットのようなプライベートネットワーク、又はそれらの組合せを含み得て、TCP/IPベースのネットワーキングプロトコルを含むがこれには限定されない、現在利用可能な又は将来開発されるさまざまなネットワーキングプロトコルを利用し得る。ここで議論されるように、ネットワーキングプロトコルは、ウェブソケット通信を介したデータ送信を可能にするよう構成される。例えば、ネットワーキングプロトコルは、グループベース通信システムの要求に合うようにカスタマイズされ得る。ある実施形態では、プロトコルは、ウェブソケットチャネルを介して送られるJSONオブジェクトのカスタムプロトコルである。ある実施形態では、データは、JSON-RPC、JSON-REST/HTTP等のような、複数のプロトコルを介して送信され得る。
【0049】
示された実施形態において、グループベース通信プラットフォーム105は、インタフェース計算エンティティ109を介して通信ネットワーク103を介してアクセス可能な複数のメッセージ配信サーバ107A-107Nを含む。全体としてメッセージ配信サーバ107A-107Nは、1つ以上のクライアントデバイス101A-101Nから送信されたメッセージを受信し、オブジェクトアップデートを表すメッセージを生成及び/又は受信し(もし該当するなら)、インタフェース計算エンティティ109及び/又はその他を介して適切なクライアントデバイス101A-101Nへメッセージを送信するよう構成される。
【0050】
同様に、インタフェース計算エンティティ109(又は複数のインタフェース計算エンティティ109)は、当該技術分野で知られているように、コンピュータ又はコンピュータ群として実現され得る。
図1の図示された実施形態では、インタフェース計算エンティティ109は、クライアントデバイス101A-101N(例えば通信ネットワーク103を通じたウェブソケット通信を介して)及び/又はメッセージ配信サーバ107A-107N(例えばバックエンド通信を介して)を含むがこれらには限定されない、さまざまなソースから電子データを受信することを提供する。さらに図示された実施形態のインタフェース計算エンティティ109は、1つ以上の電子メッセージの一部として提供されたメタデータをパースし、電子メッセージに関連付けられたメタデータのコンテンツの少なくとも一部に基づいて、インカミング電子メッセージを1つ以上のメッセージ配信サーバ107A-107Nに仕向け、及び/又は電子メッセージに関連付けられたメタデータのコンテンツに少なくとも一部は基づいて、アウトバウンド電子メッセージを1つ以上のクライアントデバイス101A-101Nに仕向けるようにも構成される。
【0051】
クライアントデバイス101A-101Nは、上で定義された任意の計算デバイスであり得る。インタフェース計算エンティティ109を介してメッセージ配信サーバ107A-107N及びクライアントデバイス101A-101Nの間でやりとりされる電子メッセージデータは、さまざまな形態においてさまざまな方法を介して提供され得る。
【0052】
ある好ましい非限定的な実施形態では、1つ以上のクライアントデバイス101A-101Nは、スマートフォン又はタブレットのようなモバイルデバイスである。1つ以上のクライアントデバイスは、メッセージ配信サーバ107A-107N及び/又はインタフェース計算エンティティ109と相互作用するために「アプリ」を実行し得る。そのようなアプリは、スマートフォン又はタブレットのようなモバイルデバイス上で動作するように典型的には設計されている。例えば、アプリは、Apple Inc.のiOS(登録商標)、Google Inc.のAndroid(登録商標)、又はMicrosoft Inc.のWindows 10 Mobile(登録商標)のようなモバイルデバイスオペレーティングシステム上で動作するよう提供され得る。これらプラットフォームは、アプリが互いに、及びモバイルデバイスの特定のハードウェア及びソフトウェア要素と通信することを可能にするフレームワークを典型的には提供する。例えば、上で挙げられたモバイルデバイスオペレーティングシステムは、それぞれ、位置
サービス回路、有線及び無線ネットワークインタフェース、ユーザコンタクト、及び他のアプリケーションと相互作用するためのフレームワークを提供する。アプリの外で動作するハードウェア及びソフトウェアモジュールとの通信は、モバイルデバイスオペレーティングシステムによって提供されるアプリケーションプログラミングインタフェース(API)を介して典型的には提供される。よって、クライアントデバイス101A-101N上で動作するアプリを介して、これらクライアントデバイス101A-101Nは、1つ以上のウェブソケットを介して、グループベース通信プラットフォーム105と通信するよう構成される。
【0053】
ある好ましい非限定的な実施形態では、クライアントデバイス101A-101Nは、メッセージ配信サーバ107A-107N及び/又はインタフェース計算エンティティ109とウェブブラウザを介して相互作用し得る。クライアントデバイス101A-101Nは、メッセージ配信サーバ107A-107N及び/又はインタフェース計算エンティティ109と相互作用するよう設計されたさまざまなハードウェア又はファームウェアも含み得る。再び、クライアントデバイス101A-101Nのブラウザを介して、クライアントデバイス101A-101Nは、1つ以上のウェブソケットを介してグループベース通信プラットフォーム105と通信するよう構成される。
【0054】
例示的グループベース通信プラットフォーム105のある実施形態では、メッセージ又はメッセージング通信は、クライアントデバイス101A-101Nからグループベース通信プラットフォーム105に送られ得る。さまざまな実現例において、メッセージは、クライアントデバイス101A-101Nのうちの1つによって直接に、通信ネットワーク103を通じてグループベース通信プラットフォーム105に送られ得る。メッセージは、メッセージサーバ及び/又はその他のような媒介を介してグループベース通信プラットフォーム105に送られ得る。例えば、クライアントデバイス101A-101Aは、デスクトップ、ラップトップ、タブレット、スマートフォン、及び/又はクライアントアプリケーションを実行しているもの(例えばグループベース通信アプリ)であり得る。ある実現例では、メッセージは、メッセージ識別子、送信ユーザ識別子、グループ識別子、グループベース通信チャネル識別子、メッセージコンテンツ(例えばテキスト、絵文字、画像、リンク)、添付物(例えばファイル)、メッセージ階層データ(例えばそのメッセージは、他のメッセージの応答であり得る)、サードパーティメタデータ、及び/又はその他のようなデータを含み得る。ある実施形態では、クライアントデバイス101A-101Nは、エクステンシブルマークアップランゲージ(「XML」)でフォーマットされたデータを含む、以下に示される(セキュア)ハイパーテキストトランスファプロトコル(「HTTP(S)」)POSTメッセージの形態を実質的にとる、以下の例示的メッセージを提供し得る。
【0055】
POST /authrequest.php HTTP/1.1
Host: www.server.com
Content-Type: Application/XML
Content-Length: 667
<?XML version = “1.0” encoding = “UTF-8”?>
<auth_request>
<timestamp>2020-12-31 23:59:59</timestamp>
<user_accounts_details>
<user_account_credentials>
<user_name>ID_user_1</user_name>
<password>abc123</password>
//OPTIONAL <cookie>cookieID</cookie>
//OPTIONAL <digital_cert_link>www.mydigitalcertificate.com/ JohnDoeDaDoeDo
e@gmail.com/mycertifcate.dc</digital_cert_link>
//OPTIONAL <digital_certificate>_DATA_</digital_certificate>
</user_account_credentials>
</user_accounts_details>
<client_details> //iOS Client with App and Webkit
//it should be noted that although several client details
//sections are provided to show example variants of client
//sources, further messages will include only on to save
//space
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53</user_agent_string>
<client_product_type>iPhone6,1</client_product_type>
<client_serial_number>DNXXX1X1XXXX</client_serial_number>
<client_UDID>3XXXXXXXXXXXXXXXXXXXXXXXXD</client_UDID>
<client_OS>iOS</client_OS>
<client_OS_version>7.1.1</client_OS_version>
<client_app_type>app with webkit</client_app_type>
<app_installed_flag>true</app_installed_flag>
<app_name>MSM.app</app_name>
<app_version>1.0 </app_version>
<app_webkit_name>Mobile Safari</client_webkit_name>
<client_version>537.51.2</client_version>
</client_details>
<client_details> //iOS Client with Webbrowser
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D201 Safari/9537.53</user_agent_string>
<client_product_type>iPhone6,1</client_product_type>
<client_serial_number>DNXXX1X1XXXX</client_serial_number>
<client_UDID>3XXXXXXXXXXXXXXXXXXXXXXXXD</client_UDID>
<client_OS>iOS</client_OS>
<client_OS_version>7.1.1</client_OS_version>
<client_app_type>web browser</client_app_type>
<client_name>Mobile Safari</client_name>
<client_version>9537.53</client_version>
</client_details>
<client_details> //Android Client with Webbrowser
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Nexus S Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30</user_agent_string>
<client_product_type>Nexus S</client_product_type>
<client_serial_number>YXXXXXXXXZ</client_serial_number>
<client_UDID>FXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX</client_UDID>
<client_OS>Android</client_OS>
<client_OS_version>4.0.4</client_OS_version>
<client_app_type>web browser</client_app_type>
<client_name>Mobile Safari</client_name>
<client_version>534.30</client_version>
</client_details>
<client_details> //Mac Desktop with Webbrowser
<client_IP>10.0.0.123</client_IP>
<user_agent_string>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/537.75.14</user_agent_string>
<client_product_type>MacPro5,1</client_product_type>
<client_serial_number>YXXXXXXXXZ</client_serial_number>
<client_UDID>FXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXX</client_UDID>
<client_OS>Mac OS X</client_OS>
<client_OS_version>10.9.3</client_OS_version>
<client_app_type>web browser</client_app_type>
<client_name>Mobile Safari</client_name>
<client_version>537.75.14</client_version>
</client_details>
<message>
<message_identifier>ID_message_10</message_identifier>
<team_identifier>ID_team_1</team_identifier>
<channel_identifier>ID_channel_1</channel_identifier>
<contents>That is an interesting invention. I have attached a copy our
patent policy.</contents>
<attachments>patent_policy.pdf</attachments>
</message>
</auth_request>
図示された実施形態では、グループベース通信プラットフォーム105は、チャネル識別子及び/又はグループ識別子によって特定されたチャネル内の複数のクライアントデバイス101A-101Nの間で及び/又はそれら複数のクライアントデバイス101A-101Nに送信されたメッセージを受信及び/又は配布(disseminate)し、通信チャネ
ルのメンバーシップを集合的に形成するクライアントデバイス101A-101Nの間でのこれらメッセージの配布を促進するよう構成された複数のメッセージ配信サーバ107A-107Nを備える。
【0056】
ある実施形態では、上で規定されたオブジェクト識別子は、特定のメッセージが特定のオブジェクトに関連するオブジェクトアップデートとして実現されることを示すよう、メッセージと関連付けられ得る。
【0057】
ある実施形態では、応答を示すデータは、そのメッセージと関連付けられ得る。例えば、他のユーザによるメッセージへの応答は、反応(例えばメッセージに関連付けられた絵文字の選択、メッセージに関連付けられた「いいね」ボタンの選択)、メッセージに埋め込まれたハイパーリンクをクリックすること、メッセージへ応答すること(例えばメッセージに応答してグループベース通信チャネルインタフェースにメッセージをポストすること)、メッセージに関連付けられたファイルをダウンロードすること、あるグループベース通信チャネルから他のグループベース通信チャネルへメッセージをシェアすること、メッセージをピン留めすること、メッセージに星を付けること、及び/又はその他を含み得る。ある実施形態では、他のユーザによるメッセージへの応答に関するデータは、メッセージに含まれ得て、そのメッセージは、応答を決定するためにパースされ得る(例えばPHPコマンドを用いて)。他の実現例では、メッセージへの応答に関するデータは、データベースから取り出され得る。例えば、応答に関するデータは、以下のようなMySQLデー
タベースコマンドを介して取り出され得る。
【0058】
SELECT messageResponses
FROM MSM_Message
WHERE messageID = ID_message_10.
例えば、メッセージへの応答に関するデータは、メッセージについてのコンテキスト(例えばメッセージについての、あるユーザの視点からのソーシャルスコア)を決定するのに用いられ得る。他の例では、メッセージへの応答に関連するデータは、ユーザに関するコンテキストを決定するために分析され得る(例えばあるトピックにおけるユーザの経験は、そのトピックに関するユーザのメッセージに対する応答に基づいて決定され得る)。
【0059】
実施形態において、添付物は、メッセージに含まれ得る。もし添付物が存在するなら、ファイルは、メッセージと関連付けられ得て、ある実施形態では、これらファイルは、対応するオブジェクト識別子を有するオブジェクトとして分離して特定され得る。ある実現例では、メッセージは、添付物のファイル名を決定するためにパースされ得る(例えばPHPコマンドを用いて)。例えば、ファイルコンテンツは、メッセージについてのコンテキストを決定するために分析され得る(例えば特許ポリシーの文書は、そのメッセージが「特許」というトピックに関連付けられていると表示し得る)。
【0060】
実施形態において、会話プリミティブ(conversation primitive)は、メッセージと関連付けられ得る。ある実施形態では、会話プリミティブは、メッセージを分析し、インデックス付けし、記憶し、及び/又はその他をするのに用いられる要素である。例えば、メッセージは、それ自身で分析され得て、それ自身の会話プリミティブを形成し得る。他の例では、メッセージは、会話を構成する他のメッセージと共に分析され得て、会話を構成するメッセージは、会話プリミティブを形成し得る。ある実現例では、会話プリミティブは、当該メッセージ、特定の個数(例えば2)の先行するメッセージ及び特定の個数(例えば2)の後続するメッセージとして決定され得る。他の実現例では、会話プリミティブは、当該メッセージ及び他のメッセージで議論されているトピック及び/又はこれらメッセージの近接性(例えばメッセージ送信順序の近接性、メッセージ送信時刻の近接性)の分析に基づいて決定され得る。
【0061】
実施形態においては、上で説明されたように決定されたさまざまなメタデータ及び/又はメッセージのコンテンツは、メッセージをインデックス化し(例えば会話プリミティブを用いて)、及び/又はサーチングのさまざまなファセット(すなわちメッセージ配信サーバ107から結果を返すサーチクエリ)を促進するために用いられ得る。メッセージ配信サーバ107A-107Nにおいて、メッセージに関連付けられたメタデータが求められ得て、メッセージはインデックス化され得る。ある実施形態において、メッセージは、会社の又はグループのメッセージが別個にインデックス化されるようにインデックス化され得る(例えば他のグループ及び/又は会社とシェアされていないグループ及び/又は会社に関連付けられた別個のインデックスにおいて)。ある実現例では、メッセージは、別個の分散化されたリポジトリにおいてインデックス化され得る(例えばセキュリティの目的のためにデータ隔離を促進するために)。もしメッセージに関連付けられた添付物が存在するなら、その関連付けられたファイルのファイルコンテンツは、サーチングを促進するために、メッセージ配信サーバ107A-107Nにおいてそのようなファイルをインデックス化するために用いられ得る。ある実施形態においては、ファイルは、別個の配信リポジトリにおいて会社の又はグループのファイルがインデックス化されるように、インデックス化され得る。
【0062】
1つ以上のクライアントデバイス101A-101N及びグループベース通信プラットフォーム105の間での電子情報交換の例は、
図1を参照して以下に説明される。
【0063】
図1に示されるように、グループベース通信プラットフォーム105は、個々のクライアントデバイス101A-101Nが、さまざまなメッセージを互いに交換し、及び/又はグループベース通信プラットフォーム105から配布されたオブジェクトアップデートを取り出すことができるようにする。そのようなメッセージを交換するために、個別のクライアントデバイス101A-101Nは、メッセージ(例えばテキストベースのメッセージ、ファイル、ビデオ及び/又はオーディオストリーム、及び/又はその他)を通信プロトコル(例えばウェブソケット、非RTM(非リアルタイムメッセージング)メッセージングプロトコル、及び/又はその他)を介してインタフェース(例えばインタフェース計算エンティティ109)に送信する。これらメッセージは、1つ以上のメッセージ配信サーバ107A-107Nに究極的には提供され、これがメッセージをインデックス化し、これらメッセージをメッセージの意図された受信者(例えばクライアントデバイス101A-101N)に配信する。オブジェクトアップデートは、メッセージ配信サーバ107A-107Nに同様に提供されるが、そのようなオブジェクトアップデートは、クライアントデバイス101A-101Nから発生していないかもしれない。むしろオブジェクトアップデートは、1つ以上の外部システム(例えばファイル管理システム)から提供されてもよく、又はオブジェクトアップデートは、グループベース通信プラットフォーム105内の1つ以上の計算エンティティによって生成されてもよい。配信されたメッセージは、インタフェース計算エンティティ109を介して受信者クライアントデバイス101A-101Nに提供され、このエンティティは、メッセージの個別の受信者クライアントデバイス101A-101Nとのウェブソケット接続を維持し、さまざまなメッセージ配信サーバ107A-107Nとの1つ以上のバックエンド接続を維持する。
【0064】
図1の実施形態によれば、クライアントデバイス101A-101Nは、クライアントデバイス101A-101Nのユーザに利用可能なコンテキスト上関連するユーザインタフェースにおいて、受信されたメッセージを表示するよう構成される。例えば、グループベース通信チャネルの一部として第1クライアントデバイス101から送信されたメッセージは、そのグループベース通信チャネルの他のメンバに関連付けられたクライアントデバイス101A-101N上のユーザインタフェースディスプレイウィンドウ内で表示される。ここで説明されるように、特定のオブジェクトアップデートを示すメッセージは、受信者クライアントデバイス101A-101Nによって使用可能なオブジェクト識別子と共に送信されることによって、これらメッセージを、適切なユーザディスプレイ要素のような適切なコンテキストと共に、及び/又は適用可能なオブジェクトと関連させて表示する。さらに、オブジェクト識別子は、ここで説明されるように、オブジェクトサブスクリプションに基づいて特定のクライアントデバイス101A-101Nに仕向けられたメッセージをフィルタリングするために、メッセージ配信サーバ107A-107Nのうちのさまざまなものによって使用可能であり得る。
【0065】
個別のクライアントデバイス101A-101Nにメッセージを配信するために、メッセージは、メッセージ配信サーバ107A-107Nからインタフェース計算エンティティ109に送信され、これは、クライアントデバイス101A-101Nのそれぞれに仕向けられた全てのメッセージを仕向け、これらメッセージの全てを適切な接続(例えばウェブソケット接続)を通じてクライアントデバイス101A-101Nに送信する。
【0066】
さまざまな実施形態で利用される例示的装置
それぞれのメッセージ配信サーバ107は、
図2に示される装置200のような1つ以上の計算システムによって実現され得る。装置200は、プロセッサ202、メモリ204、入力/出力回路206、通信回路208、及びメッセージ増幅器回路210を含み得る。装置200は、
図1-6についてここで説明された操作を実行するよう構成され得る。これら要素202-210は、機能的な限定について記載されているが、具体的な実現
例は、特定のハードウェアの使用を必然的に含むことを理解されたい。これらの要素202-210のいくつかは、同様の又は共通のハードウェアも含み得ることも理解されたい。例えば、回路のうちの2つのセットが同じプロセッサ、ネットワークインタフェース、記憶媒体等の使用を活用することで、それらの関連付けられた機能を実行し、重複するハードウェアが回路群のそれぞれのセットごとには必要がないようにする。
【0067】
ある実施形態においては、プロセッサ202(及び/又はコプロセッサ又はプロセッサを補助する又はそうでなければプロセッサに関連付けられた任意の他の処理回路)は、装置の要素の間で情報を受け渡しをするためにバスを介してメモリ204と通信し得る。メモリ204は、非一時的であり、例えば1つ以上の揮発性及び/又は不揮発性メモリを含み得る。換言すれば、例えばメモリ204は、電子記憶装置(例えばコンピュータで読み取り可能な記憶媒体)であり得る。メモリ204は、この装置が、本発明の例示的実施形態に従ってさまざまな機能を実行できるようにするために、情報、データ、コンテンツ、アプリケーション、命令等を記憶するよう構成され得る。
【0068】
プロセッサ202は、いくつかの異なるやり方で実現され得て、例えば独立して実行するよう構成された1つ以上の処理装置を含み得る。ある好ましく非限定的な実施形態では、プロセッサ202は、命令の独立した実行、パイプライン処理、及び/又はマルチスレッディングを可能にするようにバスを介して並列に構成された1つ以上のプロセッサを含み得る。「処理回路」という語の使用は、装置の内部にあるシングルコアプロセッサ、マルチコアプロセッサ、マルチプロセッサ、及び/又はリモートつまり「クラウド」プロセッサを含むと理解されよう。
【0069】
いくつかの好ましい非限定的な実施形態においては、プロセッサ202は、メモリ204に記憶された又はそうでなければプロセッサ202にアクセス可能である命令を実行するよう構成され得る。ある好ましい非限定的な実施形態においては、プロセッサ202は、ハードコードされた機能を実行するよう構成され得る。よってハードウェア又はソフトウェアのいずれの方法によって構成されようとも、又はそれらの組み合わせによって構成されようとも、プロセッサ202は、そのように構成されている間は、本発明の実施形態による操作を実行することができるエンティティ(例えば回路として物理的に実現される)を表し得る。代替として、他の例として、プロセッサ202がソフトウェア命令の実行者として実現される時、これら命令は、命令が実行される時にプロセッサ202がここに記載されたアルゴリズム及び/又は操作を実行するようにプロセッサ202を具体的に構成し得る。
【0070】
一つの例として、プロセッサ202は、複数のクライアントデバイス101A-101Nを接続する1つ以上の通信チャネルを維持することによって、それらの間でメッセージの共有/配布を可能にするよう構成され得る。プロセッサ202は、特定の通信チャネル内のクライアントデバイス101A-101Nの間でのやりとりが意図されたメッセージが、クライアントデバイス101A-101Nを介して提供されたそれぞれのディスプレイウィンドウ内で表示されるように、それらクライアントデバイス101A-101Nに適切に配布されることを確実にする。
【0071】
さらに、プロセッサ202は、特定の通信チャネルでやりとりされたメッセージを、その中でのメッセージの記憶及び/又はインデキシングのためにデータベースと同期化するよう構成され得る。ある実施形態では、プロセッサ202は、クライアントデバイス101A-101Nへの配布のために、記憶された及び/又はインデキシングされたメッセージをインタフェース計算エンティティ109に提供し得る。
【0072】
ある実施形態においては、装置200は、入力/出力回路206を含み得て、これが今
度は、出力をユーザに提供するために、またある実施形態では、ユーザ入力の表示を受け取るためにプロセッサ202と通信し得る。入力/出力回路206は、ユーザインタフェースを備え得て、ディスプレイを含み得て、ウェブユーザインタフェース、モバイルアプリケーション、クライアントデバイス、キオスク等を備え得る。ある実施形態では、入力/出力回路206は、キーボード、マウス、ジョイスティック、タッチスクリーン、タッチエリア、ソフトキー、マイクロホン、スピーカ、又は他の入力/出力機構を含み得る。プロセッサを備えるプロセッサ及び/又はユーザインタフェース回路は、プロセッサにアクセス可能であるメモリ(例えばメモリ204及び/又はその他)上に記憶されたコンピュータプログラム命令(例えばソフトウェア及び/又はファームウェア)を通して1つ以上のユーザインタフェース要素の1つ以上の機能を制御するよう構成され得る。
【0073】
通信回路208は、装置200と通信するネットワーク及び/又は任意の他のデバイス、回路、又はモジュールから/へデータを受信及び/又は送信するよう構成される、ハードウェアか、ハードウェア及びソフトウェアの組み合わせかのいずれかで実現されるデバイス又は回路のような任意の手段であり得る。この点で、通信回路208は、有線又は無線の通信ネットワークとの通信を可能にするネットワークインタフェースを例えば含み得る。例えば、通信回路208は、1つ以上のネットワークインタフェースカード、アンテナ、バス、スイッチ、ルータ、モデム、及びサポートするハードウェア及び/又はソフトウェア、又はネットワークを介した通信を可能にするのに適切な任意の他のデバイスを含み得る。追加として又は代替として、通信回路208は、アンテナ/アンテナ群を介した送信を行うために、又はアンテナ/アンテナ群を介して受け取られた信号の受信を扱うために、アンテナ/アンテナ群と相互作用するための回路を含み得る。
【0074】
メッセージ増幅器回路210は、1つ以上のクライアントデバイス101A-101Nから他のクライアントデバイス101A-101Nに受け取られた電子メッセージ及び関連付けられたメタデータをデータベースシャード(群)に基づいてコピー及び増幅するよう構成されたハードウェアを含む。メッセージ増幅器回路210は、これらのアクションを実行するためにプロセッサ202のような処理回路を利用し得る。しかし、ある実施形態では、メッセージ増幅器回路210は、ここで記載された機能を実行するための別個のプロセッサ、特別に構成されたフィールドプログラマブルゲートアレイ(FPGA)、又は特定用途向け集積回路(ASIC)を含み得ることも理解されたい。メッセージ増幅器回路210は、これらの設計された機能を実現するハードウェア又はソフトウェアのいずれかによって構成された装置のハードウェア要素を用いて実現され得る。
【0075】
ここで説明されている情報のうちの全て又は一部は、装置200の1つ以上の要素によって受信され、生成され、及び/又は保持されているデータに基づき得る。ある実施形態では、ここで説明されている機能のうちの少なくとも一部を提供するために、1つ以上の外部システム(リモートクラウドコンピューティング及び/又はデータストレージシステムのような)も活用され得る。
【0076】
図3の図示された実施形態においては、インタフェース計算エンティティ109は、装置300を包含する1つ以上の計算システムによって実現される。図示された装置300は、プロセッサ301、メモリ303、入力/出力回路305、及び通信回路307を含む。装置300は、
図1-6について説明された操作を実行するよう構成され得る。これらの要素301-307は、機能的限定について説明されているが、具体的な実現例は、特定のハードウェアの使用を必然的に含むことを理解されたい。これら要素301-307のあるものは、同様又は共通のハードウェアを含み得ることも理解されたい。例えば、2セットの回路は、同じプロセッサ、ネットワークインタフェース、記憶媒体等の使用を共に活用し得て、それらの関連付けられた機能を実行することで、重複するハードウェアが回路のそれぞれのセットについて必要ではなくなるようにできる。
【0077】
ある実施形態では、プロセッサ301(及び/又はコプロセッサ又はプロセッサを補助する又はそうでなければプロセッサに関連付けられた任意の他の処理回路)は、装置の要素の間で情報を受け渡しをするためにバスを介してメモリ303と通信し得る。メモリ303は、非一時的であり、例えば1つ以上の揮発性及び/又は不揮発性メモリを含み得る。換言すれば、例えばメモリ303は、電子記憶装置(例えばコンピュータで読み取り可能な記憶媒体)であり得る。メモリ303は、この装置が、本発明の例示的実施形態に従ってさまざまな機能を実行できるようにするために、情報、データ、コンテンツ、アプリケーション、命令等を記憶するよう構成され得る。例えば、メモリ303は、1つ以上のグループベース通信チャネル上でやりとりされるメッセージをキャッシュすることによって、プロセッサ301がさまざまなメッセージをクライアントデバイスに提供し得る(例えば必要に応じて又はリクエストされた場合に)よう構成され得る。
【0078】
プロセッサ301は、いくつかの異なるやり方で実現され得て、例えば独立して実行するよう構成された1つ以上の処理装置を含み得る。ある好ましく非限定的な実施形態では、プロセッサ301は、命令の独立した実行、パイプライン処理、及び/又はマルチスレッディングを可能にするようにバスを介して並列に構成された1つ以上のプロセッサを含み得る。
【0079】
いくつかの好ましい非限定的な実施形態においては、プロセッサ301は、メモリ303に記憶された又はそうでなければプロセッサ301にアクセス可能である命令を実行するよう構成され得る。ある好ましい非限定的な実施形態においては、プロセッサ301は、ハードコードされた機能を実行するよう構成され得る。よってハードウェア又はソフトウェアのいずれの方法によって構成されようとも、又はそれらの組み合わせによって構成されようとも、プロセッサ301は、そのように構成されている間は、本発明の実施形態による操作を実行することができるエンティティ(例えば回路として物理的に実現される)を表し得る。代替として、他の例として、プロセッサ301がソフトウェア命令の実行者として実現される時、これら命令は、命令が実行される時にプロセッサ301がここに記載されたアルゴリズム及び/又は操作を実行するようにプロセッサ301を具体的に構成し得る。
【0080】
ある実施形態においては、装置300は、入力/出力回路305を含み得て、これが今度は、出力をユーザに提供するために、またある実施形態では、ユーザ入力の表示を受け取るためにプロセッサ301と通信し得る。入力/出力回路305は、ユーザインタフェースを備え得て、ディスプレイを含み得て、ウェブユーザインタフェース、モバイルアプリケーション、クライアントデバイス、キオスク等を備え得る。ある実施形態では、入力/出力回路305は、キーボード、マウス、ジョイスティック、タッチスクリーン、タッチエリア、ソフトキー、マイクロホン、スピーカ、又は他の入力/出力機構も含み得る。
【0081】
通信回路307は、装置300と通信するネットワーク及び/又は任意の他のデバイス、回路、又はモジュールから/へデータを受信及び/又は送信するよう構成される、ハードウェアか、ハードウェア及びソフトウェアの組み合わせかのいずれかで実現されるデバイス又は回路のような任意の手段であり得る。この点で、通信回路307は、有線又は無線の通信ネットワークとの通信を可能にするネットワークインタフェースを例えば含み得る。例えば、通信回路307は、1つ以上のネットワークインタフェースカード、アンテナ、バス、スイッチ、ルータ、モデム、及びサポートするハードウェア及び/又はソフトウェア、又はネットワークを介した通信を可能にするのに適切な任意の他のデバイスを含み得る。追加として又は代替として、通信回路307は、アンテナ/アンテナ群を介した送信を行うために、又はアンテナ/アンテナ群を介して受け取られた信号の受信を扱うために、アンテナ/アンテナ群と相互作用するための回路を含み得る。
【0082】
ここで説明されている情報のうちの全て又は一部は、装置300の1つ以上の要素によって受信され、生成され、及び/又は保持されているデータに基づき得る。ある実施形態では、ここで説明されている機能のうちの少なくとも一部を提供するために、1つ以上の外部システム(リモートクラウドコンピューティング及び/又はデータストレージシステムのような)も活用され得る。
【0083】
さらに、インタフェース計算エンティティ109は、グループベース通信プラットフォーム105の境界の中で示されているが、インタフェース計算エンティティ109は、通信ネットワーク103を介してグループベース通信プラットフォーム105の局面と通信するエッジベース計算デバイスとして実現され得ることを理解されたい。そのような実施形態は、地理的に分散されている複数のインタフェース計算エンティティ109を備え得て、そのようなインタフェース計算エンティティ109は、それぞれのインタフェース計算エンティティ109に近接した地理的範囲内にあるクライアントデバイス101A-101Nと通信するよう構成され得る。
【0084】
「回路」という語は、ハードウェア、及び、ある実施形態においてはハードウェアを設定するためのソフトウェアを含むように広く理解されるべきである。したがって、それぞれの装置200,300の要素について、ここで用いられる「回路」という語は、ここで記載される特定の回路に関連付けられた機能を実行するよう構成された特定のハードウェアを含むように理解されるべきである。例えば、ある実施形態では、「回路」は、処理回路、記憶媒体、ネットワークインタフェース、入力/出力デバイス等を含み得る。ある実施形態では、装置200の他の要素は、特定の回路の機能を提供又は補充し得る。例えば、プロセッサ202は、処理機能を提供し得て、メモリ204は、記憶機能を提供し得て、通信回路208は、ネットワークインタフェース機能を提供し得る等である。同様に、装置300の他の要素は、特定の回路の機能を提供又は補充し得る。例えば、プロセッサ301は、処理機能を提供し得て、メモリ303は、記憶機能を提供し得て、通信回路307は、ネットワークインタフェース機能を提供し得る等である。
【0085】
理解されるように、任意のそのようなコンピュータプログラム命令及び/又は他のタイプのコードは、コンピュータ、プロセッサ又は他のプログラム可能な装置の回路にロードされることによって、その機械上でコードを実行するコンピュータ、プロセッサ又は他のプログラム可能な回路が、ここで説明されるものを含むさまざまな機能を実現する手段を成すような機械が作り出される。
【0086】
上に説明されたように、及び本開示に基づいて理解されるように、本発明の実施形態は、方法、モバイルデバイス、バックエンドネットワークデバイス等として構成され得る。したがって実施形態は、ハードウェアだけを含む、又はソフトウェア及びハードウェアの任意の組み合わせを含むさまざまな手段を備え得る。さらに、実施形態は、記憶媒体内に実現されたコンピュータ読み取り可能なプログラム命令(例えばコンピュータソフトウェア)を有する、少なくとも1つの非一時的コンピュータ読み取り可能な記憶媒体上のコンピュータプログラム製品の形態をとり得る。非一時的ハードディスク、CD-ROM、フラッシュメモリ、光学記憶デバイス、又は磁気記憶デバイスを含む任意の適切なコンピュータ読み取り可能な記憶媒体が利用され得る。
【0087】
さらに、示されていないが、グループベース通信プラットフォームのさまざまな実施形態は、さまざまなグループベース通信チャネル内でやりとりされたメッセージを記憶及び/又はインデキシングするよう構成された1つ以上のデータベースを備え得る。
【0088】
例示的データフロー
図5-6は、個々のクライアントデバイス101A-101N及びグループベース通信プラットフォーム105を示すフロー図である。上述のように、さまざまな実施形態は、グループベース通信プラットフォーム105が、オブジェクトアップデートについてのサブスクリプションベースのデータ送信スキームの使用を通してクライアントデバイス101A-101Nに送信されるネットワークトラフィックの量を最小化できるようにする。これらサブスクリプションベースのデータ送信スキームは、クライアントデバイス101A-101Nによるユーザアクティビティに基づいて動作することによって、クライアントデバイス101A-101Nが、特定のオブジェクトが現在ユーザによって見られているか、又はそうでなければユーザの現在の関心の対象であると考えられていると判断されると、特定のオブジェクトのアップデートをサブスクライブするようリクエストし得る。クライアントデバイス101A-101Nは、1つ以上のトリガイベントを利用することによって、サブスクライブリクエスト又はアンサブスクライブリクエストをいつ生成すべきかを決定し得る。
【0089】
クライアントデバイスの動作
さまざまな実施形態によれば、個別のクライアントデバイス101A-101Nは、それに対してオブジェクトアップデートを提供するためにグループベース通信プラットフォーム105からそれらクライアントデバイス101A-101Nに送信されるネットワークトラフィックのレベルを求める。クライアントデバイス101A-101Nは、ある種の定義されたトリガイベントの検出に依拠して、どのオブジェクトアップデートがグループベース通信プラットフォーム105から個別のクライアントデバイス101A-101Nに送信されなければならないかを決定し、それらクライアントデバイス101A-101Nは、オブジェクトアップデートについてクライアントデバイス101A-101Nの決定された必要を反映させるために、サブスクライブリクエスト及びアンサブスクライブリクエストとして実現されるサブスクリプション変更リクエストの形態をとるデータをグループベース通信プラットフォーム105に提供する。個別のクライアントデバイス101A-101Nは、ユーザによる使用を常にモニタすることによって、クライアントデバイス101A-101Nのグラフィカルインタフェースとのユーザのインタラクションに基づいて、どのオブジェクトアップデートサブスクリプションが中止され、どのオブジェクトアップデートサブスクリプションが開始される必要があるかを決定するよう構成される。
【0090】
図5は、グループベース通信プラットフォーム105に関連しリアルタイムでアップトゥデートなオブジェクトアップデートサブスクリプションを維持するために、例示的クライアントデバイス101によって実行されるさまざまなステップを図示する。ブロック501において示されるように、クライアントデバイス101は、クライアントデバイス101とのユーザインタラクションをモニタすることによって、ブロック502で示されるように、1つ以上のオブジェクトについてトリガイベントが起こったかを検出する。
【0091】
トリガイベントは、クライアントデバイス101のユーザが特定のオブジェクトに関心を有することを示すさまざまなイベントのうちの任意のものであり得る。
図4の例示的インタフェースの概略図を簡単に参照すれば、トリガイベントは、インタフェース内での特定のペインをスクロールすることによって、オブジェクトの表示がユーザインタフェースの可視部分の境界を横切って、隠れた部分403(例えばインタフェースの視野の外)から可視部分402(例えばインタフェースの視野の中)に動き、サブスクライブリクエストを開始し、又はその反対をすること(可視部分402から隠れた部分403への動き)でアンサブスクライブリクエストを開始することであり得る。他の例として、トリガイベントは、あるディスプレイと他のディスプレイとの間で移動することであり得る(例えばクライアントデバイスに、新しく選択されたディスプレイ内の1つ以上のオブジェクトについてサブスクライブリクエストを開始するようにし、クライアントデバイスに、選択さ
れていないディスプレイ内の1つ以上のオブジェクトについてアンサブスクライブリクエストを開始するようにさせること)。その中に1つ以上のオブジェクトを有するチャネルを選択すること、オブジェクトの統合されたリスティングを選択すること、クライアントデバイスにおいて特定のデータタイプを受信する(例えばウェブソケット接続、RTM接続、及び/又はその他を介して)こと、及び/又はその他のような、他のトリガイベントは、サブスクリプション変更リクエストを開始するのに利用され得るトリガイベントのさらなる例である。
【0092】
図5を再び参照して、サブスクライブリクエストを開始するためのトリガイベントを検出すると、クライアントデバイス101は、ブロック503で示されるように、そのようなサブスクライブリクエストを生成する。これらサブスクライブリクエスト(後述するアンサブスクライブリクエストと共に)は、トリガイベントの発生が検出されると生成されるので、クライアントデバイス101は、サブスクリプション変更リクエストを動的に生成することによって、メッセージ配信サーバ107A-107Nが、クライアントデバイス101についてのサブスクリプションリスティングを備えるアップトゥデートなサブスクリプションデータを保持するよう構成される。サブスクリプション変更リクエストの動的生成を通して、クライアントデバイス101は、クライアントデバイス101(及びクライアントデバイスのユーザ)にとって現在関心がある特定のオブジェクトに関連するオブジェクトアップデートだけがクライアントデバイス101に送信されることを確実にする。これは、グループベース通信プラットフォーム105及びクライアントデバイス101の間で送信されるオブジェクトアップデートデータの量を最小化する。
【0093】
ある実施形態では、サブスクライブリクエストは、リクエスト識別子(レスポンスを最初のリクエストと一致させるためにあとで利用され得る)、サブスクライブタイプ(例えばどのようにリクエスト/レスポンスがクライアントデバイス101及びメッセージ配信サーバ107A-107Nの間でルーティングされるかを示し得る、及び/又はサブスクライブリクエストがどのタイプのオブジェクトに関連するかを示し得る)、及びサブスクリプションがリクエストされるオブジェクト及び/又はそれらオブジェクトの他の特性を特定するサブスクリプションマップ(例えばバージョン識別子/番号)を備える。サブスクリプションマップは、さまざまな実施形態によるアレイにおいて提供され得る。ある実施形態では、サブスクリプションリクエストは、メッセージ配信サーバ107A-107Nにおいて付加的であり、したがってサブスクリプションマップは、サブスクリプションがリクエストされている新しいオブジェクトのリスティングだけを含み得る。サブスクリプションマップ内に含まれているリスティングは、ここで説明されるように、メッセージ配信サーバ107A-107Nにおいて既存のリスティングに付加される。しかし、ある実施形態においては、サブスクリプションマップは、排他的であることによって、サブスクリプションマップは、メッセージ配信サーバ107A-107Nにおいてサブスクリプションリクエストが受信されると、クライアントデバイス101によってサブスクライブされた既存のオブジェクトのリスティングを上書きし得ることを理解されたい。
【0094】
ブロック504で示されるように、構築されたサブスクリプションリクエストは、グループベース通信プラットフォーム105に送信され、ここでそれは、記憶及び使用のために、メッセージ配信サーバ107A-107Nに仕向けられる。
図5では示されていないが、メッセージ配信サーバ107A-107Nは、サブスクライブリクエストが成功/不成功だったことを示す別個のレスポンスを送信し得て、これは、任意のオブジェクトアップデートを受信する前にクライアントデバイス101によって受信され得る。そのような実施形態においては、クライアントデバイス101は、レスポンスがサブスクライブリクエストが不成功だったことを示す場合においては、新しいサブスクライブリクエストを生成し得る。
【0095】
いったんサブスクライブリクエストがメッセージ配信サーバ107A-107Nによって成功してアクセプトされたなら、メッセージ配信サーバ107A-107Nは、クライアントデバイス101のローカルデータストレージエリア内に記憶されたオブジェクトデータが最新でないと判断すると(例えばクライアントデバイス101に記憶され、サブスクリプション変更リクエスト内で反映されたオブジェクトデータのバージョン識別子が、メッセージ配信サーバ107A-107Nに記憶された最新のバージョン識別子と一致しないと判断すると)、オブジェクトアップデートをクライアントデバイス101に提供する。クライアントデバイス101は、ブロック505で示されるように、ローカルデータストレージエリア内のそれらのオブジェクトアップデートを受信及び記憶し、ブロック506で示されるように、クライアントデバイス101のグラフィカルディスプレイを介して表示されたそれらオブジェクトの視覚化インジケータに適切なアップデートを提供する。
【0096】
再びブロック502を参照すれば、オブジェクトについてのアンサブスクライブトリガイベント(例えばオブジェクトをディスプレイの非可視部分に移動させること)を検出すると、クライアントデバイス101は、ブロック507で示されるように、アンサブスクライブリクエストを生成する。ある実施形態では、アンサブスクライブリクエストは、リクエスト識別子(レスポンスを最初のリクエストと一致させるためにあとで利用され得る)、アンサブスクライブタイプ(例えばどのようにリクエスト/レスポンスがクライアントデバイス101及びメッセージ配信サーバ107A-107Nの間でルーティングされるかを示し得る、及び/又はアンサブスクライブリクエストがどのタイプのオブジェクトに関連するかを示し得る)、及びアンサブスクライブリクエストが関連するオブジェクトのリスティングを備える。オブジェクトのリスティングは、ある実施形態では、アレイにおいて提供され得る。いったんアンサブスクライブリクエストがクライアントデバイス101においてアセンブルされると、クライアントデバイス101は、ブロック508で示されるように、アンサブスクライブリクエストをグループベース通信プラットフォーム105に送信し、ここでそれは、摂取され、メッセージ配信サーバ107A-107Nに提供される。
【0097】
ある実施形態では、アンサブスクリプションリクエストは、メッセージ配信サーバ107A-107Nにおいて付加的であり、したがってオブジェクトのリスティングは、アンサブスクライブリクエストが提供されている新しいオブジェクトのリスティングだけを含む。ある実施形態では、メッセージ配信サーバ107A-107Nのデフォルト動作は、特定のオブジェクトについてアンサブスクライブ状態であり、したがってアンサブスクライブリクエストは、メッセージ配信サーバ107A-107Nが、特定のクライアントデバイス101についてメッセージ配信サーバ107A-107Nにおいて保持されているサブスクリプションリストからリストされたオブジェクトを除去するようにし得る。
【0098】
ある実施形態においては、クライアントデバイス101をグループベース通信プラットフォーム105から切断すること及び/又は再接続することは、クライアントデバイス101を、クライアントデバイスのサブスクリプションリスト内に含まれる全てのサブスクリプションからアンサブスクライブするよう動作する(例えばクライアントデバイス101から送信された別個のアンサブスクライブリクエストのあるなしにかかわらず)。例えば、切断イベントの後に、クライアントデバイス101がグループベース通信プラットフォーム105に再接続されると、クライアントデバイス101は、切断イベントの前に存在した以前に確立されたサブスクリプションの全てについてのアンサブスクライブリクエストを生成及び送信し得る。他の例として、クライアントデバイス101がグループベース通信プラットフォーム105に再接続されると、メッセージ配信サーバ107A-107Nは、クライアントデバイス101を、切断イベントの前に存在していた全ての以前に確立されたサブスクリプションから自動的にアンサブスクライブし得る。これは、クライ
アントデバイスのサブスクリプションリストの中に残っている任意の外部の(extraneous)サブスクリプションをクリーンアップするよう動作し得て、それによりクライアントデバイス101がグループベース通信プラットフォーム105と再接続する時に、関連するサブスクリプションだけが更新される。
図5に関連して説明される方法に従って示されるように、再接続すると、クライアントデバイス101は、トリガイベントが検出される(例えばオブジェクトインジケータがディスプレイの視野の中にあることを検出すること及び/又はその他)オブジェクトについてだけ、サブスクリプションリクエストを生成する。
【0099】
メッセージ配信サーバの動作
図6は、ある実施形態によるサブスクリプション変更リクエストについてメッセージ配信サーバ107A-107Nによって実行されるステップの例示的セットを示す。ブロック601で示されるように、メッセージ配信サーバ107A-107Nは、サブスクリプション変更リクエストを1つ以上のクライアントデバイス101A-101Nから受信する。これらリクエストは、送信元クライアントデバイス101の身元を示すメタデータと共に受信され、それによってメッセージ配信サーバ107A-107Nは、送信元クライアントデバイス101A-101Nについてのサブスクリプションリストを適切にアップデートし得る。さらに、それらサブスクリプション変更リクエストは、リクエスト識別子(メッセージ配信サーバ107A-107Nにおいて生成されたレスポンスを、クライアントデバイス101において生成された初期リクエストと関連付けるのに用いられ得る)、リクエストタイプ(例えば、中でも、そのリクエストがサブスクライブ又はアンサブスクライブリクエストのどちらであるか、及びどのタイプのオブジェクトにそのリクエストが関するのかを示し得る)、及びリクエストが関連するオブジェクトのリスティングを備えるアレイを備え得る。具体的な例として、リクエストタイプは、リクエストがファイルアップデートについてのサブスクライブリクエストであることを示し得て、含まれるアレイは、リクエストが関連する特定のファイル(群)を特定するデータを備え得る。さらに他の例として、リクエストは、そのリクエストがユーザアップデートについてのアンサブスクライブリクエストであることを示し得て、含まれるアレイは、そのリクエストが関連する特定のユーザ(群)を特定するデータを備え得る。オブジェクトアップデートは、アップデートが関連するオブジェクトのタイプ及びアップデートが関連するオブジェクトの身元を特定する1つ以上の識別子と共に配信サーバ107A-107Nから送信されるので、リクエストの中に含まれるデータは、メッセージ配信サーバ107A-107Nが、クライアントデバイス101A-101Nに送信されたオブジェクトアップデートにフィルタを適用させるのに十分であり得る。
【0100】
図6のブロック602で示されるように、メッセージ配信サーバ107A-107Nは、クライアントデバイス101についてのサブスクリプションリストを、受け取られたサブスクリプション変更リクエストに基づいてアップデートする。上述のように、特定のクライアントデバイス101A-101Nについてメッセージ配信サーバ107A-107Nにおいて記憶されているサブスクリプションリストは付加的であり、それによりサブスクリプションリストをアップデートすることは、あるクライアントデバイスのサブスクリプションについて非重複的オブジェクトを、クライアントデバイスに固有のサブスクリプションリストに追加することを含む。
【0101】
ある実施形態においては、メッセージ配信サーバ107A-107Nは、サブスクリプションリストをアップデートする前に、単一のクライアントデバイス101から受け取られたサブスクライブリクエスト及びアンサブスクライブリクエストを比較するよう構成され、それにより、サブスクリプションリストに対して正味の変化をきたさないであろうサブスクライブリクエスト及びアンサブスクライブリクエストの組み合わせは、サブスクリプションリストをアップデートする前にキャンセルされ得る。具体的な例として、もし既
存のサブスクリプションリストが、クライアントデバイス101がオブジェクトAをサブスクライブしていることを示すなら、メッセージ配信サーバ107A-107Nは、オブジェクトAに関連するアンサブスクライブリクエスト及びサブスクライブリクエストの両方をそれから受け取り、これらは全体としては、オブジェクトAのアップデートへの連続したアンサブスクリプション(unsubscription)に続くリサブスクリプション(resubscription)を結果として生じ、メッセージ配信サーバ107A-107Nは、これらリクエストをキャンセルし得るが、それは、アンサブスクライブ及びサブスクライブイベントの正味の結果は、オブジェクトAについてのサブスクリプションの現状を維持することになるからである。
【0102】
さらにある実施形態においては、メッセージ配信サーバ107A-107Nは、特定のクライアントデバイス101A-101Nについて最大数の同時サブスクリプションを実現し得る。よって少なくとも実質的に同時のサブスクライブ及びアンサブスクライブリクエストを受信する時、メッセージ配信サーバ107A-107Nは、サブスクライブリクエストに基づいて新しいサブスクリプションを追加する前に、アンサブスクライブリクエストに基づいて、サブスクリプションリストをアップデートするよう構成され得る。さらにそのような実施形態においては、メッセージ配信サーバ107A-107Nは、最大許容数のサブスクリプションを超えるサブスクリプションの合計数になるようなサブスクライブリクエストを拒否するよう構成され得る。他の実施形態においては、メッセージ配信サーバ107A-107Nは、サブスクリプションの合計数がサブスクリプションの最大数を超えるサブスクライブリクエストを拒否せずに、その代わりにクライアントデバイス101を、サブスクリプションリストの中の最も古いサブスクリプションから自動的にアンサブスクライブすることによって、サブスクライブリクエスト内の新しくリクエストされたサブスクリプションを含むサブスクリプションの合計数が、クライアントデバイス101のサブスクリプションの最大数と同じかそれ未満に維持されるようにし得る。
【0103】
アップデートされたサブスクリプションリストに基づいて、メッセージ配信サーバ107A-107Nは、ブロック603に示されるように、オブジェクトアップデートをクライアントデバイス101A-101Nに配布する。これらオブジェクトアップデートは、インタフェース計算エンティティ109を通して提供され得て、このエンティティは、それらオブジェクトアップデートを適切なクライアントデバイス101A-101Nに渡すよう構成され得る。ある実施形態においては、例えば、切断から回復するためにクライアントデバイス101をグループベース通信プラットフォーム105に再接続した後に、メッセージ配信サーバ107A-107Nは、全ての適切なオブジェクトアップデートがクライアントデバイス101に提供されることによって、オブジェクトアップデートを最新の状態にすることを確実にするようさらに構成され得る。
【0104】
さらに
図6には不図示であるが、メッセージ配信サーバ107A-107Nは、サブスクリプション変更リクエストが成功したか不成功だったかを示すメッセージを、クライアントデバイス101に送信するよう構成され得る。これらの応答するメッセージ(リクエスト識別子に基づいてオリジナルリクエストと関連付けられ得る)は、ある実施形態においては、任意のオブジェクトアップデートデータからは別個に送信され得る。他の実施形態においては、応答するメッセージは、クライアントデバイス101に送信されたオブジェクトアップデートメッセージに追加される(例えば連結される)ことによって、サブスクリプション変更リクエストが成功したという表示をクライアントデバイス101に提供し得る。
【0105】
ある実施形態においては、クライアントデバイス101において生成されたサブスクリプション変更リクエストは、グループベース通信プラットフォーム105からデータを受け取るためにクライアントデバイス101によって利用される特定の接続メカニズムつい
て固有である。例えば、クライアントデバイス101がグループベース通信プラットフォーム105を持つ1つ以上のウェブソケット接続を介してデータを受け取る実施形態においては、サブスクリプション変更リクエストは、1つ以上のウェブソケット接続のそれぞれについて独立してクライアントデバイス101において生成される。よってクライアントデバイス101及びグループベース通信プラットフォーム105が全体として複数のウェブソケット通信をそれらの間に維持する実施形態においては(例えば別個のディスプレイ、チャネル、及び/又はその他をサポートする)、それぞれのウェブソケット接続は、クライアントデバイス101から送信され、メッセージ配信サーバ107A-107Nによって処理されたサブスクリプション変更リクエストに基づいて維持される対応するサブスクリプションリストを有し得る。
【0106】
さらにある実施形態においては、メッセージ配信サーバ107A-107Nは、宛先クライアントデバイス101A-101Nが1つ以上のメッセージを既に受信しているか、又はメッセージが依然としてそれらの宛先クライアントデバイス101A-101Nに送信されなければならないかを決定するよう構成される。そのような機能は、通信切断の後のクライアントデバイス101A-101N及びグループベース通信プラットフォーム105の間の再接続の間に特に関連し得る。そのような場合、メッセージ配信サーバ107A-107Nは、クライアントデバイス101A-101Nがそこに記憶されるアップトゥデートなメッセージを示すデータを有するためには、どのメッセージ(又は他のデータ)がクライアントデバイス101A-101Nに送信されなければならないかを決定するよう構成され得る。例えばメッセージ配信サーバ107A-107Nは、特定のオブジェクトについて特定のクライアントデバイス101A-101Nに提供された最後のメッセージを示すデータ(例えばクライアントデバイス101A-101Nに提供されたオブジェクトのバージョン識別子を示すデータ)を、特定のオブジェクトについて生成された全てのメッセージを示すデータ(例えば特定のオブジェクトについての最新バージョン識別子を示すデータ)と比較し得る。メッセージ配信サーバ107A-107Nは、どのメッセージ(もしあれば)がクライアントデバイス101A-101Nに提供されるべきであって、それによってそれらクライアントデバイス101A-101Nが、サブスクライブされたオブジェクトについてオブジェクトアップデートについて十分に最新の状態にあるようにできるか、クライアントデバイス101A-101N上に記憶されているそれらサブスクライブされたオブジェクトを示すそのようなデータが十分に現在のものであるようにできるかをそれから判断し得る。
【0107】
インタフェース計算エンティティの動作
一般に、インタフェース計算エンティティ109は、メッセージ、オブジェクトアップデート、及び/又はその他をクライアントデバイス101A-101N及びメッセージ配信サーバ107A-107Nの間でリレーするよう構成される。メッセージが、クライアントデバイス101A-101Nに配布されるべくメッセージ配信サーバ107A-107Nから受信される時、インタフェース計算エンティティ109は、宛先クライアントデバイス101A-101Nとの適切なウェブソケット接続を特定し、それらメッセージを適切なクライアントデバイス101A-101Nに渡すよう構成される。ある実施形態では、アサインされた宛先クライアントデバイス101A-101Nでインタフェース計算エンティティ109において受信されたメッセージ(オブジェクトアップデート)は、ここで説明されたサブスクリプション方法に従って既にフィルタリングされていて、よってインタフェース計算エンティティ109は、特定のクライアントデバイス101が、インタフェース計算エンティティ109において受信されたオブジェクトアップデートをサブスクライブしたかを判断する必要がない。さらに、インタフェース計算エンティティ109は、特定のクライアントデバイス101がその特定のクライアントデバイス101に宛先が設定されたメッセージを既に受信したかを判断する必要がない。そのような実施形態では、インタフェース計算エンティティ109は、メッセージをメッセージ配信サーバ1
07A-107N及びクライアントデバイス101A-101Nの間で単に届けるよう動作する。
【0108】
ここで説明されたたように、インタフェース計算エンティティ109は、クライアントデバイス101A-101Nのうちのそれぞれと1つ以上のウェブソケット接続(又は他のデータ送信接続)を維持するよう構成され得る。同様に、インタフェース計算エンティティ109は、メッセージ配信サーバ107A-107Nとの1つ以上のバックエンド接続を維持するよう構成され、それによってオブジェクトアップデート及び/又は他のメッセージがクライアントデバイス101A-101N及びメッセージ配信サーバ107A-107Nの間で届けられることを可能にする。
【0109】
さらに、ある実施形態においては、メッセージ配信サーバ107A-107Nを参照してここで説明された1つ以上の機能は、インタフェース計算エンティティ109によって実行され得ることを理解されたい。例えば、ある実施形態のインタフェース計算エンティティ109は、1つ以上のクライアントデバイス101A-101Nについてのサブスクリプションデータを保持し得て、及び/又はインタフェース計算エンティティ109は、サブスクライブされたオブジェクトについてクライアントデバイス101A-101Nにおいて記憶されるオブジェクトに関連するデータが完全に最新であるかを判断し得る。よって、グループベース通信プラットフォーム105のさまざまな機能を実行するとしてここで説明された計算エンティティの性質は、ある種の構成に限定される必要はないことを理解されたい。
【0110】
結論
多くの改変及び他の実施形態には、本開示が関連する技術における当業者なら、前述の記載及び関連する図面において提示された教示を利用し、想到することができよう。したがって、本開示は、開示された特定の実施形態に限定されるべきではなく、改変及び他の実施形態は、添付の特許請求の範囲の範囲内に含まれるよう意図されていると理解されるべきである。ここでは特定の語が採用されているが、それらは一般的な叙述的な意味で用いられているのに過ぎず、限定を目的としたものではない。