(57)【要約】  本発明の開示の実施は、ネットワーク接続に対する伝送バッファサイズを決定する及び実施する方法、システム、及びコンピュータプログラムストレージデバイスに関する。コンピュータ実装方法は、少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、ネットワーク接続に対するそれぞれの帯域幅要件とそれぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、各ネットワーク接続に対する新しい伝送バッファサイズをネットワーク接続に対する望ましい伝送バッファサイズに設定する段階と、新しい伝送バッファサイズを使用してデータを少なくとも１つのサーバから少なくとも１つのクライアントデバイスに伝送する段階とを含む。【選択図】図２
2019525678.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、
各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、
前記ネットワーク接続に対する前記それぞれの帯域幅要件と前記それぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、
各ネットワーク接続に対する新しい伝送バッファサイズを前記ネットワーク接続に対する前記望ましい伝送バッファサイズに設定する段階と、
前記新しい伝送バッファサイズを使用してデータを前記少なくとも１つのサーバから前記少なくとも１つのクライアントデバイスに伝送する段階と、
を含むことを特徴とするコンピュータ実装方法。
【請求項２】
前記複数のネットワーク接続の各々に対する前記それぞれの帯域幅要件を取得する段階は、
前記ネットワーク接続のうちの１つに関連付けられたクライアントデバイス上で実行されるアプリケーションに対するターゲットデータ転送速度を決定する段階、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記複数のネットワーク接続の各々に対する前記それぞれの帯域幅要件を取得する段階は、
期間中に少なくとも１つのネットワーク接続にわたって伝送されるデータの量を測定する段階、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項４】
各ネットワーク接続に対する前記それぞれの待ち時間を決定する段階は、
少なくとも１つのネットワーク接続に対する往復時間を決定する段階、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項５】
前記少なくとも１つのネットワーク接続に対する前記それぞれの待ち時間は、前記往復時間を２で割ったものを含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記往復時間を決定する段階は、
前記少なくとも１つのサーバから前記往復時間を取得する段階、
を含む、
ことを特徴とする請求項４に記載の方法。
【請求項７】
各ネットワーク接続に対する前記望ましい伝送バッファサイズを計算する段階は、
少なくとも１つのネットワーク接続に対する前記それぞれの帯域幅要件と前記それぞれの待ち時間との積を決定する段階、
を含む、
ことを特徴とする請求項１に記載の方法。
【請求項８】
少なくとも１つのネットワーク接続が、ＴＣＰ／ＩＰ接続を含むことを特徴とする請求項１に記載の方法。
【請求項９】
少なくとも１つの接続が、コネクションレスであることを特徴とする請求項１に記載の方法。
【請求項１０】
後の時間での少なくとも１つのネットワーク接続に対するそれぞれの待ち時間を決定する段階と、
前記後の時間での前記それぞれの待ち時間に基づいて前記少なくとも１つのネットワーク接続に対する新しい望ましい伝送バッファサイズを計算する段階と、
を更に含むことを特徴とする請求項１に記載の方法。
【請求項１１】
少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、
各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、
前記ネットワーク接続に対する前記それぞれの帯域幅要件と前記それぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、
各ネットワーク接続に対する新しい伝送バッファサイズを前記ネットワーク接続に対する前記望ましい伝送バッファサイズに設定する段階と、
前記新しい伝送バッファサイズを使用してデータを前記少なくとも１つのサーバから前記少なくとも１つのクライアントデバイスに伝送する段階と、
を含む作動を実行するようにプログラムされた１又は２以上のコンピュータ、
を含むことを特徴とするシステム。
【請求項１２】
前記複数のネットワーク接続の各々に対する前記それぞれの帯域幅要件を取得する段階は、
前記ネットワーク接続のうちの１つに関連付けられたクライアントデバイス上で実行されるアプリケーションに対するターゲットデータ転送速度を決定する段階、
を含む、
ことを特徴とする請求項１１に記載のシステム。
【請求項１３】
前記複数のネットワーク接続の各々に対する前記それぞれの帯域幅要件を取得する段階は、
期間中に少なくとも１つのネットワーク接続にわたって伝送されるデータの量を測定する段階、
を含む、
ことを特徴とする請求項１１に記載のシステム。
【請求項１４】
各ネットワーク接続に対する前記それぞれの待ち時間を決定する段階は、
少なくとも１つのネットワーク接続に対する往復時間を決定する段階、
を含む、
ことを特徴とする請求項１１に記載のシステム。
【請求項１５】
前記少なくとも１つのネットワーク接続に対する前記それぞれの待ち時間は、前記往復時間を２で割ったものを含むことを特徴とする請求項１４に記載のシステム。
【請求項１６】
前記往復時間を決定する段階は、
前記少なくとも１つのサーバから前記往復時間を取得する段階、
を含む、
ことを特徴とする請求項１４に記載のシステム。
【請求項１７】
各ネットワーク接続に対する前記望ましい伝送バッファサイズを計算する段階は、
少なくとも１つのネットワーク接続に対する前記それぞれの帯域幅要件と前記それぞれの待ち時間との積を決定する段階、
を含む、
ことを特徴とする請求項１１に記載のシステム。
【請求項１８】
少なくとも１つのネットワーク接続が、ＴＣＰ／ＩＰ接続を含むことを特徴とする請求項１１に記載のシステム。
【請求項１９】
前記作動は、
後の時間での少なくとも１つのネットワーク接続に対するそれぞれの待ち時間を決定する段階と、
前記後の時間での前記それぞれの待ち時間に基づいて前記少なくとも１つのネットワーク接続に対する新しい望ましい伝送バッファサイズを計算する段階と、
を更に含む、
ことを特徴とする請求項１１に記載のシステム。
【請求項２０】
１又は２以上のコンピュータによって実行された時に、
少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、
各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、
前記ネットワーク接続に対する前記それぞれの帯域幅要件と前記それぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、
各ネットワーク接続に対する新しい伝送バッファサイズを前記ネットワーク接続に対する前記望ましい伝送バッファサイズに設定する段階と、
前記新しい伝送バッファサイズを使用してデータを前記少なくとも１つのサーバから前記少なくとも１つのクライアントデバイスに伝送する段階と、
を含む作動を前記コンピュータに実行させる命令が格納された非一時的コンピュータ可読媒体、
を含むことを特徴とする物品。
【発明の詳細な説明】
【技術分野】
【０００１】
〔関連出願への相互参照〕
この出願は、引用により本明細書にその内容全体が組み入れられている２０１６年８月２４出願の国特許出願第１５／２４５，７１８号に対する優先権を主張するものである。
【０００２】
この明細書は、複数のネットワーク接続のための伝送バッファをサイズ設定するためのシステム及び方法に関する。
【背景技術】
【０００３】
一般的に、クライアントデバイスとサーバシステム間の接続は、データを伝送するために伝送バッファを利用する。例えば、伝送制御プロトコル（ＴＣＰ）は、各接続されたデバイスのオペレーティングシステムカーネル内の送信バッファ及び受信バッファを使用する場合がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
そのような伝送バッファの不適正なサイズ設定は、待ち時間問題及び／又はメモリ圧力を含む様々な問題に至る可能性がある。例えば、伝送バッファが小さすぎる時に、サーバとクライアントデバイス間の過度のハンドシェーキングが、待ち時間問題を引き起こす及び／又は接続が望ましいデータ転送速度を維持するのを阻止する場合がある。同様に、伝送バッファが大きすぎる時に、バッファを維持するメモリ要件が、特に数千又は数百万の接続を伴うクライアント‐サーバシステムに対して過度になる可能性がある。サーバシステムとクライアント間の接続のための伝送バッファの適正なサイズ設定を容易にするシステム及び方法に対する必要性が存在する。
【課題を解決するための手段】
【０００５】
本明細書に説明するシステム及び方法の各例は、複数のネットワーク接続のための伝送バッファをサイズ設定するのに使用される。往復時間（ＲＴＴ）又は待ち時間は、例えば、サーバ上のオペレーティングシステムカーネルとカーネルからＲＴＴを抽出するアプリケーションとを使用して各接続に対して測定される。帯域幅要件は、例えば、接続されたデバイス上で実行される１又は２以上のアプリケーションに関連付けられた要求されるデータ転送速度に基づいて各接続に対して決定される。特定の例では、伝送バッファサイズは、ＲＴＴ及び帯域幅要件に基づいて決定され、かつ接続性の変化を考慮するために定期的に更新又は調節される場合がある。
【０００６】
本明細書に説明するシステム及び方法は、数千又は数百万の接続を有する実時間システムにとって特に有利である。システム及び方法は、伝送バッファサイズを最適化して待ち時間を最小にし、かつメモリ圧力を低減することができる。そのようなバッファサイズ調節は、動的に行うことができ（例えば、オンザフライで及び／又は経時的に）、かつ好ましくは各接続に対して固有であり、バッファサイズが、各接続に対して個々に最適化される（例えば、帯域幅要件及び接続に対するＲＴＴに基づいて）。メモリ使用を最小に保つことにより、システムによって扱うことができる接続の数及びこれらの接続の帯域幅が最大にされる。
【０００７】
一般的に、本明細書の主題の一態様は、少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、ネットワーク接続に対するそれぞれの帯域幅要件とそれぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、各ネットワーク接続に対する新しい伝送バッファサイズをネットワーク接続に対する望ましい伝送バッファサイズに設定する段階と、新しい伝送バッファサイズを使用してデータを少なくとも１つのサーバから少なくとも１つのクライアントデバイスに伝送する段階とを含むコンピュータ実装方法に関する。
【０００８】
ある一定の例では、複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階は、ネットワーク接続のうちの１つに関連付けられたクライアントデバイス上で実行されるアプリケーションに対するターゲットデータ転送速度を決定する段階を含む。複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階は、例えば、期間中に少なくとも１つのネットワーク接続にわたって伝送されるデータの量を測定する段階を含むことができる。一部の事例では、各ネットワーク接続に対するそれぞれの待ち時間を決定する段階は、少なくとも１つのネットワーク接続に対する往復時間を決定する段階を含む。少なくとも１つのネットワーク接続に対するそれぞれの待ち時間は、例えば、往復時間を２で割ったものである又はそれを含むことができる。
【０００９】
様々な実施では、往復時間を決定する段階は、少なくとも１つのサーバから往復時間を取得する段階を含む。各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階は、少なくとも１つのネットワーク接続（例えば、ＴＣＰ／ＩＰ接続又はコネクションレス接続）に対するそれぞれの帯域幅要件とそれぞれの待ち時間との積を決定する段階を含むことができる。一部の例では、本方法は、後の時間での少なくとも１つのネットワーク接続に対するそれぞれの待ち時間を決定する段階と、後の時間でのそれぞれの待ち時間に基づいて少なくとも１つのネットワーク接続に対する新しい望ましい伝送バッファサイズを計算する段階とを含む。
【００１０】
別の態様では、本明細書の主題は、少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、ネットワーク接続に対するそれぞれの帯域幅要件とそれぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、各ネットワーク接続に対する新しい伝送バッファサイズをネットワーク接続に対する望ましい伝送バッファサイズに設定する段階と、新しい伝送バッファサイズを使用してデータを少なくとも１つのサーバから少なくとも１つのクライアントデバイスに伝送する段階とを含む作動を実行するようにプログラムされた１又は２以上のコンピュータを含むシステムに関する。
【００１１】
ある一定の例では、複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階は、ネットワーク接続のうちの１つに関連付けられたクライアントデバイス上で実行されるアプリケーションに対するターゲットデータ転送速度を決定する段階を含む。複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階は、例えば、期間中に少なくとも１つのネットワーク接続にわたって伝送されるデータの量を測定する段階を含むことができる。一部の事例では、各ネットワーク接続に対するそれぞれの待ち時間を決定する段階は、少なくとも１つのネットワーク接続に対する往復時間を決定する段階を含む。少なくとも１つのネットワーク接続に対するそれぞれの待ち時間は、例えば、往復時間を２で割ったものである又はそれを含むことができる。
【００１２】
様々な実施では、往復時間を決定する段階は、少なくも１つのサーバから往復時間を取得する段階を含む。各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階は、例えば、少なくとも１つのネットワーク接続（例えば、ＴＣＰ／ＩＰ接続又はコネクションレス接続）に対するそれぞれの帯域幅要件とそれぞれの待ち時間との積を決定する段階を含むことができる。一部の例では、作動は、後の時間での少なくとも１つのネットワーク接続に対するそれぞれの待ち時間を決定する段階と、後の時間でのそれぞれの待ち時間に基づいて少なくとも１つのネットワーク接続に対する新しい望ましい伝送バッファサイズを計算する段階とを含む。
【００１３】
別の態様では、本明細書の主題は、１又は２以上のコンピュータによって実行された時に、少なくとも１つのサーバと少なくとも１つのクライアントデバイス間の複数のネットワーク接続の各々に対するそれぞれの帯域幅要件を取得する段階と、各ネットワーク接続に対するそれぞれの待ち時間を決定する段階と、ネットワーク接続に対するそれぞれの帯域幅要件とそれぞれの待ち時間とに基づいて各ネットワーク接続に対する望ましい伝送バッファサイズを計算する段階と、各ネットワーク接続に対する新しい伝送バッファサイズをネットワーク接続に対する望ましい伝送バッファサイズに設定する段階と、新しい伝送バッファサイズを使用してデータを少なくとも１つのサーバから少なくとも１つのクライアントデバイスに伝送する段階とを含む作動をコンピュータに実行させる命令が格納された非一時的コンピュータ可読媒体に関する。
【００１４】
本発明に与えた態様に関して説明した実施形態又は実施例の要素は、本発明の別の態様の様々な実施形態又は実施例に使用することができる。例えば、１つの独立請求項に従属する従属請求項の特徴は、他の独立請求項のうちのいずれかの装置、システム、及び／又は方法に使用できるように考えられている。
【００１５】
本明細書に説明する主題の１又は２以上の実施形態の詳細は、添付図面及び以下の説明に示している。本発明の主題の他の特徴、態様、及び利点は、説明、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【００１６】
【図１】複数のネットワーク接続に対する伝送バッファサイズを決定及び調節するための例示的システムの概略図である。
【図２】サーバシステムとクライアントデバイス間の接続に対する伝送バッファサイズを決定及び調節するための例示的システムの概略図である。
【図３】サーバシステムとクライアントデバイス間の接続に対する概略データフロー図である。
【図４】複数のネットワーク接続に対して伝送バッファサイズを調節する例示的方法の図である。
【発明を実施するための形態】
【００１７】
一般的に、本明細書に説明するシステム及び方法は、１又は２以上のサーバと複数のクライアントデバイス間のネットワーク接続（例えば、ＴＣＰ／ＩＰ又はユーザデータグラムプロトコル／ＩＰ接続）にわたってメッセージを送信するための伝送バッファをサイズ設定するのに使用される。本発明のシステム及び方法のゴールは、メモリ使用及び待ち時間が最小にされるように伝送バッファをサイズ設定し、同時に各接続に対して望ましい帯域幅を達成することである。
【００１８】
図１は、複数のネットワーク接続に対する伝送バッファサイズを最適化するための例示的システム１００を示す。サーバシステム１１２は、処理、データストレージ、及びデータ伝送を提供する。サーバシステム１１２は、様々な地理的場所又はデータセンターに配備することができる１又は２以上のプロセッサ１１４、ソフトウエアコンポーネント、及びデータベースを含むことができる。サーバシステム１１２ソフトウエアコンポーネントは、サーバアプリケーション１１６、サーバカーネル１１８、及びサーババッファサイズモジュール１２０を含むことができる。ソフトウエアコンポーネントは、同じか又は異なる個々のデータ処理装置上で実行することができるサブコンポーネントを含むことができる。サーバシステム１１２データベースは、１又は２以上の物理的ストレージシステムに存在することができるサーバデータ１２２を含むことができる。サーバデータ１２２は、一般的に、例えば、サーバシステム１１２自体、サーバシステム１１２の現在又は以前のネットワーク接続、現在又は以前の帯域幅要件、サーバシステム１１２又はクライアントデバイスにインストール又は他に使用されるソフトウエア、及びユーザプリファレンスのうちの１又は２以上に関連する情報を含むことができる。ソフトウエアコンポーネント及びデータベースは以下に詳しく説明する。サーバアプリケーション１１６、サーバカーネル１１８、及びバッファサイズモジュール１２０は、データベース（例えば、サーバデータ１２２）に接続される又はこれと通信するものとして示しているが、サーバアプリケーション１１６、サーバカーネル１１８、及び／又はバッファサイズモジュール１２０は、必ずしもデータベースに接続されない又はこれと通信しない。
【００１９】
適切なグラフィカルユーザインタフェースを有するアプリケーションは、ユーザがサーバシステム１１２と情報を交換する又は他に対話することを可能にするようにエンドユーザアプリケーションとして提供することができる。エンドユーザアプリケーションは、クライアントデバイスのユーザによってネットワーク１１３（例えば、インターネット及び／又はローカルネットワーク）を通してアクセスすることができる。図示した例では、クライアントデバイスは、ユーザクライアントデバイス１２６、１２８、１３０、１３２、及び１３４を含む。各クライアントデバイスは、例えば、パーソナルコンピュータ、スマートフォン、タブレットコンピュータ、又はラップトップコンピュータとすることができる。他のクライアントデバイスも可能である。
【００２０】
クライアントデバイス１３０に関連して示すように、各クライアントデバイスは、１又は２以上のプロセッサ、ソフトウエアコンポーネント、及び／又はデータベースを含むことができる。例えば、クライアントデバイス１３０ソフトウエアコンポーネントは、クライアントアプリケーション１３６、クライアントカーネル１３８、及びクライアントバッファサイズモジュール１４０を含むことができる。ソフトウエアコンポーネントは、同じか又は異なる個々のデータ処理装置上で実行することができるサブコンポーネントを含むことができる。クライアントデバイス１３０データベースは、１又は２以上の物理的ストレージシステムに存在することができるクライアントデータ１４２を含むことができる。クライアントデータ１４２は、一般的に、例えば、クライアントデバイス１３０自体、クライアントデバイス１３０の現在又は以前のネットワーク接続、現在又は以前の帯域幅要件、クライアントデバイス１３０にインストール又は他に使用されるソフトウエア、及びユーザプリファレンスのうちの１又は２以上に関連する情報を含むことができる。クライアントデバイス１２６、１２８、及び１３４は、類似のクライアントアプリケーション、クライアントカーネル、クライアントバッファサイズモジュール、及び／又はクライアントデータを含むのが好ましい。
【００２１】
一般的に、サーバアプリケーション１１６及びクライアントアプリケーション１３６は、サーバシステム１１２及びクライアントデバイス１３０上でそれぞれ実行されているソフトウエアプログラムとすることができる。サーバアプリケーション１１６及びクライアントアプリケーション１３６は、それぞれサーバシステム１１２及びクライアントデバイス１３０上で行われている１又は２以上の活動をサポートすることができ、かつ互いに対話する及び／又は情報を交換することができる。例えば、クライアントデバイス１３０のユーザは、クライアントアプリケーション１３６を使用して活動を行うことができ（例えば、ゲームをする、情報を要求する、インターネットを閲覧する、ビデオを見る、写真を送る、電子メールを送るなど）、クライアントアプリケーション１３６は、サーバアプリケーション１１６から定期的に情報を伝送する及び／又はサーバアプリケーション１１６から情報を要求することができる。複数参加型オンラインゲームの特定の場合では、例えば、ユーザは、クライアントデバイス１３０上でクライアントアプリケーション１３６と対話することによってゲームを楽しむことができる。クライアントアプリケーション１３６は、ユーザのゲーム活動に関する情報をサーバアプリケーション１１６に伝送することができ、サーバアプリケーション１１６は、ユーザの活動及び他のゲーム競技者の活動を処理することができる。サーバアプリケーション１１６は、競技者のゲーム環境及び活動に関する情報をクライアントアプリケーション１３６及び他のユーザのクライアントアプリケーションに伝送することができる。同様に、インターネットを閲覧するユーザの場合に、クライアントアプリケーション１３６は、ウェブブラウザアプリケーションとすることができ、サーバアプリケーション１１６は、ウェブサイトに関連付けられたアプリケーションとすることができる。例えば、ユーザが検索エンジンウェブサイトにアクセスするためにクライアントアプリケーション１３６を使用する時に、サーバアプリケーション１１６は、検索要求に応答するために使用されてウェブサイトのためにサーバにインストールされたアプリケーションとすることができる。ユーザが検索問合せを提出した時に、クライアントアプリケーション１３６は、問合せをサーバアプリケーション１１６に送信し、サーバアプリケーション１１６は、検索を実行して検索結果をクライアントデバイス１３０に送信することができる。
【００２２】
一般的に、サーバカーネル１１８及びクライアントカーネル１３８は、サーバシステム１１２及びクライアントデバイス１３０で発生する活動及び処理にわたる制御を有するそれぞれサーバシステム１１２及びクライアントデバイス１３０上で実行されるオペレーティングシステムの一部とすることができる。様々な実施では、２つのカーネルが、サーバシステム１１２とクライアントデバイス１３０間のデータの交換をそれぞれ制御する。そのような交換は、例えば、ユーザデータグラムプロトコル（ＵＤＰ）などのコネクションレスプロトコルを含む伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）又は他のデータ転送プロトコルを使用して行うことができる。各カーネルは、サーバシステム１１２とクライアントデバイス１３０間でデータを転送するために接続当たり１又は２以上のメモリバッファを含む又はそれを利用することができる。例えば、サーバカーネル１１８は、データをクライアントデバイス１３０に送信するための送信バッファ及びクライアントデバイス１３０からデータを受信するための受信バッファを含むことができる。同様に、クライアントカーネル１３８は、サーバシステム１１２にデータを送信するための送信バッファ及びサーバシステム１１２からデータを受信するための受信バッファを含む又はそれを利用することができる。様々な例では、送信バッファ及び／又は受信バッファを本明細書では「伝送バッファ」と呼ぶ。
【００２３】
ある一定の実施では、サーババッファサイズモジュール１２０及びクライアントバッファサイズモジュール１４０は、サーバシステム１１２とクライアントデバイス１３０間の接続を最適化するのに使用することができる。サーババッファサイズモジュール１２０及び／又はクライアントバッファサイズモジュール１４０は、接続を通じてデータを転送するのに使用されるバッファに対する適切なサイズを決定することができる。そのようなバッファサイズの決定は、例えば、本明細書に説明するように接続に対する望ましい帯域幅及び測定された待ち時間を考慮することによって行うことができる。
【００２４】
図２は、サーバシステム１１２とクライアントデバイス１３０間の接続２０２を示す例示的システム２００である。接続２０２は、例えば、ＴＣＰ／ＩＰ接続とすることができ、ネットワーク１１３を使用する又はそれを含むことができる。図示した例では、サーバカーネル１１８は、所与の接続上のクライアントデバイス１３０と情報を交換するための送信バッファ２０４及び受信バッファ２０６を含む又はそれを定義することができる。例えば、サーバシステム１１２又はサーバカーネル１１８は、メモリの固定物理量とすることができるサーバメモリを含むことができる又はそれへのアクセスを有することができ、サーバカーネル１１８は、サーバメモリとの送信バッファ２０４及び／又は受信バッファ２０６に対する望ましいサイズを割り当てることができる。送信バッファ２０４及び／又は受信バッファ２０６のサイズは、本明細書に説明するように経時的にサーバカーネル１１８によって定期的に調節することができる。同様に、クライアントカーネル１３８は、所与の接続上のサーバシステム１１２と情報を交換するための送信バッファ２０８及び受信バッファ２１０を含む又はそれを定義することができる。例えば、クライアントデバイス１３０又はクライアントカーネル１３８は、メモリの固定物理量とすることができるクライアントメモリを含む又はそれへのアクセスを有することができ、クライアントカーネル１３８は、クライアントメモリとの送信バッファ２０８及び／又は受信バッファ２１０に対する望ましいサイズを割り当てることができる。送信バッファ２０８及び／又は受信バッファ２１０のサイズは、本明細書に説明するように経時的にクライアントカーネル１３８によって定期的に調節することができる。
【００２５】
様々な例では、サーバアプリケーション１１６からのデータをクライアントアプリケーション１３６に転送する時に、データは、送信バッファ２０４にコピーすることができる。例えば、サーバアプリケーション１１６は、ソケットアプリケーションプログラミングインタフェース（ＡＰＩ）を使用して送信待機中のデータがあることをサーバカーネル１１８に知らせることができる。例えば、データが送信バッファ２０４に入れられた時、送信バッファ２０４が満杯の時、又は指定された時間量が経過した後に、送信バッファ２０４の内容は、接続２０２を通じて受信バッファ２１０に送信することができる。例えば、データが受信バッファ２１０に到着した時、受信バッファ２１０が満杯である時、又は指定された時間量が経過した後に、クライアントアプリケーション１３６は、ＡＰＩを使用して受信バッファ２１０からデータを抽出することができる。同様に、クライアントアプリケーション１３６からデータをサーバアプリケーション１１６に転送した時に、データは、送信バッファ２０８にコピーされる。例えば、データが送信バッファ２０８に入れられた時、送信バッファ２０８が満杯の時、又は指定された時間量が経過した後に、送信バッファ２０８の内容は、接続２０２を通じて受信バッファ２０６に送信することができる。例えば、データが受信バッファ２０６に到着した時、受信バッファ２０６が満杯の時、又は指定された時間量が経過した後に、サーバアプリケーション１１６は、受信バッファ２０６からデータを抽出することができる。
【００２６】
図３は、サーバシステム１１２とクライアントデバイス１３０間の接続２０２を通じたデータフローを示す例示的データフロー図である。時間ｔ１で、サーバシステム１１２は、データ３０２をクライアントデバイス１３０に送信する。データ３０２は、時間ｔ２にクライアントデバイス１３０に到着する。クライアントデバイス１３０がデータ３０２を受信した時に、クライアントデバイス１３０は、データが受信されたことをサーバシステム１１２に通知する肯定応答３０４をサーバシステム１１２に送信する。肯定応答３０４は、時間ｔ３にサーバシステム１１２で受信される。サーバシステム１１２がデータ３０２をクライアントデバイス１３０に送信してクライアントデバイス１３０から肯定応答３０４を受信するのにかかる時間（すなわち、時間ｔ３‐時間ｔ１）は、接続２０２を通じたデータ３０２の転送に対する往復時間（ＲＴＴ）と呼ばれる。時間ｔ４に、クライアントデバイス１３０は、データ３０６をサーバシステム１１２に送信する。サーバシステム１１２が時間ｔ５にデータ３０６を受信した時に、サーバシステム１１２は、肯定応答３０８をクライアントデバイス１３０に送信する。肯定応答３０８は、時間ｔ６にクライアントデバイス１３０によって受信される。時間ｔ６と時間ｔ４の間の差は、接続２０２を通じたデータ３０６の転送に対するＲＴＴである。
【００２７】
様々な例では、本発明のシステム及び方法は、接続を通じてデータが送信及び／又は受信される時間を記録することができ、記録された時間を使用してＲＴＴを決定することができる。例えば、サーバシステム１１２がデータ３０２をクライアントデバイス１３０に送信する時に、サーバカーネル１１８は、初期タイムスタンプ（すなわち、時間ｔ１）をデータ３０２に追加することができる。クライアントデバイス１３０が肯定応答３０４を送信した時に、クライアントカーネル１３８は、初期タイムスタンプを転送することができ、肯定応答タイムスタンプ（すなわち、時間ｔ２）を追加することができる。サーバシステム１１２が時間ｔ３に肯定応答３０４を受信した時に、サーバカーネル１１８は、時間ｔ３と時間ｔ１での初期タイムスタンプ間の差（すなわち、時間ｔ３−時間ｔ１）に基づいてＲＴＴを決定することができる。これに代えて又は加えて、サーバカーネル１１８又はクライアントカーネル１３８は、時間ｔ１での初期タイムスタンプと時間ｔ２での肯定応答タイムスタンプ間の差（すなわち、時間ｔ２−時間ｔ１）に基づいてサーバシステム１１２からクライアントデバイス１３０にデータ３０２送信するのにかかる時間を決定することができる。サーバカーネル１１８は、時間ｔ３と時間ｔ２での肯定応答タイムスタンプ間の差（すなわち、時間ｔ３−時間ｔ２）に基づいてクライアントデバイス１３０からサーバシステム１１２に肯定応答３０４を送信するのにかかる時間を決定することができる。従って、サーバカーネル１１８及び／又はクライアントカーネル１３８は、接続２０２に関連付けられたＲＴＴを演算、記録、及び／又はモニタすることができる。
【００２８】
ある一定の例では、本明細書に説明するシステム及び方法は、サーバシステム１１２とクライアントデバイス１３０間の接続２０２に関連付けられた帯域幅要件を決定することができる。帯域幅要件は、システム仕様（例えば、要求されるリフレッシュ速度及び／又は要求されるデータ転送速度）に基づいて及び／又は１又は２以上のクライアントデバイスにインストールされたクライアントアプリケーション間のデータ転送速度をモニタすることによって決定することができる。帯域幅要件は、例えば、クライアントアプリケーション１３６が適正に実行するのに要求するデータ転送の速度（例えば、クライアントアプリケーション１３６の適正なパフォーマンスに必要なデータ転送の最小速度）とすることができる。一般的に、帯域幅要件を決定及び実施することにより、サーバシステム１１２及び／又は１又は２以上のクライアントデバイス上の送信及び／又は受信バッファのサイズを低減することができる。これは、特にサーバシステム１１２がクライアントデバイスとの多くの接続（例えば、数千又は数百万の接続）をサポートしている時にサーバシステム１１２上のメモリ圧力を大幅に低減することができる。換言すると、サーバシステム１１２に関わる接続のためのメモリ使用を最小にすることにより、サーバシステム１１２は、多くの接続を取り扱うことができ、及び／又は数千又はそれより多くの接続まで拡張することができる。例えば、データが送信される前に送信バッファを充填するのに必要な時間が少なくなるので、よち小さいバッファサイズは、接続の待ち時間（例えば、ＲＴＴ又はＲＴＴ／２）を改善することもできる。
【００２９】
一部の例では、帯域幅要件は、サーバシステム１１２とクライアントデバイス１３０間のデータフローの方向に従って異なっている。例えば、サーバシステム１１２からクライアントデバイス１３０へのデータ転送の帯域幅要件は、クライアントデバイス１３０からサーバシステム１１２へのデータ転送の帯域幅要件とは異なる場合がある。データが主にサーバシステム１１２からクライアントデバイス１３０に転送される時に、帯域幅要件は、この方向に関してより高くなることがある。そのような状況は、例えば、クライアントデバイス１３０がサーバシステム１１２からビデオをストリーミングする時に起こることがある。反対の状況は、例えば、クライアントデバイス１３０がサーバシステム１１２にビデオをストリーミングする時に起こることがある。その場合には、帯域幅要件は、サーバシステム１１２からクライアントデバイス１３０へのデータ転送よりもクライアントデバイス１３０からサーバシステム１１２へのデータ転送に関してより高い場合がある。
【００３０】
ある一定の事例では、本発明のシステム及び方法は、クライアントデバイスに関連付けられた全ての接続の帯域幅要件を決定又は取得することができる。例えば、特定のクライアントデバイスがサーバ又は複数のサーバへの１よりも多い接続を有する時に、接続の帯域幅要件を組み合わせてこのクライアントデバイスに対する集約帯域幅を決定することができる。集約帯域幅要件を使用して、本明細書に説明する技術に従って特定のクライアントデバイスに関連付けられた１又は２以上の接続に対するバッファサイズを決定することができる。
【００３１】
一部の例では、接続の帯域幅要件は、サーバシステム１１２及び／又はクライアントデバイス１３０によって決定される又はそれに送信される。例えば、帯域幅要件は、サーバシステム１１２からクライアントデバイス１３０に及び／又はクライアントデバイス１３０からサーバシステム１１２に送信することができる。一部の事例では、サーバアプリケーション１１６及び／又はクライアントアプリケーション１３６のプロバイダが帯域幅要件を決定し、帯域幅要件をクライアントデバイス１３０に送信することができるサーバシステム１１２に帯域幅要件を提供する。
【００３２】
様々な例では、サーババッファサイズモジュール１２０を使用して、送信バッファ２０４及び／又は受信バッファ２０６に対する適切なサイズを決定することができる。サーババッファサイズモジュール１２０は、例えば、帯域幅要件及び／又はＲＴＴに基づいて送信バッファ２０４及び／又は受信バッファ２０６のサイズを決定することができる。サーババッファサイズモジュール１２０は、サーバカーネル１１８からＲＴＴを抽出することができ、及び／又は経時的にＲＴＴをモニタすることができる。様々な事例では、送信バッファ２０４及び／又は受信バッファ２０６のサイズは、以下のように決定することができる。
バッファサイズ＝ＲＴＴｘ帯域幅要件
ここで、ＲＴＴは、接続２０２に対する往復時間である。送信バッファ２０４のサイズを決定する時に、この式の帯域幅要件は、サーバシステム１１２からクライアントデバイス１３０へのデータ転送の帯域幅要件であるのが好ましい。受信バッファ２０６のサイズを決定する時に、この式の帯域幅要件は、クライアントデバイス１３０からサーバシステム１１２へのデータ転送の帯域幅要件であるのが好ましい。
【００３３】
同様に、クライアントバッファサイズモジュール１４０を使用して、送信バッファ２０８及び／又は受信バッファ２１０に対する適切なサイズを決定することができる。クライアントバッファサイズモジュール１４０は、例えば、帯域幅要件及び／又はＲＴＴに基づいて送信バッファ２０８及び／又は受信バッファ２１０のサイズを決定することができる。クライアントバッファサイズモジュール１４０は、クライアントカーネル１３８からＲＴＴを抽出することができ、及び／又は経時的にＲＴＴをモニタすることができる。様々な事例では、送信バッファ２０８及び／又は受信バッファ２１０のサイズは、以下のように決定することができる。
バッファサイズ＝ＲＴＴｘ帯域幅要件
ここで、ＲＴＴは、接続２０２に対する往復時間である。送信バッファ２０８のサイズを決定する時に、この式の帯域幅要件は、クライアントデバイス１３０からサーバシステム１１２へのデータ転送の帯域幅要件であるのが好ましい。受信バッファ２１０のサイズを決定する時に、この式の帯域幅要件は、サーバシステム１１２からクライアントデバイス１３０へのデータ転送の帯域幅要件であるのが好ましい。
【００３４】
バッファサイズは、接続が最初に確立された時に決定することができ、接続の寿命中に望ましい場合には定期的に調節することができる。例えば、送信及び受信バッファのサイズは、サーバシステム１１２とクライアントデバイス１３０間の接続２０２が最初に確立された時に初期又はデフォルト値に設定することができる。バッファサイズは、初期通信が開始されてＲＴＴが接続２０２に対して測定された後に本明細書に説明する方法を使用して計算することができる。バッファサイズが望ましい値に留まることを保証するために、ＲＴＴは、サーバカーネル１１８及び／又はクライアントカーネル１３８から定期的に抽出することができ、バッファは、これに従ってサイズ変更することができる（例えば、毎分、２分毎、又は１０分毎）。そのような定期的サイズ変更は、経時的に接続２０２に発生するいずれの変化も補償し、かつサーバシステム１１２上の最適メモリ使用の維持を助けることができる。
【００３５】
望ましい伝送バッファサイズが決定された状態で、サーババッファサイズモジュール１２０及び／又はクライアントバッファサイズモジュール１４０は、いずれの望ましい変更も実施することができる。例えば、サーババッファサイズモジュール１２０及び／又はクライアントバッファサイズモジュール１４０は、望ましい伝送バッファサイズをそれぞれのカーネル１１８及び１３８に送信することができ、カーネル１１８及び１３８は、望ましい変更を実施することができる。これに代えて又は加えて、カーネル１１８及び１３８は、接続に関して１又は２以上のネットワークドライバ（例えば、ＴＣＰ／ＩＰネットワークドライバ）と通信し、ネットワークドライバにバッファサイズを変更するように命令することができる。
【００３６】
図４は、複数の接続に対する伝送バッファをサイズ設定する例示的方法４００の流れ図である。伝送バッファは、例えば、送信バッファ及び／又は受信バッファであるか又はそれを含むことができ、伝送バッファは、サーバ及び／又はクライアントデバイス上に存在する又はそれによって使用することができる。本方法は、少なくとも１つのサーバと複数のクライアントデバイス間の複数の個別のネットワーク接続の各々のそれぞれの帯域幅要件を取得する段階（段階４０２）を含む。それぞれの待ち時間（例えば、ＲＴＴ又はＲＴＴ／２）は、各ネットワーク接続に対して決定される（段階４０４）。少なくとも１つの伝送バッファに対する望ましいサイズは、ネットワーク接続に対するそれぞれの帯域幅要件とそれぞれの待ち時間とに基づいて各ネットワーク接続に対して決定される（段階４０６）。新しい伝送バッファサイズは、ネットワーク接続に対する望ましい伝送バッファサイズに等しく各ネットワーク接続に対して設定される。サーバ上の新しい伝送バッファサイズを設定するために、サーバ上のカーネルは、サーバ上の送信バッファ及び／又は受信バッファのサイズを割り当てる又は調節することができる。同様に、クライアント上の新しい伝送バッファサイズを設定するために、クライアント上のカーネルは、クライアント上の送信バッファ及び／又は受信バッファのサイズを割り当てる又は調節することができる。データは、新しい伝送バッファサイズを使用して少なくとも１つのサーバから複数のクライアントデバイスに伝送される（段階４１０）。
【００３７】
様々な例では、本明細書に説明するシステム及び方法は、最小伝送バッファサイズを識別及び実施することによって待ち時間を低減する。一般的に、サーバ上のアプリケーションがクライアントデバイスにデータを送信する時に、データは、帯域幅によって割り算された送信バッファサイズに等しい時間にわたって送信バッファに存在する。送信バッファサイズを最小にすることにより、データは、クライアントデバイスに送信される前に送信バッファでの時間をあまり消費せず、これによって待ち時間を低減する。伝送バッファサイズを最小にすることは、サーバ‐クライアント接続の数が数千又は数百万である時に満足させることが困難である可能性があるストレージ要件を同じく低減する。
【００３８】
一部の実施では、本明細書に説明するシステム及び方法は、サーバシステム１１２又はクライアントデバイス１３０上の伝送バッファだけをサイズ設定するために使用される。例えば、データフローが主にサーバシステム１１２からクライアントデバイス１３０である時に、クライアントデバイス１３０上の伝送バッファサイズを調節することは必要ない又は望ましくない場合がある。その場合には、本発明のシステム及び方法を使用してサーバシステム１１２上の伝送バッファだけをサイズ設定することができる。一方で、データフローが主にクライアントデバイス１３０からサーバシステム１１２である時に、サーバシステム１１２上の伝送バッファサイズを調節することは必要ない又は望ましくないことがあり、本発明のシステム及び方法を使用してクライアントデバイス１３０上の伝送バッファだけをサイズ設定することができる。両方向のデータフローが類似である時に（例えば、１０倍以内）、本発明のシステム及び方法を使用してクライアントデバイス１３０及びサーバシステム１１２の両方上の伝送バッファサイズを調節することができる。
【００３９】
本明細書に説明する主題及び作動の実施形態は、本明細書及び本明細書の構造的均等物又はこれらの１又は２以上の組合せで開示する構造を含むデジタル電子回路、又はコンピュータソフトウエア、ファームウエア、又はハードウエアを用いて実施することができる。本明細書に説明する主題の実施形態は、１又は２以上のコンピュータプログラムとして、すなわち、データ処理装置によって実行するために又はその作動を制御するためにコンピュータストレージ媒体上に符号化されるコンピュータプログラム命令の１又は２以上のモジュールとして実施することができる。これに代えて又はこれに加えて、プログラム命令は、人工的に生成された伝播信号、例えば、データ処理装置によって実行するのに適する受信装置に送信する情報を符号化するために生成される機械発生式電気、光学、又は電磁信号で符号化することができる。コンピュータストレージ媒体は、コンピュータ可読ストレージデバイス、コンピュータ可読ストレージ基板、ランダム又はシリアルアクセスメモリアレイ又はデバイス、又はこれらの１又は２以上の組合せとすることができ、又はこれらに含めることができる。更に、コンピュータストレージ媒体は伝播信号ではないが、コンピュータストレージ媒体は、人工的発生式伝播信号で符号化されたコンピュータプログラム命令のソース又は宛先とすることができる。コンピュータストレージ媒体は、１又は２以上の個別の物理的構成要素又は媒体（例えば、複数のＣＤ、ディスク、又は他のストレージデバイス）とすることができ、又はこれらに含めることができる。
【００４０】
本明細書に説明する作動は、１又は２以上のコンピュータ可読ストレージデバイスに格納されたか又は他のソースから受信したデータにデータ処理装置によって実行される作動として実施することができる。
【００４１】
「データ処理装置」という語は、一例として、プログラマブルプロセッサ、コンピュータ、システムオンチップ、又はマルチプロセッサ、又は上述の組合せを含むデータを処理するための全ての種類の装置、デバイス、及び機械を網羅する。装置は、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）を含むことができる。装置は、ハードウエアに加えて、問題のコンピュータプログラムのための実行環境を生成するコード、例えば、プロセッサファームウエア、プロトコルスタック、データベース管理システム、オペレーティングシステム、クロスプラットフォーム実行時間環境、仮想機械、又はこれらの１又は２以上の組合せを構成するコードを含むことができる。装置及び実行環境は、ウェブサービス、分散コンピュータ及びグリッドコンピュータインフラストラクチャーのような様々な異なるコンピュータモデルインフラストラクチャーを実現することができる。
【００４２】
コンピュータプログラム（プログラム、ソフトウエア、ソフトウエアプリケーション、スクリプト、又はコードとしても公知）は、コンパイル又は解釈言語、宣言又は手順言語を含むプログラミング言語のあらゆる形態で書くことができ、独立プログラムとして又はモジュール、構成要素、サブルーチン、オブジェクト、又はコンピュータ環境に使用するのに適する他のユニットとして含むいずれの形態でも配備することができる。コンピュータプログラムは、ファイルシステムのファイルに対応することができるが、対応する必要はない。プログラムは、他のプログラム又はデータ（例えば、マークアップ言語文書に格納された１又は２以上のスクリプト）を保持するファイルの一部分に、問題のプログラム専用単一ファイルに、又は複数の調節されたファイル（例えば、１又は２以上のモジュール、サブプログラム、又はコードの一部分を格納するファイル）に格納することができる。コンピュータプログラムは、１つのコンピュータ又は１つのサイトに位置するか又は複数のサイトにわたって分散されて通信ネットワークによって相互接続された複数のコンピュータで実行されるように配備される。
【００４３】
本明細書に説明した処理及び論理フローは、１又は２以上のコンピュータプログラムを実行する１又は２以上のプログラマブルプロセッサによって実行され、入力データを演算して出力を生成することによってアクションを実行することができる。処理及び論理フローは、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）によって実行することができ、装置は、専用論理回路、例えば、ＦＰＧＡ（フィールドプログラマブルゲートアレイ）又はＡＳＩＣ（特定用途向け集積回路）として実施することができる。
【００４４】
コンピュータプログラムの実行に適するプロセッサは、一例として、汎用及び専用マイクロプロセッサの両方、及びあらゆる種類のデジタルコンピュータのいずれか１つ又はそれよりも多いプロセッサを含む。一般的に、プロセッサは、読取専用メモリ又はランダムアクセスメモリ又はこれらの両方から命令及びデータを受信する。コンピュータの基本的な要素は、命令に従ってアクションを実行するためのプロセッサ、及び命令及びデータを格納するための１又は２以上のメモリデバイスである。一般的にコンピュータは、データを格納するための１又は２以上の大容量ストレージデバイス、例えば、磁気ディスク、磁気光学ディスク、光学ディスク、又は固体ドライブを含むか、これらからデータを受信するか又はデータを転送し、又はこの両方のために作動的に結合される。しかし、コンピュータは、そのようなデバイスを有する必要はない。更に、コンピュータは、別のデバイス、いくつか挙げると、例えば、移動電話、携帯情報端末（ＰＤＡ）、移動音声又は映像プレーヤ、ゲームコンソール、全地球測位システム（ＧＰＳ）受信機、又は携帯式ストレージデバイス（例えば、ユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブ）に組み込むことができる。コンピュータプログラム命令及びデータを格納するのに適するデバイスは、一例として、半導体メモリデバイス、例えば、ＥＰＲＯＭ、ＥＥＰＲＯＭ、及びフラッシュメモリデバイス、磁気ディスク、例えば、内部ハードディスク又は着脱可能ディスク、磁気光学ディスク、及びＣＤ−ＲＯＭ及びＤＶＤ−ＲＯＭディスクを含む不揮発性メモリ、媒体、及びメモリデバイスの全ての形態を含む。プロセッサ及びメモリは、専用論理回路によって補足又は専用論理回路に組み込むことができる。
【００４５】
ユーザとの対話を提供するために、本明細書に説明する主題の実施形態は、ディスプレイデバイス、例えば、ユーザに情報を表示するためのディスプレイデバイス、例えば、ＣＲＴ（ブラウン管）又はＬＣＤ（液晶ディスプレイ）モニタ、及びキーボード及びポインティングデバイス、例えば、ユーザがコンピュータに入力を与えることを可能にするマウス、トラックボール、タッチパッド、又はスタイラスを有するコンピュータを用いて実施することができる。他の種類のデバイスを使用して、同様にユーザとの対話を提供することができ、例えば、ユーザに提供されるフィードバックは、センサ式フィードバックのあらゆる形態、例えば、視覚フィードバック、聴覚フィードバック、又は触知フィードバックとすることができ、ユーザからの入力は、音響、音声、又は触知入力を含むあらゆる形態で受信することができる。これに加えて、コンピュータは、ユーザによって使用されるデバイスに文書を送信し、かつそこから文書を受信することにより、例えば、ウェブブラウザから受信した要求に応じてユーザのクライアントデバイスのウェブブラウザにウェブページを送信することによってユーザと対話することができる。
【００４６】
本明細書に説明する主題の実施形態は、バックエンド構成要素を例えばデータサーバとして含むか、又はミドルウェア構成要素、例えば、アプリケーションサーバを含むか、又はフロントエンド構成要素、例えば、ユーザが本明細書に説明する主題の実施と対話することを可能にするグラフィカルユーザインタフェース又はウェブブラウザを有するクライアントコンピュータ、又は１又は２以上のこれらのバックエンド、ミドルウェア、又はフロントエンド構成要素のあらゆる組合せを含むコンピュータシステムを用いて実施することができる。システムの構成要素は、デジタルデータ通信のあらゆる形態又は媒体、例えば、通信ネットワークによって相互接続することができる。通信ネットワークの例は、ローカルエリアネットワーク（「ＬＡＮ」）及びワイドエリアネットワーク（「ＷＡＮ」）、インターネットワーク（例えば、インターネット）及びピアツーピアネットワーク（例えば、アドホックピアツープアネットワーク）を含む。
【００４７】
コンピュータシステムは、クライアント及びサーバを含むことができる。クライアント及びサーバは、一般的に互いから遠隔にあり、一般的に通信ネットワーク上で対話する。クライアントとサーバの関係は、それぞれのコンピュータで実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって発生する。一部の実施形態では、サーバは、データ（例えば、ＨＴＭＬページ）をクライアントデバイスに送信する（クライアントデバイスと対話するユーザにデータを表示してユーザからユーザ入力を受信するために）。クライアントデバイスで生成されたデータ（例えば、ユーザ対話の結果）は、サーバでクライアントデバイスから受信することができる。
【００４８】
本明細書は多くの特定の実施の詳細を含有するが、それらは、いずれの発明又は主張することができる範囲の制限として解釈すべきではなく、逆に特定の発明の特定の実施形態に固有の特徴の説明として解釈しなければならない。個別の実施形態の関連で本明細書に説明するある一定の特徴は、単一実施形態に組み合わせて実施することができる。対照的に、単一実施形態の関連で説明する様々な特徴は、複数の実施形態で別々に又はあらゆる適切な部分組合せを用いて実施することができる。更に、特徴は、ある一定の組合せで作用するように上述し、更にそのように最初に主張したが、主張した組合せからの１又は２以上の特徴は、一部の事例では組合せから削除することができ、主張した組合せを部分組合せ又は部分組合せの変形に向けることができる。
【００４９】
同様に、作動は、特定の順序で図面に示されているが、これは、望ましい結果を達成するためにそのような作動を示された特定の順序又は連続的な順序で実行し、又は全ての例示された作動を実行することが望ましいとして理解すべきではない。ある状況では、マルチタスク及び並列処理が有利である場合がある。例えば、並列処理を使用して複数の言語検知方法を同時に実行することができる。更に、上述の実施形態における様々なシステム構成要素の分離は、全ての実施形態においてそのような分離を要求するものとして理解すべきではなく、説明したプログラム構成要素及びシステムは、一般的に単一ソフトウエア製品に互いに統合するか又は複数のソフトウエア製品にパッケージ化することができることを理解しなければならない。
【００５０】
すなわち、本主題の特定の実施形態を説明した。他の実施形態も特許請求の範囲内である。一部の事例では、特許請求の範囲に説明するアクションを異なる順序で実行して望ましい結果を達成することができる。更に、添付の図に示す処理は、望ましい結果を達成するために必ずしも示す特定の順序又は連続的な順序を必要としない。ある一定の実施では、マルチタスク及び並列処理が有利である場合がある。
【符号の説明】
【００５１】
１１２  サーバシステム
１１８  サーバカーネル
１３０  クライアントデバイス
２００  サーバシステムとクライアントデバイス間の接続を示すシステム
２０２  サーバシステムとクライアントデバイス間の接続
【図１】
2019525678.tif 000003
【図２】
2019525678.tif 000004
【図３】
2019525678.tif 000005
【図４】
2019525678.tif 000006
【国際調査報告】
2019525678.tif 000007
2019525678.tif 000008