(57)【特許請求の範囲】
【請求項１】
クライアント装置との間の通信において利用可能な帯域に、前記通信の往復遅延時間を乗算して、前記クライアント装置が有するバッファのバッファサイズを算出する工程と、
前記バッファサイズを前記クライアント装置に対して設定されている送信データサイズで除算することで得られた実数を整数化して整数値を算出し、前記整数値を空サイズに設定する工程と、
前記往復遅延時間を前記整数値で除算して得られた値、又は、前記送信データサイズを前記帯域で除算して得られた値を、送信間隔として設定する工程と、
前記送信間隔が経過するたびに、前記空サイズが第１の値よりも大きいか否かを判定し、前記第１の値よりも大きい場合にリモートデスクトップの画面の画像データを生成して前記クライアント装置に送信し、前記空サイズから第２の値を減算する工程と、
前記減算する工程により送信した前記画像データに対する応答を、前記クライアント装置から受信するたびに、前記空サイズに前記第２の値を加算する工程と、
を含む、情報処理装置が実行する方法。
【請求項２】
前記減算する工程が所定の数の画像データを前記クライアント装置に送信した場合に、該所定の数の画像データの送信データサイズのうちで最大の送信データサイズを、前記送信データサイズに再設定し、該再設定された送信データサイズで前記バッファサイズを除算し得られた実数を整数化した値を前記整数値に再設定し、前記再設定された整数値で前記往復遅延時間を除算することで得られた値、又は、前記帯域で前記再設定された送信データサイズを除算することで得られた値を、前記送信間隔に再設定する、ことを含む再設定する工程を更に含む、請求項１に記載の方法。
【請求項３】
前記減算する工程が所定の数の画像データを前記クライアント装置に送信した場合に、該所定の数の画像データの送信データサイズの平均の送信データサイズを前記送信データサイズに再設定し、該再設定された送信データサイズで前記バッファサイズを除算し得られた実数を整数化した値を前記整数値に再設定し、前記再設定された整数値で前記往復遅延時間を除算することで得られた値、又は、前記帯域で前記再設定された送信データサイズを除算することで得られた値を、前記送信間隔に再設定する、ことを含む再設定する工程を更に含む、請求項１に記載の方法。
【請求項４】
前記再設定する工程は、前記減算する工程が所定の数の画像データを前記クライアント装置に送信した場合に、前記送信データサイズに前記空サイズを乗じた値を、前記再設定された送信データサイズで除算して得た実数を整数化した値を前記空サイズに再設定し、該再設定された空サイズを、再設定前の前記空サイズで除算することで補正加算値を算出する、ことを更に含み、
前記加算する工程は、前記再設定する工程が実行されている場合に、前記減算する工程により送信した前記画像データに対する応答を前記クライアント装置から受信するたびに、該応答が前記再設定する工程の実行前に前記クライアント装置に送信した画像データであるか、前記再設定する工程の実行後に前記クライアント装置に送信した画像データであるかを判定し、該応答が前記再設定する工程の実行前に前記クライアント装置に送信した画像データである場合に前記再設定された空サイズに前記補正加算値を加算し、該応答が前記再設定する工程の実行後に前記クライアント装置に送信した画像データである場合に前記再設定された空サイズに前記第２の値を加算する、
ことを特徴とする、請求項２又は３に記載の方法。
【請求項５】
クライアント装置との間の通信において利用可能な帯域に、前記通信の往復遅延時間を乗算して、前記クライアント装置が有するバッファのバッファサイズを算出し、
前記バッファサイズを前記クライアント装置に対して設定されている送信データサイズで除算することで得られた実数を整数化して整数値を算出し、前記整数値を空サイズに設定し、
前記往復遅延時間を前記整数値で除算して得られた値、又は、前記送信データサイズを前記帯域で除算して得られた値を、送信間隔として設定し、
前記送信間隔が経過するたびに、前記空サイズが第１の値よりも大きいか否かを判定し、前記第１の値よりも大きい場合にリモートデスクトップの画面の画像データを生成して前記クライアント装置に送信し、前記空サイズから第２の値を減算し、
送信した前記画像データに対する応答を、前記クライアント装置から受信するたびに、前記空サイズに前記第２の値を加算する、
処理を情報処理装置に実行させるプログラム。
【請求項６】
クライアント装置との間の通信において利用可能な帯域に、前記通信の往復遅延時間を乗算して、前記クライアント装置が有するバッファのバッファサイズを算出し、前記バッファサイズを前記クライアント装置に対して設定されている送信データサイズで除算することで得られた実数を整数化して整数値を算出し、前記整数値を空サイズに設定し、前記往復遅延時間を前記整数値で除算して得られた値、又は、前記送信データサイズを前記帯域で除算して得られた値を、送信間隔として設定する設定部と、
前記送信間隔が経過するたびに、前記空サイズが第１の値よりも大きいか否かを判定し、前記第１の値よりも大きい場合にリモートデスクトップの画面の画像データを生成して前記クライアント装置に送信し、前記空サイズから第２の値を減算する送信部と、
前記送信部が送信した前記画像データに対する応答を、前記クライアント装置から受信するたびに、前記空サイズに前記第２の値を加算する調整部と、
を含む、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、方法、及びプログラムに関する。
【背景技術】
【０００２】
リモートデスクトップでは、サーバ装置に仮想化されたデスクトップ環境が配置される（以下、仮想デスクトップと呼ぶ）。クライアント装置は遠隔でサーバにアクセスして、サーバ装置の計算資源を用いて提供される仮想デスクトップを利用することができる。近年、スマートフォンなどのモバイル機器の高機能化と普及に伴って、モバイル環境からリモートデスクトップを提供するサービスを利用することのニーズが増大している。また、データのセキュリティ対策やパソコンの運用管理のコストの観点からも、リモートデスクトップを提供するサービスが注目されている。【０００３】
一方で、データの送受信を行う通信装置同士の距離は、事業のグローバル化などによりますます長くなっている。通信相手に信号やデータを発信してから、応答が帰ってくるまでにかかる時間である往復遅延時間（Round Trip Time：ＲＴＴ）は、相手との物理的な距離や、経路上で中継・転送する装置などの数によって左右される。例えば、送信側の通信装置と受信側の通信装置との間の経路の往復遅延時間は、送信側の通信装置と受信側の通信装置の間の距離が長いほど長くなる。そして、肯定応答（ＡＣＫ：ACKnowledgement）によりデータの到着を保証する例えばＴＣＰなどの方式では、往復遅延時間が長くなると肯定応答が戻ってくるまでの時間も遅くなる。結果として、待ち時間が大きくなり、通信のスループットが低下してしまう。【０００４】
更に、クライアント装置において動いている他のアプリケーションが通信帯域を占有し、リモートデスクトップ環境を構築するために利用可能な通信帯域が制限されてしまう状況が存在する。この様な状況下では、通信速度は更に遅くなってしまう。【０００５】
これに関し、サーバ装置からクライアント装置へ動画情報を伝送する伝送路の伝送量が不均一のために情報の欠落や伝送情報の遅延等を生じるのを軽減又は阻止する動画情報伝送方法および装置を提供する技術が知られている。また、動画像データの伝送エラーを低減する技術が知られている。（例えば、特許文献１及び特許文献２参照）
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００５−２６０３０２号公報
【特許文献２】特開２００９−４９５２９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
リモートデスクトップの一例では、サーバ装置は、仮想デスクトップの画面をキャプチャして得られた画像データをクライアント装置に送信する。クライアント装置は、受信した画像データを表示画面に表示する。クライアント装置のユーザは表示画面に表示された画像データから仮想デスクトップの状態を把握することができる。また、クライアント装置は、ユーザが仮想デスクトップに対して入力した操作をサーバ装置に通知する。サーバ装置は、入力されたユーザの操作に従って仮想デスクトップの画面を更新する。そのため、デスクトップ環境が配置されていないクライアント装置であってもデスクトップ環境を利用することが可能である。例えば、この様な実装において、通信速度はクライアント装置におけるリモートデスクトップの画面の更新間隔に影響する。そして、画面の更新間隔が長くなると、リモートデスクトップのユーザビリティが低下することにつながる。このユーザビリティの低下は、例えば通信速度を速くすることで改善できるが、ネットワーク環境によっては通信速度を十分に速くすることが難しい状況が存在する。そのため、例えば所与の通信速度においても、リモートデスクトップのユーザビリティを向上させることのできる技術の提供が望まれている。
【課題を解決するための手段】
【０００８】
本発明の一つの態様の情報処理装置が実行する方法は、算出する工程、空サイズに設定する工程、送信間隔として設定する工程、減算する工程、及び加算する工程を含む。算出する工程は、クライアント装置との間の通信において利用可能な帯域に、通信の往復遅延時間を乗算して、クライアント装置が有するバッファのバッファサイズを算出する。空サイズに設定する工程は、バッファサイズをクライアント装置に対して設定されている送信データサイズで除算することで得られた実数を整数化して整数値を算出し、整数値を空サイズに設定する。送信間隔として設定する工程は、往復遅延時間を整数値で除算して得られた値、又は、送信データサイズを帯域で除算して得られた値を、送信間隔として設定する。減算する工程は、送信間隔が経過するたびに、空サイズが第１の値よりも大きいか否かを判定し、第１の値よりも大きい場合にリモートデスクトップの画面の画像データを生成してクライアント装置に送信し、空サイズから第２の値を減算する。加算する工程は、減算する工程により送信した画像データに対する応答を、クライアント装置から受信するたびに、空サイズに第２の値を加算する。
【発明の効果】
【０００９】
リモートデスクトップのユーザビリティを向上させる。
【図面の簡単な説明】
【００１０】
【図１】リモートデスクトップを提供するシステムにおけるサーバ装置と、クライアント装置との間のデータの送受信の流れを例示する図である。
【図２】クライアント装置からの肯定応答の到着を待たずに次の画面の画像データを送信する場合のデータの送受信の流れを例示する図である。
【図３】コマ落ちとスライディングウィンドウによる画面データの送信数の制御を例示する図である。
【図４】画面の更新間隔の片寄を例示する図である。
【図５】ユーザが入力した操作に対する表示画面の応答性を例示する図である。
【図６】実施形態に係る送信間隔を用いることによる画面の更新間隔の片寄の抑制を例示する図である。
【図７】実施形態に係る送信間隔を用いることによる画面のユーザ操作に対する応答性の改善を例示する図である。
【図８】サーバ装置の仮想デスクトップの画面と、クライアント装置の表示画面とを例示する図である。
【図９】実施形態に係るリモートデスクトップを提供するシステムを例示する図である。
【図１０】実施形態に係るサーバ装置の機能ブロック構成を例示する図である。
【図１１】実施形態に係るクライアント装置の機能ブロック構成を例示する図である。
【図１２】実施形態に係る設定情報を例示する図である。
【図１３】実施形態に係る画面情報を例示する図である。
【図１４】実施形態に係る肯定応答を例示する図である。
【図１５】第１の実施形態に係る画面データの送受信処理を例示する図である。
【図１６】第２の実施形態に係る画面データの送受信処理を例示する図である。
【図１７】第３の実施形態に係る画面データの送受信処理を例示する図である。
【図１８】再設定処理を例示する図である。
【図１９】実施形態に係るサーバ装置を実現するための情報処理装置のハードウェア構成を例示する図である。
【図２０】実施形態に係るクライアント装置を実現するための情報処理装置のハードウェア構成を例示する図である。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら、本発明のいくつかの実施形態について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付した。
【００１２】
上述のように、リモートデスクトップの一例では、サーバ装置に仮想デスクトップ環境が配置されている。そして、サーバ装置は、例えば仮想デスクトップの画面をキャプチャして得られた画像データをクライアント装置に送信する。なお、仮想デスクトップの画面をキャプチャするとは、例えば、サーバ装置が仮想デスクトップの画面の画像データを生成することであってもよい。クライアント装置では、サーバ装置から画像データを受信すると、その画像データを受信できたことを示す信号である肯定応答（ＡＣＫ：ACKnowledgement）をサーバ装置に返信する。続いて、クライアント装置は、受信した画像データを例えばクライアント装置が備える表示装置の表示画面に表示することで、サーバ装置の仮想デスクトップの状態がクライアント装置の表示画面に映し出される。サーバ装置は、クライアント装置からの肯定応答を受信すると、仮想デスクトップの画面を再びキャプチャして得られた次の画面の画像データをクライアント装置に送信する。以上の処理を繰り返すことで、ユーザは仮想デスクトップの画面の状態をクライアント装置の表示画面で確認することができるため、クライアント装置において仮想デスクトップを操作することが可能となる。
【００１３】
図１は、以上で例示したリモートデスクトップを提供するシステムにおけるサーバ装置と、クライアント装置との間のデータの送受信の流れを例示する図である。なお、以降の説明において、サーバ装置でキャプチャされる一連の仮想デスクトップの画面のそれぞれを時系列に区別するために、「画面」の用語の後に番号ｎを付した例えば「画面ｎ」といった表記を用いる。付されている番号ｎは、サーバ装置で画面がキャプチャされた時系列の順番を表している。例えば、番号「１」が付加された「画面１」は、或る時点以降にサーバ装置で１番目にキャプチャされた仮想デスクトップの画面を表している。そして、「画面２」は「画面１」の次にサーバ装置でキャプチャされた画面を表している。また、以降の説明では、画面をキャプチャして得られた画像データを画面データと呼ぶ。更に、或る時点からｎ番目にサーバ装置でキャプチャされた画面の画像データを示す場合には「画面ｎデータ」と表記する。即ち、「画面１データ」は、「画面１」をキャプチャして得られた画像データである。また、「画面２データ」は「画面２」をキャプチャして得られた画像データである。
【００１４】
図１に示すように、サーバ装置は、クライアント装置にリモートデスクトップの提供を開始すると、仮想デスクトップの画面（画面１）をキャプチャし、その画像データ（画面１データ）を取得する（図１の（１））。サーバ装置は、キャプチャした画面１データに、例えば圧縮処理等を行った後でその画面１データをクライアント装置に送信する（図１の（２））。クライアント装置は、画面１データを受信すると、画面１データを受信できたことを示す信号である肯定応答をサーバ装置に返信する（図１の（３））。続いて、クライアント装置は、受信した画面１データを例えばクライアント装置が備える表示装置の表示画面に表示することで（図１の（４））、ユーザに仮想デスクトップに表示されている画面を提供する。サーバ装置は、クライアント装置からの肯定応答を受信すると、仮想デスクトップの画面を再びキャプチャして次の画面（画面２）の画像データ（画面２データ）を取得する（図１の（５））。サーバ装置は、画面１の場合と同様に、キャプチャした画面２の画面２データに、例えば圧縮処理等を行った後でその画面２データをクライアント装置に送信する（図１の（６））。クライアント装置は、画面２データを受信すると、画面２データを正常に受信できたことを示す肯定応答をサーバ装置に返信（図１の（７））し、受信した画面２データを例えばクライアント装置が備える表示装置の表示画面に表示する（図１の（８））。例えば以上のような処理を繰り返すことで、クライアント装置の表示画面に、サーバ装置の仮想デスクトップに表示されている画面を順次表示し、リモートデスクトップ環境が提供される。
【００１５】
以上の図１に示す例では、サーバ装置は送信した画面の画像データがクライアント装置で正常に受信できたことを肯定応答により確認した後で、次の画面の画像データを生成し送信している。そのため、クライアント装置の表示画面には、サーバ装置でキャプチャされた画面の順序と同じ順序で画面の画像データが表示され、ユーザはクライアント装置の表示画面で、仮想デスクトップの画面の経時変化を知ることができる。従って、ユーザは、例えば仮想デスクトップに対して実行した自身の操作に対する応答をクライアント装置の表示画面で知ることができる。
【００１６】
しかしながら、クライアント装置からの肯定応答を待ってから次の画面の画像データを送信する上記の方式では、往復遅延時間が画面の更新間隔にそのまま反映されてしまう。そのため、往復遅延時間の長いネットワーク環境では、ユーザの操作に対する応答性が著しく低下してしまう。なお、ユーザの操作に対する応答性とは、例えば、ユーザがマウスやキーボードを操作（例えばカーソルの移動や文字の入力など）した時に、その操作がクライアント装置の表示画面に反映されるまでの時間であり、この時間が短いほど応答性は高い。
【００１７】
このような往復遅延時間に起因する画面の更新間隔の長期化を抑制するために、サーバ装置がクライアント装置からの肯定応答の到着を待たずに次の画面の画像データを送信することが考えられる。図２は、サーバ装置が、クライアント装置からの肯定応答の到着を待たずに次の画面の画像データを送信する場合のデータの送受信の流れを例示する図である。
【００１８】
図２の例では、サーバ装置は、クライアント装置にリモートデスクトップの提供を開始すると、仮想デスクトップの画面をキャプチャして画面１の画像データである画面１データを取得する（図２の（１））。そして、サーバ装置は、取得した画面１データに、例えば圧縮処理等を行った後でその画面１データをクライアント装置に送信する（図２の（２））。続いて、サーバ装置は、送信した画面１データに対するクライアント装置からの肯定応答の受信を待つことなく、次の仮想デスクトップの画面をキャプチャして画面２の画像データである画面２データを取得する（図２の（３））。そして、サーバ装置は、画面１の場合と同様に、取得した画面２データに、例えば圧縮処理等を行った後でその画面２データをクライアント装置に送信する（図２の（４））。以降、サーバ装置は、送信した画像データに対するクライアント装置からの肯定応答の受信を待たずに、所定の時間間隔で仮想デスクトップの画面をキャプチャして、圧縮処理等を行った後でその画像データをクライアント装置に順次送信する。
【００１９】
一方、クライアント装置は、サーバ装置から送信されてきた画面１データを受信すると、正常に受信できたことを示す信号である肯定応答をサーバ装置に返信する（図２の（５））。続いて、クライアント装置は、受信した画面１データを例えばクライアント装置が備える表示装置の表示画面に表示する（図２の（６））。同様に、クライアント装置は、画面２データを受信すると、正常に受信できたことを示す肯定応答をサーバ装置に返信（図２の（７））し、受信した画面２データを表示画面に表示する（図２の（８））。以降、クライアント装置は、サーバ装置から送信されてきた画像データを受信すると、受信した画像データに対する肯定応答をサーバ装置に返信し、受信した画像データを表示画面に順次表示する。
【００２０】
例えば以上の処理により、サーバ装置は、クライアント装置からの肯定応答を待たずに画面をキャプチャした画像をクライアント装置に送信するため、往復遅延時間が長い場合にも、クライアント装置における画像データの更新間隔の長期化を抑えることができる。
【００２１】
なお、この様なクライアント装置からの肯定応答を待たずにサーバ装置が画面データを送信する構成にした場合、送信方式によっては、画面データが実際にキャプチャされた順序と、クライアント装置で受信される順序とが入れ替わってしまうことがある。即ち、例えば、図２において、先に送信した画面１データよりも後から送信した画面２データの方がクライアント装置で先に受信されてしまうことがある。リモートデスクトップでは、サーバ装置においてキャプチャされた画面の順序でクライアント装置においても画面データが表示されることが好ましい。これは、例えばユーザがマウスカーソルの移動の操作を行っているとする。この場合に、キャプチャした画面データの順序が入れ替わって表示されてしまうと、ユーザには実際に移動させたカーソルの移動方向とは逆方向にカーソルが動いたように見えてしまうといった不都合が生じてしまう。この様な不都合はユーザビリティを低下させる要因となるため、リモートデスクトップではサーバ装置がキャプチャした画面の順序でクライアント装置においても画面データが表示されるようにすることが好ましい。そのため、クライアント装置には、サーバ装置から受信した画像データを蓄積するためのバッファが設けられている。そして、サーバ装置は、送信する画像データに画面をキャプチャした順序を表す通し番号を付加してクライアント装置に送信する。クライアント装置では、受信した画面データをバッファに蓄積し、付加された通し番号に従って表示装置の表示画面に表示するため、順番通りに画面データを表示することが可能である。
【００２２】
しかしながら、以上のような構成にしたとしても、クライアント装置のバッファのサイズには限りがあるため、例えば、バッファに蓄積できる数以上の画面データを送信してしまった場合、オーバーフローを引き起こす可能性がある。或いは、バッファを用いたとしても、サーバ装置からクライアント装置に可用帯域以上のデータを送信してしまう可能性がある。そのため、これらの事象が生じないように、例えばサーバ装置からのクライアント装置への画面データの送信数を制御する仕組みを設けることが好ましい。
【００２３】
図３は、コマ落ちとスライディングウィンドウによる画面データの送信数の制御を例示する図である。スライディングウィンドウとは、或るサイズのウィンドウ（枠）を用意し、そのウィンドウに空きがある場合は画面データを送信し、空きが無い場合は空きができるまで送信を待機する仕組みである。スライディングウィンドウでは、ウィンドウサイズと、バッファサイズを適切に設定することで、例えばオーバーフローなどが起こるのを抑制することができる。
【００２４】
図３の例では、ウィンドウサイズが３に設定されている（図３の（１））。そのため、ウィンドウの空サイズの初期値はウィンドウサイズの値と等しい３である。そして、サーバ装置が画面データを１つ送信すると空サイズから１減算し、クライアント装置からの肯定応答の受信時に空サイズに１加算することで、ウィンドウの空サイズは更新される。例えば、図３では、サーバ装置はクライアント装置にリモートデスクトップの提供を開始すると、仮想デスクトップの画面をキャプチャしてクライアント装置に画面データを送信する。このとき、ウィンドウの空サイズを１減少させる。即ち、ウィンドウの空サイズは３から２に変更される（図３の（２））。サーバ装置は、その後、所定の時間間隔が経過するたびに、ウィンドウの空サイズに空きがあるか否かを判定する。そして、空きがある（即ち、ウィンドウの空サイズが０ではない）場合には、仮想デスクトップの画面をキャプチャしてクライアント装置に送信し、そのたびにウィンドウの空サイズを１減算していく。ウィンドウの空サイズが０になると（図３の（３））、サーバ装置はそれ以上の画面データの送信を行わず、この送信しなかったタイミングでの仮想デスクトップの画面はコマ落ちする（図３の（４））。
【００２５】
一方、サーバ装置は、クライアント装置から肯定応答を受信すると、ウィンドウの空サイズを１増加させる（図３の（５））。その結果、ウィンドウの空サイズは０から１になる。サーバ装置は、空サイズが０でなくなったため、次の画面の送信タイミングで、画面をキャプチャしてクライアント装置に送信し、空サイズを１減少させる。これにより、空サイズは再び０になる（図３の（６））。図３の例では、続く次の画面の送信タイミングよりも前に肯定応答が受信されるため（図３の（７））、次の画面の送信タイミングでウィンドウの空サイズは１である。そのため、サーバ装置は画面をキャプチャしてクライアント装置に送信し、空サイズを１減少させる（図３の（８））。以降、サーバ装置は、以上のように画面データを１つ送信すると空サイズを１減少させ、肯定応答の受信時に空サイズを１増加させる。そして、画面データの送信タイミングにおいて、空サイズが０でなければ画面データを送信し、０であればその送信タイミングでの画面の送信を行わずコマ落ちさせることを繰り返す。それによって、サーバ装置から同時期に送信される画面データの数がウィンドウ数を超えないように制御されるため、クライアント装置のバッファのオーバーフローや可用帯域以上の画面データを送信してしまうことが抑制できる。
【００２６】
しかしながら、この様なコマ落ちとスライディングウィンドウを利用しても、画面の更新間隔には片寄りが生じてしまう。図４は、画面の更新間隔の片寄を例示する図である。図４において、スライディングウィンドウのウィンドウサイズは２に設定されている（図４の（１））。即ち、ウィンドウの空サイズの最大値は２である。サーバ装置は、図３を参照して説明したのと同様に、所定の時間間隔で、仮想デスクトップの画面をキャプチャしてクライアント装置へと送信し、送信のたびにウィンドウの空サイズを１減少させる（図４の（２））。ウィンドウの空サイズが０になると、その送信タイミングでの画面はクライアント装置に送信せずにコマ落ちさせる（図４の（３））。クライアント装置から、肯定応答を受信すると、ウィンドウの空サイズが１増加する。そのため、次の画面の送信タイミングにおいて、サーバ装置は画面をキャプチャしてクライアント装置へと送信し、再びウィンドウの空サイズを１減少させる（図４の（４））。以降、画面の送信タイミングにおいて、ウィンドウの空サイズが０であれば、そのタイミングでの送信を行わずにコマ落ちさせる。また、クライアント装置から、肯定応答を受信するとウィンドウの空サイズを１増加させる。そして、画面の送信タイミングにおいて、ウィンドウの空サイズが０でなければ、その画面の送信タイミングで、画面をキャプチャして画面データをクライアント装置に送信し、ウィンドウの空サイズを１減少させる。以上のようにして、サーバ装置の仮想デスクトップの画面の画像がクライアント装置に提供される。この場合に、図４に示されるように、クライアント装置における表示画面の更新間隔には片寄りが発生している。換言すると、表示画面の更新間隔が短く頻繁に更新される期間と、表示画面の更新間隔が長くなかなか更新されない期間とが存在している。
【００２７】
この様な表示画面の更新間隔の片寄りは、例えばユーザが入力した操作に対する応答性に影響を与えるため、リモートデスクトップにおけるユーザビリティを低下させる要因となる。図５は、ユーザが入力した操作に対する表示画面の応答性を例示する図である。図５（ａ）は、ユーザが、例えばマウスカーソルの移動などの仮想デスクトップの画面の表示内容を変更する操作を入力し、その操作を通知する信号が、サーバ装置が画面４データを送信する直前にサーバで受信された場合の例を示している。この場合に、そのユーザの操作内容に応じて仮想デスクトップの画面が変更され、その変更された画面の内容は、次の画面４データの送信タイミングでキャプチャされた画面４データによりユーザに送信されることになる。
【００２８】
一方、図５（ｂ）では、ユーザの操作は、サーバ装置が画面４データを送信した直後に通知されている。画面４データを送信した後は、ウィンドウの空サイズが０であるため、画面データの送信が２回連続でコマ落ちしている。そのため、ユーザの操作が反映された画面データがサーバ装置から送信されるのは、コマ落ちを挟んで、その後に肯定応答が受信された後の画面５データの送信でやっとクライアント装置に送信されることになる。そのため、図５（ａ）の場合と比較して、図５（ｂ）では、ユーザの操作がクライアント装置の表示画面に反映されるまでにかかる時間が、大幅に長くなっている。この様に画面の更新間隔の片寄りは、例えば、ユーザの操作に対する応答性のばらつきを増大させるため好ましくない。そこで、いくつかの実施形態では、サーバ装置による画面の送信間隔をほぼ一定にするために、例えば、サーバ装置による画面データの送信間隔を以下のように設定する。
【００２９】
まず、クライアント装置において、サーバ装置とのリモートデスクトップ環境を構築するアプリケーションが保持するバッファのサイズを以下の式で算出する。
バッファサイズ＝使用可能帯域×往復遅延時間  …式１
【００３０】
ここで、バッファサイズは、サーバ装置から送信されてきた画面の画像データを蓄積するためにクライアント装置に設けられたバッファのバッファサイズである。なお、サーバ装置にも同じサイズのバッファが設けられてもよい。使用可能帯域は、クライアント装置において、サーバ装置とのリモートデスクトップ環境を構築するアプリケーションが、サーバ装置とクライアント装置との間の通信において利用できる帯域幅である。往復遅延時間は、サーバ装置とクライアント装置との間の通信の往復でかかる時間である。往復遅延時間は、例えば、サーバ装置がパケットをクライアント装置に送信してから、そのパケットに対する応答がクライアント装置からサーバ装置に通知されるまでにかかる時間であってよい。或いは、クライアント装置がパケットをサーバ装置に送信してから、そのパケットに対する応答がサーバ装置からクライアント装置に通知されるまでにかかる時間であってよい。
【００３１】
また、ウィンドウサイズは以下の式で設定されてもよい。
【数１】
0005994944.tif 000002
【００３２】
ここで、ウィンドウサイズは、上述のスライディングウィンドウで用いるウィンドウのサイズである。バッファサイズは、上記式１で算出された値を用いる。送信データサイズは、例えば、サーバ装置が送信してくる画面の画像データ（画面データ）の最大のデータサイズとして見積もられる値であってよい。送信データサイズは、例えば、クライアント装置の表示装置の表示画面の解像度や、仮想デスクトップ環境の設定、通信速度などに基づいて、予め設定することが可能な値である。一実施形態においては、送信データサイズは、リモートデスクトップの提供を受けるクライアント装置が備える表示装置の表示画面の解像度に合わせて画像データを作成した場合の最大のデータサイズであってよい。送信データサイズに画面データの最大のデータサイズを用いる場合、上記式２に示すように、例えば、バッファサイズを送信データサイズで除算すると、画面データがバッファに少なくとも何個入るかを見積もることができる。なお、上記式２では、バッファサイズを送信データサイズで除算して得られた実数の床関数を計算して整数化し、その整数値をウィンドウサイズとして算出している。
【００３３】
サーバ装置による画面をキャプチャした画像データ（画面データ）の送信間隔は以下の式で設定されてもよい。
【数２】
0005994944.tif 000003
【００３４】
ここで、送信間隔はサーバ装置が、画面をキャプチャしてクライアント装置に画面データを送信する送信タイミングの間隔である。例えば、サーバ装置は、送信間隔の時間が経過するたびに、ウィンドウの空サイズが０か否かを確認する。そして、０でなければ画面をキャプチャして画面データをクライアント装置に送信し、ウィンドウサイズを１減算する。なお、式３に示される、往復遅延時間及び使用可能帯域は上記式１の説明で述べたのと同じであってよい。ウィンドウサイズ及び送信データサイズは、上記式２の説明で述べたのと同じであってよい。
【００３５】
例えば、以上のようにして、ウィンドウサイズ及び送信間隔を設定すると、ウィンドウサイズが０になった次の送信タイミングの前に、往復遅延の時間が経過し、肯定応答が返ってくる。そのため、コマ落ちすることなく次の画面を送信することができ、サーバ装置による画面データの送信間隔をほぼ均一にすることができる。その結果、クライアント装置でも画面の更新間隔をほぼ均一にすることができる。なお、式１〜式３で算出される送信間隔は、画面データの送信間隔をほぼ均一にしながらも、極力短い送信間隔となるようにも算出されている。そのため、式１〜式３で算出される送信間隔では、送信間隔をほぼ均一にするために送信間隔が必要以上に長くなってしまうことも抑制されている。
【００３６】
図６は、以上で述べた実施形態に係る送信間隔を用いることで、画面の更新間隔の片寄りが抑制できることを例示する図である。図６（ａ）には、図４に示したクライアント装置とサーバ装置との間のデータの送受信と同じ例が、図６（ｂ）との比較のために示されている。図６（ｂ）は、上記した実施形態に係る送信間隔を用いた場合の画面の更新間隔を例示する図である。
【００３７】
図６（ａ）では、図４を参照して述べたように、コマ落ちが生じており、画面の更新間隔には片寄りが生じている。一方、上記した実施形態に係る送信間隔を用いた場合、図６（ｂ）に示すように、ウィンドウサイズが０になった場合にも次の送信タイミングまでに肯定応答がサーバ装置に返ってくる。そのため、コマ落ちせずに一定間隔で画面データをクライアント装置に送信することができる。その結果、クライアント装置においても画面の更新間隔をほぼ一定にすることができる。
【００３８】
図７は、上述の実施形態に係る送信間隔を用いることで、画面のユーザ操作に対する応答性が改善できることを例示する図である。図７（ａ）には、図５（ｂ）に示したユーザが入力した操作に対する応答性と同じ例を図７（ｂ）との比較のために示す。図７（ｂ）は、上記した実施形態に係る送信間隔を用いた場合のユーザが入力した操作に対する応答性を例示する図である。
【００３９】
図７（ａ）において、ユーザの操作は、画面４の画面４データを送った直後にサーバ装置に通知されている。画面４データを送信した後は、ウィンドウの空サイズが０であり、その後の肯定応答が受信されるまでに画面データの送信が２回コマ落ちしている。そのため、ユーザの操作が反映された画面データがサーバ装置から送信されるのは、肯定応答が受信された後の画面５データの送信時になってやっとクライアント装置に送信されている。そのため、図７（ａ）では、ユーザの操作がクライアント装置の表示画面に反映されるまでに時間がかかっている。一方、図７（ｂ）においても、ユーザの操作は画面４の画面４データを送った直後にサーバ装置に通知されている。しかしながら、図７（ｂ）では上述した式３により算出された送信間隔を用いているため、ウィンドウサイズが０になったとしても、その次の送信タイミングまでには肯定応答が受信されており、結果としてコマ落ちが生じていない。そのため、図７（ｂ）では、送信間隔が経過するたびに、画面データがサーバ装置からクライアント装置に送信され、図７（ａ）のような応答に特に時間がかかるケースと比較した場合、応答性が改善している。また、図７（ｂ）では、ユーザに均一な応答時間で操作に対する応答を返すことができる。
【００４０】
図８は、サーバ装置の仮想デスクトップの画面と、クライアント装置の表示画面とを例示する図である。図８（ａ）は、サーバ装置が提供する仮想デスクトップの画面を例示している。また、図８（ｂ）は、図６（ａ）で例示した片寄がある更新間隔で更新されるクライアント装置の表示画面を例示している。また、図８（ｃ）は、図６（ｂ）で例示した実施形態に係る更新間隔で更新されるクライアント装置の表示画面を例示している。図８（ａ）は、仮想デスクトップの画面においてオブジェクト８００が上から下へと移動する様子を、画面を時系列に並べて示している。この画面をキャプチャした画像データが、クライアント装置に送信される。図８（ｂ）及び図８（ｃ）では、サーバ装置から受信した画面の画像データをクライアント装置の表示画面に表示する様子を示している。図８（ｂ）では、画面の更新間隔に片寄があるため、更新されない長い期間が存在している。そのため、オブジェクト８００は、更新されない期間をはさんで唐突に上下に大きな距離を移動している。一方、図８（ｃ）では、画面の更新間隔がほぼ一定であり、オブジェクト８００の位置の変化を均一に取得できている。そのため、ユーザは自身の操作に対する応答などの仮想デスクトップの画面の変化を、クライアント装置の表示画面に表示される画面データにおける変化から確認しやすい。
【００４１】
以上で例示したように、画面の更新間隔に短い部分と長い部分が存在する場合、ユーザの操作のタイミングによっては、その操作が反映された表示画面を得るまでに長い部分の更新間隔の時間をそのまま待たなければならない状況が存在する（例えば図７（ａ））。そのため、例えば、図６（ａ）に示すように、画面の更新間隔に部分的に短い部分があっても、他の更新間隔の長い部分において、その長い更新間隔を待つことのデメリットの方がリモートデスクトップを利用するユーザにとっては大きい状況が存在する。そのため、更新間隔の片寄をなくして、例えば図７（ａ）に例示する応答に特に時間のかかるケースを抑制し、全体として均一な応答性を保った方が、ユーザが体感する応答速度や操作性が向上し、ユーザビリティが向上し得る。また、画面の更新間隔に片寄がある場合よりも均一であるほうが、ユーザは自身の入力した操作が表示画面に及ぼす影響（例えばカーソル移動の速度等）をその応答から認識しやすい。そのため、画面の更新間隔が均一である方がユーザビリティを向上し得る。例えば以上のことから、上述の式１から式３で算出された送信間隔を用いることで、画面の更新間隔を極力短く保ちながらも更新間隔をほぼ一定とできることは有用である。
【００４２】
以下には、上述の式３により得られた送信間隔を利用する実施形態を述べる。図９は、実施形態に係るリモートデスクトップを提供するシステム９００を例示する図である。システム９００は、サーバ装置９０１及びクライアント装置９０２を含んでおり、サーバ装置９０１とクライアント装置９０２は、ネットワーク９０３により接続されている。クライアント装置９０２は、例えばディスプレーなどの表示装置９０５を含んでいる。クライアント装置９０２は、例えば、サーバ装置９０１からネットワーク９０３を介して送信されてくる仮想デスクトップの画面をキャプチャした画像データである画面データを受信し、表示装置９０５に表示させる。
【００４３】
図１０は、実施形態に係るサーバ装置９０１の機能ブロック構成を例示する図である。サーバ装置９０１は、例えば、制御部１０００及び記憶部１０１０を含んでいる。サーバ装置９０１の制御部１０００は、例えば接続確立部１０１１、ユーザ操作受信部１０１２、画面更新部１０１３、設定部１０１４、画面データ取得部１０１５などの機能部１００１を含んでいる。また、制御部１０００は、例えば、送信可否判定部１０１６、画面情報送信部１０１７、調整部１０１８、送信部１０１９などの機能部１００１を含んでいる。サーバ装置９０１の記憶部１０１０は、例えば、プログラム１０２０を記憶している。サーバ装置９０１の制御部１０００は、プログラム１０２０を読み出して実行することで例えば接続確立部１０１１、ユーザ操作受信部１０１２、画面更新部１０１３、設定部１０１４、画面データ取得部１０１５などの機能部１００１として機能する。サーバ装置９０１の制御部１０００は、プログラム１０２０を読み出して実行することで例えば、送信可否判定部１０１６、画面情報送信部１０１７、調整部１０１８、送信部１０１９などの機能部１００１として機能する。なお、送信可否判定部１０１６及び画面情報送信部１０１７は送信部１０１９としても機能する。ここで例えば、接続確立部１０１１は、クライアント装置９０２との間の通信接続を確立する。ユーザ操作受信部１０１２は、サーバ装置９０１が提供する仮想デスクトップ環境に対して、クライアント装置９０２で入力されたユーザの操作を通知する信号を受信する。画面更新部１０１３は、ユーザ操作受信部１０１２で受信されたユーザの操作を通知する信号に従って処理を実行し、仮想デスクトップの画面に表示する内容を更新する。その他の機能部１００１の詳細については後述する。
【００４４】
図１１は、実施形態に係るクライアント装置９０２の機能ブロック構成を例示する図である。クライアント装置９０２は、例えば、制御部１１００及び記憶部１１１０を含んでいる。クライアント装置９０２の制御部１１００は、例えば接続確立部１１１１、ユーザ操作取得部１１１２、ユーザ操作送信部１１１３、設定部１１１４、画面情報受信部１１１５などの機能部１１０１を含んでいる。また、クライアント装置９０２の制御部１１００は、肯定応答送信部１１１６、画面更新部１１１７などの機能部１１０１を含んでいる。クライアント装置９０２の記憶部１１１０は、例えば、プログラム１１２０を記憶している。クライアント装置９０２の制御部１１００は、プログラム１１２０を読み出して実行することで例えば接続確立部１１１１、ユーザ操作取得部１１１２、ユーザ操作送信部１１１３、設定部１１１４、画面情報受信部１１１５などの機能部１１０１として機能する。また、クライアント装置９０２の制御部１１００は、プログラム１１２０を読み出して実行することで例えば肯定応答送信部１１１６、画面更新部１１１７などの機能部１１０１として機能する。ここで例えば、接続確立部１１１１は、サーバ装置９０１との間の通信接続を確立する。ユーザ操作取得部１１１２は、サーバ装置９０１から提供される仮想デスクトップに対してクライアント装置９０２で入力されたユーザの操作を取得する。ユーザ操作送信部１１１３は、ユーザ操作取得部１１１２で取得されたユーザの操作を通知する信号を、サーバ装置９０１に送信する。その他の各機能部１１０１の詳細については後述する。
【００４５】
図１２は、実施形態に係る設定情報１２００を例示する図である。設定情報１２００は、例えば、サーバ装置９０１及びクライアント装置９０２の間の通信で利用するネットワーク環境の情報を通知する情報である。設定情報１２００は、例えば、ヘッダ情報、識別情報、使用可能帯域、往復遅延時間を含んでいる。ヘッダ情報は、例えば、サーバ装置９０１及びクライアント装置９０２の間の通信の確立に利用される情報を格納している。ヘッダ情報は、例えば、ＩＰヘッダ、ＴＣＰヘッダ（ＵＤＰヘッダ）等の情報を含んでいてよい。識別情報は、例えば設定情報１２００を、後述する画面情報１３００及び肯定応答１４００と識別するための情報を格納している。例えば、設定情報１２００の識別情報に値“０”を格納し、画面情報１３００及び肯定応答１４００の識別情報には値“１”を格納することでこれらの情報を識別できるように構成してもよい。使用可能帯域は、上述したように、例えば、リモートデスクトップ環境を構築するアプリケーションが、サーバ装置とクライアント装置との間の通信において利用できる帯域幅であり、その帯域幅の情報を格納している。使用可能帯域は、例えばクライアント装置９０２又はサーバ装置９０１によって測定される。往復遅延時間は、上述したように、例えば、サーバ装置とクライアント装置との間でパケットが往復するのにかかる時間であり、その往復遅延時間の情報を格納している。往復遅延時間は、例えばサーバ装置９０１又はクライアント装置９０２によって測定される。
【００４６】
図１３は、実施形態に係る画面情報１３００を例示する図である。画面情報１３００は、例えば、サーバ装置９０１がキャプチャした仮想デスクトップの画面の画像データをクライアント装置９０２に通知する情報である。画面情報１３００は、例えば、ヘッダ情報、識別情報、画面番号、分割番号、画面データを含んでいる。ヘッダ情報は、例えば、サーバ装置９０１及びクライアント装置９０２の間の通信の確立に利用される情報を格納している。ヘッダ情報は、例えば、ＩＰヘッダ、ＴＣＰヘッダ（ＵＤＰヘッダ）等の情報を含んでいてよい。識別情報は、例えば、上述の設定情報１２００と、画面情報１３００及び後述の肯定応答１４００とを識別するための情報を格納している。例えば、設定情報１２００の識別情報に値“０”を格納し、画面情報１３００及び肯定応答１４００の識別情報には値“１”を格納することでこれらの情報を識別できるように構成してもよい。画面番号には、例えば、サーバ装置９０１からクライアント装置９０２へと送信される画面情報１３００に対して順に割り振った通し番号が格納される。画面番号は、例えば、サーバ装置９０１がクライアント装置９０２にリモートデスクトップの提供を開始した以降に送信された画面情報１３００に対して順に割り振られた番号であってよい。また、分割番号は、例えばサーバ装置９０１がキャプチャした１つの画面に対する画面データを分割してクライアント装置９０２に送る場合に、その分割により得られた分割画面データに対して付される番号を格納している。画面データは、例えば、サーバ装置９０１がキャプチャした仮想デスクトップの画面の画像データである。なお、画面データを分割してクライアント装置９０２に送る場合には、画面データには、分割番号に対応する分割画面データが格納される。
【００４７】
図１４は、実施形態に係る肯定応答１４００を例示する図である。肯定応答１４００は、例えば、クライアント装置９０２がサーバ装置９０１から画面データを受信した場合に、その画面データを受信できたことをサーバ装置９０１に通知するための情報である。肯定応答１４００は、例えば、ヘッダ情報、識別情報、画面番号を含んでいる。ヘッダ情報は、例えば、サーバ装置９０１及びクライアント装置９０２の間の通信の確立に利用される情報を格納している。ヘッダ情報は、例えば、ＩＰヘッダ、ＴＣＰヘッダ（ＵＤＰヘッダ）等の情報を含んでいてよい。識別情報は、例えば、上述の設定情報１２００と、画面情報１３００及び肯定応答１４００とを識別するための情報を格納している。例えば、設定情報１２００の識別情報に値“０”を格納し、画面情報１３００及び肯定応答１４００の識別情報には値“１”を格納することでこれらの情報を識別できるように構成してもよい。画面番号には、例えば、クライアント装置９０２が、サーバ装置９０１から画面データを含む画面情報１３００を正常に受信できた場合に、その画面情報１３００の画面番号に格納されている番号が格納される。
【００４８】
図１５は、第１の実施形態に係るリモートデスクトップを提供するシステム９００においてサーバ装置９０１の制御部１０００及びクライアント装置９０２の制御部１１００が実行する画面データの送受信処理を例示する図である。図１５の左側の動作フローはサーバ装置９０１が実行する処理であり、右側の動作フローはクライアント装置９０２が実行する処理である。なお、サーバ装置９０１が実行する処理と、クライアント装置９０２が実行する処理とを識別しやすいように、図１５及びその説明では、処理の各ステップに、サーバ装置９０１が実行する処理の場合には“Ｓ”を付した。また、クライアント装置９０２が実行する処理の場合には“Ｃ”を付した。
【００４９】
まず、図１５の左側の動作フローを参照し、サーバ装置９０１の制御部１０００が実行する処理について説明する。図１５のサーバ装置９０１が実行する処理の動作フローは、例えば、サーバ装置９０１の制御部１０００が記憶部１０１０に格納されているプログラム１０２０を読み出して実行することで実施される。一実施形態においては、クライアント装置９０２において、サーバ装置９０１とのリモートデスクトップ環境を構築するアプリケーションが実行され、サーバ装置９０１とクライアント装置９０２との間の通信が確立すると、図１５の左側の動作フローは開始する。
【００５０】
ステップＳ１５０１においてサーバ装置９０１の制御部１０００は、クライアント装置９０２から設定情報１２００を受信する。続いて、ステップＳ１５０２においてサーバ装置９０１の制御部１０００は、設定情報１２００に含まれる使用可能帯域、及び往復遅延時間を用いて、上記式１によりバッファサイズの値を算出する。式１により算出されるバッファサイズは、サーバ装置９０１が送信した画面情報１３００を蓄積するために、クライアント装置９０２に設けられるバッファのバッファサイズである。なお、算出されたクライアント装置９０２に設けられるバッファのバッファサイズと同じサイズのバッファを、サーバ装置９０１に設けてもよい。換言すると、サーバ装置９０１のバッファも、上記式１により算出されたバッファサイズで設けられてよい。サーバ装置９０１に設けられるバッファは、例えば、クライアント装置９０２に画面情報１３００を送信するために用いられる。続いて、サーバ装置９０１の制御部１０００は、例えば予め記憶部１０１０に格納されている送信データサイズと、算出したバッファサイズとを用いて上記式２によりウィンドウサイズの値を算出する。更に、サーバ装置９０１の制御部１０００は、得られたウィンドウサイズと、往復遅延時間とを用いて、又は、送信データサイズと、使用可能帯域とを用いて、上記式３により送信間隔の値を算出する。そして、サーバ装置９０１の制御部１０００は、以上で算出したバッファサイズの値、ウィンドウサイズの値、及び送信間隔の値を、バッファサイズ、ウィンドウサイズ、及び送信間隔としてそれぞれ設定する。
【００５１】
ステップＳ１５０３において、サーバ装置９０１の制御部１０００は、設定されたウィンドウサイズの値を、ウィンドウの空サイズの値を格納する変数であるＮに設定する。ステップＳ１５０４において、サーバ装置９０１の制御部１０００は、接続されているクライアント装置９０２に提供する仮想デスクトップの画面をキャプチャし、例えば圧縮等の処理を行って、クライアント装置９０２に送信するための画面データを生成する。ステップＳ１５０５においてサーバ装置９０１の制御部１０００は、Ｎが０よりも大きいか否かを判定する。換言すると、サーバ装置９０１の制御部１０００は、ウィンドウの空サイズに空があるか否かを判定する。Ｎが０よりも大きく空サイズに空きがある場合（ステップＳ１５０５がＹｅｓ）、フローはステップＳ１５０６へと進む。
【００５２】
ステップＳ１５０６において、サーバ装置９０１の制御部１０００は、ステップＳ１５０４で生成された画面データを含む画面情報１３００を生成し、クライアント装置９０２に送信する。なお、画面情報１３００の画面番号には、サーバ装置９０１からクライアント装置９０２へと送信される画面情報１３００に対して順に割り振った通し番号が格納される。画面番号は、例えば、サーバ装置９０１がクライアント装置９０２にリモートデスクトップの提供を開始した以降に送信された画面情報１３００に対して順に割り振られた番号であってよい。また、画面データを分割して送信する場合には、分割された分割画面データが画面データのどの部分にあたるかを示す分割番号を含む画面情報１３００を生成し、送信する。ステップＳ１５０７において、サーバ装置９０１の制御部１０００は、クライアント装置９０２に送信した画面情報１３００の分を空サイズから減らすために、Ｎ＝Ｎ−１を計算し、空サイズ：Ｎの値を更新する。空サイズ：Ｎの値を更新すると、フローはステップＳ１５０９へと進む。
【００５３】
一方、ステップＳ１５０５においてＮが０よりも大きくなく空サイズに空きがない場合（ステップＳ１５０５がＮｏ）、フローはステップＳ１５０８へと進む。ステップＳ１５０８においてサーバ装置９０１の制御部１０００は、ステップＳ１５０４で生成した画面データをクライアント装置９０２に送信せずに例えば破棄し、結果として、ステップＳ１５０４で生成した画面データをコマ落ちさせる。ステップＳ１５０９において、サーバ装置９０１の制御部１０００は、ステップＳ１５０４で画面データを生成してからステップＳ１５０２で設定した送信間隔の時間が経過するまで待つことで、送信間隔を調整する。
【００５４】
また、ステップＳ１５０９において、ステップＳ１５０４で画面データを生成してから送信間隔の時間が経過するまでの期間中にクライアント装置９０２から肯定応答１４００を受信したとする。この場合には、その都度、サーバ装置９０１の制御部１０００はＮ＝Ｎ＋１を計算し、空サイズ：Ｎの値を更新する。換言すると、肯定応答１４００を受信した場合には、その分だけウィンドウの空サイズが増えるため、Ｎに１を加算することで、空サイズ：Ｎの値を更新する。ステップＳ１５０９において、ステップＳ１５０４で画面データを生成してからステップＳ１５０２で設定した送信間隔の時間が経過すると、フローはステップＳ１５０４へと戻る。
【００５５】
続いて、図１５の右側の動作フローを参照し、クライアント装置９０２の制御部１１００が実行する処理について説明する。図１５のクライアント装置９０２が実行する処理の動作フローは、例えば、クライアント装置９０２の制御部１１００が記憶部１１１０に格納されているプログラム１１２０を読み出して実行することで実施される。一実施形態においては、クライアント装置９０２において、サーバ装置９０１とのリモートデスクトップ環境を構築するアプリケーションが実行され、サーバ装置９０１とクライアント装置９０２との間の通信が確立すると、図１５の右側の動作フローは開始する。
【００５６】
ステップＣ１５０１においてクライアント装置９０２の制御部１１００は、ネットワーク環境を測定する。クライアント装置９０２の制御部１１００は、例えば、サーバ装置９０１にパケットを送信してから、その応答が返ってくるまでの時間を計測することで、サーバ装置９０１との間の通信の往復遅延時間を計測する。また、クライアント装置９０２は、例えば、サーバ装置９０１との間でリモートデスクトップ環境を構築するアプリケーションが利用可能な帯域幅を使用可能帯域として計測する。ステップＣ１５０２でクライアント装置９０２の制御部１１００は、得られた往復遅延時間と使用可能帯域から上記式１により、サーバ装置９０１から送信されてくる画面情報１３００に含まれる情報を蓄積するためのバッファのバッファサイズを算出し設定する。ステップＣ１５０３においてクライアント装置９０２の制御部１１００は、ステップＣ１５０１で測定した往復遅延時間と、使用可能帯域とから設定情報１２００を生成し、サーバ装置９０１へと送信する。ステップＣ１５０４において、クライアント装置９０２の制御部１１００は、サーバ装置９０１から送信されてきた画面情報１３００を受信し、画面情報１３００をバッファへ保存する。なお、ここでバッファに保存する情報は、画面情報１３００に含まれる例えば画面番号、及び画面データなどの一部の情報であってもよい。
【００５７】
ステップＣ１５０５でクライアント装置９０２の制御部１１００は、受信した画面情報１３００に含まれている画面番号を含む肯定応答１４００を生成し、サーバ装置９０１に送信する。ステップＣ１５０６でクライアント装置９０２の制御部１１００は、バッファに保存されている画面情報１３００を、画面番号の順番に並べ替える。これにより、バッファに保存されている画面情報１３００は、サーバ装置９０１から送信されてきた順番に並べ替えられる。
【００５８】
ステップＣ１５０７でクライアント装置９０２の制御部１１００は、バッファに表示すべき画面情報１３００があるか否かを判定する。表示すべき画面情報１３００とは、例えば、既に表示画面に画面データを表示させている場合には、その表示中の画面データの次の画面番号を含む画面情報１３００である。例えば、リモートデスクトップ環境を構築してから既に表示装置９０５の表示画面に画面データを表示しており、その表示中の画面データの画面番号が“２０”であるとする。この場合には、その次の番号の“２１”の画面番号を有する画面情報１３００が表示すべき画面情報１３００であってよい。また、例えば未だ表示画面に画面データを表示させておらず、サーバ装置９０１から送信されてきた最初の画面情報１３００を表示させる場合は、表示すべき画面情報１３００は最初の画面情報１３００であることを示す画面番号を含む画面情報１３００である。例えば、画面番号にリモートデスクトップ環境が構築されてから送信される画面情報１３００に１番から順に増加する番号を割り振る場合には、画面情報１３００の画面番号に“１”が格納されている画面情報１３００が表示すべき画面情報１３００である。ステップＣ１５０７においてバッファに表示すべき画面情報１３００が無い場合（ステップＣ１５０７がＮｏ）には、フローはステップＣ１５０４へと戻り、新たに画面情報１３００が受信されるのを待つ。バッファに表示すべき画面情報１３００がある場合（ステップＣ１５０７がＹｅｓ）、フローはステップＣ１５０８へと進む。
【００５９】
ステップＣ１５０８において、クライアント装置９０２の制御部１１００は、ステップＣ１５０７において表示すべきと判定された画面情報１３００に含まれる画面データを表示画面に表示することで表示画面を更新する。そして、クライアント装置９０２の制御部１１００は、バッファから表示した画面データを含む画面情報１３００を消去し、フローはステップＣ１５０７へと戻る。
【００６０】
以上の図１５で述べた動作フローにより、サーバ装置９０１は、上述の式３によって算出された送信間隔で画面情報１３００を生成し、クライアント装置９０２へと送信する。この送信間隔は、例えばコマ落ちを抑制し、送信間隔をほぼ一定にするような長さに設定されているため、サーバ装置９０１は設定された送信間隔が経過するたびに画面情報１３００をクライアント装置９０２へ送信することができる。そのため、クライアント装置９０２では、ほぼ一定の間隔で画面情報１３００を受信することができる。結果として、クライアント装置９０２の表示画面をほぼ一定の更新間隔で更新することができ、ユーザビリティが向上する。
【００６１】
以上の図１５の動作フローにおいて、ステップＳ１５０１からステップＳ１５０３までの処理では、サーバ装置９０１の制御部１０００は、例えば、設定部１０１４として機能する。また、ステップＳ１５０４の処理では、サーバ装置９０１の制御部１０００は、例えば、画面データ取得部１０１５として機能する。ステップＳ１５０５の処理では、サーバ装置９０１の制御部１０００は、例えば、送信可否判定部１０１６として機能する。ステップＳ１５０６からステップＳ１５０７の処理では、サーバ装置９０１の制御部１０００は、例えば、画面情報送信部１０１７として機能する。ステップＳ１５０８からステップＳ１５０９までの処理では、サーバ装置９０１の制御部１０００は、例えば、調整部１０１８として機能する。なお、送信可否判定部１０１６及び画面情報送信部１０１７は、ステップＳ１５０５からステップＳ１５０７において送信部１０１９として機能する。
【００６２】
また、ステップＣ１５０１からステップＣ１５０３までの処理では、クライアント装置９０２の制御部１１００は、例えば、設定部１１１４として機能する。また、ステップＣ１５０４の処理では、クライアント装置９０２の制御部１１００は、例えば、画面情報受信部１１１５として機能する。ステップＣ１５０５の処理では、クライアント装置９０２の制御部１１００は、例えば、肯定応答送信部１１１６として機能する。ステップＣ１５０６からステップＣ１５０８までの処理では、クライアント装置９０２の制御部１１００は、例えば、画面更新部１１１７として機能する。
【００６３】
続いて、図１６を参照して、第２の実施形態を説明する。第１の実施形態では、ネットワーク環境をクライアント装置９０２で測定する場合を例示した。第２の実施形態では、ネットワーク環境をサーバ装置９０１で測定する場合を例示する。
【００６４】
図１６は、第２の実施形態に係るリモートデスクトップ環境を提供するシステム９００においてサーバ装置９０１の制御部１０００及びクライアント装置９０２の制御部１１００が実行する画面データの送受信処理を例示する図である。図１６の左側の動作フローはサーバ装置９０１が実行する処理であり、右側の動作フローはクライアント装置９０２が実行する処理である。なお、サーバ装置９０１が実行する処理と、クライアント装置９０２が実行する処理とを識別しやすいように、図１６及びその説明では、処理の各ステップに、サーバ装置９０１が実行する処理の場合には“Ｓ”を付した。また、クライアント装置９０２が実行する処理の場合には“Ｃ”を付した。
【００６５】
まず、図１６の左側の動作フローを参照し、サーバ装置９０１の制御部１０００が実行する処理について説明する。図１６のサーバ装置９０１が実行する処理の動作フローは、例えば、サーバ装置９０１の制御部１０００が記憶部１０１０に格納されているプログラム１０２０を読み出して実行することで実施される。一実施形態においては、クライアント装置９０２において、サーバ装置９０１とのリモートデスクトップ環境を構築するアプリケーションが実行され、サーバ装置９０１とクライアント装置９０２との間の通信が確立すると、図１６の左側の動作フローは開始する。
【００６６】
ステップＳ１６０１においてサーバ装置９０１の制御部１０００は、ネットワーク環境を測定する。サーバ装置９０１の制御部１０００は、例えば、クライアント装置９０２にパケットを送信してから、その応答が返ってくるまでの時間を計測することで、クライアント装置９０２との間の通信の往復遅延時間を計測する。また、サーバ装置９０１は、例えば、クライアント装置９０２との間でリモートデスクトップ環境を構築するアプリケーションが利用可能な帯域幅を使用可能帯域として計測する。ステップＳ１６０２においてサーバ装置９０１の制御部１０００は、測定した往復遅延時間と、使用可能帯域とを含む設定情報１２００を生成し、クライアント装置９０２に送信する。
【００６７】
ステップＳ１６０３においてサーバ装置９０１の制御部１０００は、ステップＳ１６０１で測定した使用可能帯域、及び往復遅延時間を用いて、上記式１によりバッファサイズの値を算出する。なお、式１により算出されるバッファサイズは、サーバ装置９０１から送信されてきた画面情報１３００を蓄積するために、クライアント装置９０２に設けられるバッファのバッファサイズである。なお、算出されたクライアント装置９０２に設けられるバッファのバッファサイズと同じサイズのバッファを、サーバ装置９０１に設けてもよい。サーバ装置９０１に設けられるバッファは、クライアント装置９０２に画面情報１３００を送信するために用いられる。換言すると、サーバ装置９０１のバッファも、上記式１により算出されたバッファサイズで設けられてよい。続いて、サーバ装置９０１の制御部１０００は、例えば予め記憶部１０１０に格納されている送信データサイズと、算出したバッファサイズとを用いて上記式２によりウィンドウサイズの値を算出する。更に、サーバ装置９０１の制御部１０００は、得られたウィンドウサイズと往復遅延時間とを用いて、又は、送信データサイズと使用可能帯域とを用いて、上記式３により送信間隔の値を算出する。そして、サーバ装置９０１の制御部１０００は、以上で算出したバッファサイズの値、ウィンドウサイズの値、及び送信間隔の値を、バッファサイズ、ウィンドウサイズ、及び送信間隔としてそれぞれ設定する。
【００６８】
ステップＳ１６０４において、サーバ装置９０１の制御部１０００は、クライアント装置９０２から同期信号を受信するのを待機する。これは、第１の実施形態では、サーバ装置９０１がステップＳ１５０１で設定情報１２００を受信した際には、クライアント装置９０２で既にステップＣ１５０１からステップＣ１５０３の処理が完了している。従って、サーバ装置９０１がステップＳ１５０１で設定情報１２００を受信した際には、クライアント装置９０２では、ステップＣ１５０４でサーバ装置９０１から送信されてくる画面情報１３００を受信する準備が完了している。一方、第２の実施形態では、サーバ装置９０１が送信した設定情報１２００がクライアント装置９０２に受信されてから、クライアント装置９０２の処理が進む。そのため、サーバ装置９０１の処理がＳ１６０４に進んだ際に、クライアント装置９０２が画面情報１３００を受信する準備がまだできていない可能性がある。そのため、第２の実施形態では、サーバ装置９０１は、ステップＳ１６０４において、画面情報１３００を受信する準備ができたことを示す同期信号をクライアント装置９０２から受信してから処理がステップＳ１６０５へと進める。
【００６９】
以降のステップＳ１６０５からステップＳ１６１１までの処理は、例えば、図１５のサーバ装置９０１が実行するステップＳ１５０３からステップＳ１５０９までの処理とそれぞれ対応している。例えば、サーバ装置９０１の制御部１０００は、ステップＳ１６０５からステップＳ１６１１において、対応するステップＳ１５０３からステップＳ１５０９の処理と同様の処理を実行してもよい。ステップＳ１６０５からステップＳ１６１１の処理により、サーバ装置９０１は、画面情報１３００をクライアント装置９０２に送信する。また、サーバ装置９０１は、ステップＳ１６０３で設定したウィンドウサイズと送信間隔、及びクライアント装置９０２から受信される肯定応答１４００により画面情報１３００の送信間隔を制御する。
【００７０】
続いて、図１６の右側の動作フローを参照し、クライアント装置９０２の制御部１１００が実行する処理について説明する。図１６のクライアント装置９０２が実行する処理の動作フローは、例えば、クライアント装置９０２の制御部１１００が記憶部１１１０に格納されているプログラム１１２０を読み出して実行することで実施される。一実施形態においては、クライアント装置９０２において、サーバ装置９０１とのリモートデスクトップ環境を構築するアプリケーションが実行され、サーバ装置９０１とクライアント装置９０２との間の通信が確立すると、図１６の右側の動作フローは開始する。
【００７１】
ステップＣ１６０１においてクライアント装置９０２の制御部１１００は、サーバ装置９０１から設定情報１２００を受信する。ステップＣ１６０２においてクライアント装置９０２の制御部１１００は、受信した設定情報１２００に含まれる往復遅延時間と、使用可能帯域から上記式１により、バッファのバッファサイズを算出し設定する。このバッファは、例えば、クライアント装置９０２において、サーバ装置９０１から送信されてくる画面情報１３００に含まれる情報を蓄積するために用いられる。続いて、ステップＣ１６０３においてクライアント装置９０２の制御部１１００は、サーバ装置９０１から画面情報１３００を受信する準備ができたことを示す同期信号を生成し、サーバ装置９０１に送信する。
【００７２】
以降のステップＣ１６０４からステップＣ１６０８までの処理は、例えば、図１５のクライアント装置９０２が実行するステップＣ１５０４からステップＳ１５０８までの処理とそれぞれ対応している。例えば、クライアント装置９０２の制御部１１００は、ステップＣ１６０４からステップＣ１６０８において、対応するステップＣ１５０４からステップＳ１５０８の処理と同様の処理を実行してもよい。ステップＣ１６０４からステップＣ１６０８の処理により、サーバ装置９０１は、画面情報１３００を受信するとバッファへと保存し、その肯定応答１４００をサーバ装置９０１へと返す。そして、バッファに保存された画面情報１３００の画面データを画面番号の順序で表示装置９０５の表示画面に表示する。また、表示した画面データを含む画面情報１３００をバッファから消去する。
【００７３】
以上の図１６で述べた動作フローにより、サーバ装置９０１は、上述の式３によって算出された送信間隔で画面情報１３００を生成し、クライアント装置９０２へと送信する。この送信間隔は、例えばコマ落ちを抑制し、送信間隔をほぼ一定にするような長さに設定されているため、サーバ装置９０１は設定された送信間隔が経過するたびに画面情報１３００をクライアント装置９０２へ送信することができる。そのため、クライアント装置９０２では、ほぼ一定の間隔で画面情報１３００を受信することができる。結果として、クライアント装置９０２の表示画面をほぼ一定の更新間隔で更新することができ、ユーザビリティが向上する。
【００７４】
以上の図１６の動作フローにおいて、ステップＳ１６０１からステップＳ１６０５までの処理では、サーバ装置９０１の制御部１０００は、例えば、設定部１０１４として機能する。また、ステップＳ１６０６の処理では、サーバ装置９０１の制御部１０００は、例えば、画面データ取得部１０１５として機能する。ステップＳ１６０７の処理では、サーバ装置９０１の制御部１０００は、例えば、送信可否判定部１０１６として機能する。ステップＳ１６０８からステップＳ１６０９の処理では、サーバ装置９０１の制御部１０００は、例えば、画面情報送信部１０１７として機能する。ステップＳ１６１０からステップＳ１６１１までの処理では、サーバ装置９０１の制御部１０００は、例えば、調整部１０１８として機能する。なお、送信可否判定部１０１６及び画面情報送信部１０１７は、ステップＳ１６０７からステップＳ１６０９において送信部１０１９として機能する。
【００７５】
また、ステップＣ１６０１からステップＣ１６０３までの処理では、クライアント装置９０２の制御部１１００は、例えば、設定部１１１４として機能する。また、ステップＣ１６０４の処理では、クライアント装置９０２の制御部１１００は、例えば、画面情報受信部１１１５として機能する。ステップＣ１６０５の処理では、クライアント装置９０２の制御部１１００は、例えば、肯定応答送信部１１１６として機能する。ステップＣ１６０６からステップＣ１６０８までの処理では、クライアント装置９０２の制御部１１００は、例えば、画面更新部１１１７として機能する。
【００７６】
続いて、図１７及び図１８を参照して、第３の実施形態を説明する。第３の実施形態では、送信間隔を再設定する場合の例を説明する。図１７は、第３の実施形態に係るリモートデスクトップを提供するシステム９００においてサーバ装置９０１の制御部１０００及びクライアント装置９０２の制御部１１００が実行する画面データの送受信処理を例示する図である。図１７の左側の動作フローはサーバ装置９０１が実行する処理であり、右側の動作フローはクライアント装置９０２が実行する処理である。なお、サーバ装置９０１が実行する処理と、クライアント装置９０２が実行する処理とを識別しやすいように、図１７及び図１８並びにその説明では、処理の各ステップに、サーバ装置９０１が実行する処理の場合には“Ｓ”を付した。また、クライアント装置９０２が実行する処理の場合には“Ｃ”を付した。
【００７７】
まず、図１７の左側の動作フローを参照し、サーバ装置９０１の制御部１０００が実行する処理について説明する。図１７のサーバ装置９０１が実行する処理の動作フローは、例えば、サーバ装置９０１の制御部１０００が記憶部１０１０に格納されているプログラム１０２０を読み出して実行することで実施される。一実施形態においては、クライアント装置９０２において、サーバ装置９０１とのリモートデスクトップ環境を構築するアプリケーションが実行され、サーバ装置９０１とクライアント装置９０２との間の通信が確立すると、図１７の左側の動作フローは開始する。
【００７８】
ステップＳ１７０１においてサーバ装置９０１の制御部１０００は、設定処理を実行する。例えば、ネットワーク環境の測定をクライアント装置９０２で行う場合には、サーバ装置９０１の制御部１０００は、設定処理において図１５のステップＳ１５０１からステップＳ１５０２の処理を実行してもよい。また、例えば、ネットワーク環境の測定をサーバ装置９０１が行う場合には、サーバ装置９０１の制御部１０００は、設定処理において図１６のステップＳ１６０１からステップＳ１６０４の処理を実行してもよい。続いて、ステップＳ１７０２において、サーバ装置９０１の制御部１０００は、設定処理で設定したウィンドウサイズの値を、ウィンドウの空サイズを格納する変数であるＮに設定する。ステップＳ１７０３において、サーバ装置９０１の制御部１０００は、ｎＣｏｕｎｔ及びｎＳｉｚｅ［］に０を、並びにｎＡｃｋＰｌｕｓ（補正加算値とも呼ぶ）に１を設定する。なお、ｎＣｏｕｎｔ、ｎＳｉｚｅ［］、及びｎＡｃｋＰｌｕｓは以降の処理で利用される変数であり、その詳細については後述する。
【００７９】
ステップＳ１７０４において、サーバ装置９０１の制御部１０００は、接続されたクライアント装置９０２にリモートデスクトップを提供する仮想デスクトップの画面をキャプチャする。そして、得られた画像データに例えば圧縮等の処理を行い、クライアント装置９０２に送信するための画面データを生成する。ステップＳ１７０５においてサーバ装置９０１の制御部１０００は、Ｎが１以上であるか否かを判定する。換言すると、サーバ装置９０１の制御部１０００は、ウィンドウの空サイズに空きがあるか否かを判定する。
【００８０】
Ｎが１よりも小さく空サイズに空きがない場合（ステップＳ１７０５がＮｏ）、フローはステップＳ１７１１へと進む。ステップＳ１７１１ではサーバ装置９０１の制御部１０００は、ステップＳ１７０４で生成した画面情報１３００をクライアント装置９０２へと送信せずに例えば破棄し、結果として、ステップＳ１７０４で生成した画面データをコマ落ちさせる。
【００８１】
一方、ステップＳ１７０５においてＮが１以上であり空サイズに空きがある場合（ステップＳ１７０５がＹｅｓ）、フローはステップＳ１７０６へと進む。ステップＳ１７０６において、サーバ装置９０１の制御部１０００は、ステップＳ１７０４で生成された画面データと、その画面データに対して割り振った通し番号を含む画面情報１３００を生成し、クライアント装置９０２に送信する。なお、画面データを分割して分割画面データを送信する場合には、分割された分割画面データと、その分割画面データが画面データのどの部分にあたるかを示す分割番号とを含む画面情報１３００を生成し、送信する。ステップＳ１７０７において、サーバ装置９０１の制御部１０００は、Ｎ＝Ｎ−１を計算し、空サイズ：Ｎの値を更新する。空サイズ：Ｎの値を更新すると、フローはステップＳ１７０８へと進む。
【００８２】
ステップＳ１７０８においてサーバ装置９０１の制御部１０００は、送信した画面情報１３００のデータサイズをｎＳｉｚｅ［ｎＣｏｕｎｔ］に格納し、現在のｎＣｏｕｎｔの値に対応する画面情報１３００のデータサイズを記録する。その後、ｎＣｏｕｎｔの値に１を加算して、ｎＣｏｕｎｔの値を更新する。ステップＳ１７０９においてサーバ装置９０１の制御部１０００は、ｎＣｏｕｎｔの値が所定の回数よりも大きいか否かを判定する。所定の回数以下である場合（ステップＳ１７０９がＮｏ）、フローはステップＳ１７１２へと進む。一方、所定の回数よりも大きい場合（ステップＳ１７０９がＹｅｓ）、フローはステップＳ１７１０へと進む。
【００８３】
ステップＳ１７１０においてサーバ装置９０１の制御部１０００は、再設定処理を実行する。再設定処理の詳細については図１８を参照して後述するが、再設定処理により、例えば、ウィンドウサイズ、送信間隔などの値が再設定される。また、再設定されたウィンドウサイズに合わせて現在の空サイズを示すＮの値も再設定される。ステップＳ１７１２において、サーバ装置９０１の制御部１０００は、ステップＳ１７０４で画面データを生成してからステップＳ１７０１で設定した送信間隔の時間が経過するまで待つことで、送信間隔を調整する。
【００８４】
また、ステップＳ１７１２において、ステップＳ１７０４で画面データを生成してから送信間隔の時間が経過するまでの期間中に、クライアント装置９０２から肯定応答１４００を受信したとする。この場合には、その都度、サーバ装置９０１の制御部１０００はＮに値を加算して、空サイズ：Ｎの値を更新する。なお、Ｎに加算する値は、受信した肯定応答１４００が、再設定処理の前に送信した画面情報１３００に対する肯定応答１４００か、それとも、再設定処理の後のウィンドウサイズが現在の値の時に送信した画面情報１３００に対する肯定応答１４００かで異なる。
【００８５】
これは、再設定によりウィンドウサイズが変わる場合、再設定の前と後で空サイズ：Ｎの値１に対して対応付けられているバッファの容量が異なるためである。上述した様に、ウィンドウサイズは、バッファサイズを送信データサイズで割って得られている（式２）。ここで、送信データサイズが、サーバ装置９０１が送信する画面情報１３００などの送信データのうちで最大のデータサイズを推定することで得られた値であるとする。この場合、ウィンドウサイズはバッファに送信データが少なくとも何個保持できるかを表す値として用いることができる。そして、この様にウィンドウサイズとバッファサイズとを対応付けた場合に、例えば、ウィンドウサイズが再設定の前に３であり、再設定後に倍の６になった場合を仮定する。この場合に、再設定の前にＮの値１に割り当てられているバッファサイズは、再設定後のウィンドウサイズではＮの値２個分と対応することになる。そのため、再設定の前に送信された画面情報１３００に対する肯定応答１４００を再設定後に受信した場合、１ではなく倍の２をＮに加算しないと、再設定後のウィンドウサイズに対する実際のウィンドウの空サイズがＮの値に反映されなくなってしまう。そこで、ステップＳ１７１２では、ウィンドウサイズの値が再設定前の値の時に送信した画面情報１３００に対する肯定応答１４００を受信した場合は、再設定によるウィンドウサイズの変動を反映したｎＡｃｋＰｌｕｓをＮに加算し空サイズ：Ｎの値を更新する。なお、ｎＡｃｋＰｌｕｓの算出については、図１８を参照して後述する。一方、ステップＳ１７１２においてサーバ装置９０１の制御部１０００は、ウィンドウサイズの値が現在設定されている値の時に送信した画面情報１３００に対する肯定応答１４００を受信した場合には、Ｎに１を加算して、空サイズ：Ｎの値を更新する。
【００８６】
また、受信した肯定応答１４００が再設定の前に送信された画面情報１３００に対する肯定応答１４００か、ウィンドウサイズの値が現在設定されている値の時に送信した画面情報１３００に対する肯定応答１４００かは以下のように判定されてもよい。例えば、受信した肯定応答１４００に含まれる画面番号をステップＳ１７０９で用いる所定の回数で除算し、得られた値の小数部分は切り捨てて整数化し値Ａを得る。また、ステップＳ１７０６の処理を前回実行した際に画面情報１３００に付加した画面番号をステップＳ１７０９で用いる所定の回数で除算し、得られた値の小数部分は切り捨てて整数化し値Ｂを得る。そして、得られた値Ａと値Ｂが等しければ、受信した肯定応答１４００は、ウィンドウサイズの値が現在設定されている値の時に送信した画面情報１３００と判定してもよい。また、得られた値Ａが、値Ｂよりも小さければ受信した肯定応答１４００が再設定の前に送信された画面情報１３００に対する肯定応答１４００であると判定してもよい。なお、受信した肯定応答が再設定の前に送信された画面情報１３００に対する肯定応答１４００であるか、ウィンドウサイズの値が現在設定されている値の時に送信した画面情報１３００に対する肯定応答１４００であるかの判定はこれに限定されるものではない。別の実施形態では、その他の手法で判定されてもよい。ステップＳ１７１２において、ステップＳ１７０４で画面データを生成してから、設定されている送信間隔の時間が経過すると、フローはステップＳ１７０４へと戻る。
【００８７】
続いて、図１７の右側の動作フローを参照し、クライアント装置９０２の制御部１１００が実行する処理について説明する。図１７のクライアント装置９０２が実行する処理の動作フローは、例えば、クライアント装置９０２の制御部１１００が記憶部１１１０に格納されているプログラム１１２０を読み出して実行することで実施される。一実施形態においては、クライアント装置９０２において、サーバ装置９０１とのリモートデスクトップ環境を構築するアプリケーションが実行され、サーバ装置９０１とクライアント装置９０２との間の通信が確立すると、図１７の右側の動作フローは開始する。
【００８８】
ステップＣ１７０１においてクライアント装置９０２の制御部１１００は、設定処理を実行する。例えば、ネットワーク環境の測定をクライアント装置９０２で行う場合には、クライアント装置９０２の制御部１１００は、設定処理において図１５のステップＣ１５０１からステップＣ１５０３の処理を実行してもよい。また、例えば、ネットワーク環境の測定をサーバ装置９０１が行う場合には、クライアント装置９０２の制御部１１００は、設定処理において図１６のステップＣ１６０１からステップＣ１６０３の処理を実行してもよい。続く、ステップＣ１７０２からステップＣ１７０６までの処理は、例えば、図１５のクライアント装置９０２が実行するステップＣ１５０４からステップＳ１５０８までの処理とそれぞれ対応している。例えば、クライアント装置９０２の制御部１１００は、ステップＣ１７０２からステップＣ１７０６において、対応するステップＣ１５０４からステップＳ１５０８の処理と同様の処理を実行してもよい。ステップＣ１７０２からステップＣ１７０６の処理により、クライアント装置９０２は、画面情報１３００を受信するとバッファへと保存し、その肯定応答１４００をサーバ装置９０１へと返す。そして、バッファに保存された画面情報１３００の画面データを画面番号の順序で表示装置９０５の表示画面に表示する。また、表示した画面データを含む画面情報１３００はバッファから消去する。
【００８９】
続いて、図１８を参照して、再設定処理の詳細について説明する。図１８は、図１７のステップＳ１７１０でサーバ装置９０１の制御部１０００によって実行される再設定処理を例示する図である。図１８の再設定処理の動作フローは、例えば、サーバ装置９０１の制御部１０００が記憶部１０１０に格納されているプログラム１０２０を読み出して実行することで実施される。一実施形態においては、図１７のステップＳ１７１０に進むと、再設定処理は開始する。
【００９０】
ステップＳ１８０１においてサーバ装置９０１の制御部１０００は、現在の空サイズ：Ｎの値を、変数Ｎｏｌｄに格納する。また、サーバ装置９０１の制御部１０００は、再設定処理を開始するまで設定されていたウィンドウサイズの値の算出に用いた送信データサイズを、ｎＳｅｎｄＳｉｚｅｏｌｄに格納する。また、上述のように、ステップＳ１７０５でＹｅｓと判定されてからステップＳ１７０９までの処理は、ｎＣｏｕｎｔが所定の回数を超える値に達するまで繰り返される。そして、繰り返しの度に、ステップＳ１７０８では送信した画面情報１３００のデータサイズが、対応するｎＳｉｚｅ［ｎＣｏｕｎｔ］に格納される。ステップＳ１８０１ではサーバ装置９０１の制御部１０００は、格納されているｎＳｉｚｅ［ｎＣｏｕｎｔ］（ここで、ｎＣｏｕｎｔは０から所定の回数である）のうちで、最大のデータサイズを有するｎＳｉｚｅ［ｎＣｏｕｎｔ］の値を取得する。そして、サーバ装置９０１の制御部１０００は、取得された最大のデータサイズを有するｎＳｉｚｅ［ｎＣｏｕｎｔ］の値を新たな送信データサイズとしてｎＳｅｎｄＳｉｚｅｎｅｗに格納する。
【００９１】
なお、別な実施形態においては、ステップＳ１８０１で、ｎＳｅｎｄＳｉｚｅｎｅｗに新たな送信データサイズとして格納する値に、ｎＳｉｚｅ［ｎＣｏｕｎｔ］（ここで、ｎＣｏｕｎｔは０から所定の回数である）の平均のデータサイズを用いても良い。ｎＳｉｚｅ［ｎＣｏｕｎｔ］（ここで、ｎＣｏｕｎｔは０から所定の回数である）の平均のデータサイズは、例えば、以下の式によって算出されてもよい。
【数３】
0005994944.tif 000004
【００９２】
ステップＳ１８０２においてサーバ装置９０１の制御部１０００は、取得した新たな送信データサイズであるｎＳｅｎｄＳｉｚｅｎｅｗを用いて、上記式２により新たなウィンドウサイズを算出し、ウィンドウサイズの値を再設定する。ここで、バッファサイズの値は、ステップＳ１７０１で設定した値を用いる。ステップＳ１８０３でサーバ装置９０１の制御部１０００は、再設定処理の開始前のウィンドウの空サイズであるＮｏｌｄが、新たにステップＳ１８０２で設定されたウィンドウサイズにおいていくつに対応するかを算出する。この算出は、例えばステップＳ１８０３に示す式により計算される。なお、ステップＳ１８０３に示す式により、小数部分は切り上げられる。サーバ装置９０１の制御部１０００は、ステップＳ１８０３に示す式により得られた値を、ウィンドウの空サイズの値を格納する変数であるＮに再設定する。なお、ここで再設定されたＮの値は、上述の例えばステップＳ１７０５、ステップＳ１７０７、及びステップＳ１７１２、で以降用いられる。
【００９３】
ステップＳ１８０４においてサーバ装置９０１の制御部１０００は、ｎＡｃｋＰｌｕｓを算出する。ｎＡｃｋＰｌｕｓは、再設定処理の開始前のウィンドウの空サイズであるＮｏｌｄとステップＳ１８０３で再設定したＮとの比率を表している。ｎＡｃｋＰｌｕｓは、上述のようにステップＳ１７１２で、再設定の前に送信した画面情報１３００に対する肯定応答１４００を受信した場合に、Ｎに加算される値である。続いて、ステップＳ１８０５においてサーバ装置９０１の制御部１０００は、上記式３により、例えばステップＳ１７０１で取得した往復遅延時間を、ステップＳ１８０２で新たに算出したウィンドウサイズで除算することで、送信間隔を再設定する。なお、ステップＳ１８０５において上記式３により、例えば、ステップＳ１７０１で取得した使用可能帯域で、ステップＳ１８０１で取得したｎＳｅｎｄＳｉｚｅｎｅｗを除算して送信間隔を算出してもよい。続いて、ステップＳ１８０６においてサーバ装置９０１の制御部１０００は、ｎＣｏｕｎｔの値と、ｎＳｉｚｅ［］の値を０にリセットして本動作フローは終了し、フローは図１７のステップＳ１７１２へと進む。
【００９４】
以上で述べた図１７及び図１８の動作フローにより、サーバ装置９０１は、ｎＣｏｕｎｔが所定の回数を超える値に達するたびに再設定処理を実行する。再設定処理では、例えば、ｎＣｏｕｎｔの値が０から所定の回数までの繰り返しの間に送信された画面情報１３００のデータサイズを基に、ウィンドウサイズ及び送信間隔が再設定される。また、現在の空サイズを示すＮの値を、再設定されたウィンドウサイズの値に合わせて再設定する。更に、ウィンドウサイズの値が再設定前の値の時に送信した画面情報１３００に対する肯定応答１４００を受信した場合に、再設定されたＮの値を更新するためのｎＡｃｋＰｌｕｓも算出される。図１７及び図１８の動作フローでは、実際に送信した画面情報１３００のデータサイズに合わせてウィンドウサイズが動的に再設定されるため、画面情報１３００のデータサイズの変化に合わせて、適切な送信間隔を動的に再設定することができる。また、得られた送信間隔は、例えばコマ落ちを抑制し、送信間隔をほぼ一定にするような長さに設定されている。そのため、サーバ装置９０１は設定されている送信間隔の時間が経過するたびに画面情報１３００をクライアント装置９０２に送信することができる。結果として、クライアント装置９０２の表示画面をほぼ一定の更新間隔で更新することができ、ユーザビリティが向上する。
【００９５】
上述の図１７の動作フローにおいて、ステップＳ１７０１からステップＳ１７０３、ステップＳ１７０８からステップＳ１７１０までの処理では、サーバ装置９０１の制御部１０００は、例えば、設定部１０１４として機能する。また、ステップＳ１７０４の処理では、サーバ装置９０１の制御部１０００は、例えば、画面データ取得部１０１５として機能する。ステップＳ１７０５の処理では、サーバ装置９０１の制御部１０００は、例えば、送信可否判定部１０１６として機能する。ステップＳ１７０６からステップＳ１７０７の処理では、サーバ装置９０１の制御部１０００は、例えば、画面情報送信部１０１７として機能する。ステップＳ１７１１からステップＳ１７１２までの処理では、サーバ装置９０１の制御部１０００は、例えば、調整部１０１８として機能する。なお、送信可否判定部１０１６及び画面情報送信部１０１７は、ステップＳ１７０５からステップＳ１７０７において送信部１０１９として機能する。更に、図１８の動作フローにおいて、ステップＳ１８０１からステップＳ１８０６までの処理では、サーバ装置９０１の制御部１０００は、例えば、設定部１０１４として機能する。
【００９６】
また、ステップＣ１７０１の処理では、クライアント装置９０２の制御部１１００は、例えば、設定部１１１４として機能する。また、ステップＣ１７０２の処理では、クライアント装置９０２の制御部１１００は、例えば、画面情報受信部１１１５として機能する。ステップＣ１７０３の処理では、クライアント装置９０２の制御部１１００は、例えば、肯定応答送信部１１１６として機能する。ステップＣ１７０４からステップＣ１７０６までの処理では、クライアント装置９０２の制御部１１００は、例えば、画面更新部１１１７として機能する。
【００９７】
図１９は、実施形態に係るサーバ装置９０１を実現するための例えばコンピュータなどの情報処理装置１９００のハードウェア構成を例示する図である。図１９のサーバ装置９０１を実現するためのハードウェア構成は、例えば、プロセッサ１９０１、メモリ１９０２、記憶装置１９０３、読取装置１９０４、通信インタフェース１９０６、及び入出力インタフェース１９０７を備える。なお、プロセッサ１９０１、メモリ１９０２、記憶装置１９０３、読取装置１９０４、通信インタフェース１９０６、入出力インタフェース１９０７は、例えば、バス１９０８を介して互いに接続されている。
【００９８】
プロセッサ１９０１は、メモリ１９０２を利用して例えば上述の動作フローの手順を記述したプログラムを含むプログラム１０２０を実行することにより、上述した各機能部の一部または全部の機能を提供する。例えば、サーバ装置９０１の制御部１０００は、例えばプロセッサ１９０１であり、また、記憶部１０１０は、例えばメモリ１９０２、記憶装置１９０３、及び着脱可能記憶媒体１９０５を含んでいる。サーバ装置９０１の記憶装置１９０３には、例えば、プログラム１０２０が格納されている。サーバ装置９０１のプロセッサ１９０１は、例えば、記憶装置１９０３に格納されているプログラム１０２０を読み出して実行することで、例えば接続確立部１０１１、ユーザ操作受信部１０１２、画面更新部１０１３、設定部１０１４として機能する。また、サーバ装置９０１のプロセッサ１９０１は、例えば、記憶装置１９０３に格納されているプログラム１０２０を読み出して実行することで、画面データ取得部１０１５、送信可否判定部１０１６、画面情報送信部１０１７として機能する。更に、サーバ装置９０１のプロセッサ１９０１は、例えば、記憶装置１９０３に格納されているプログラム１０２０を読み出して実行することで、調整部１０１８、送信部１０１９として機能する。
【００９９】
メモリ１９０２は、例えば半導体メモリであり、ＲＡＭ領域及びＲＯＭ領域を含んで構成される。記憶装置１９０３は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、又は外部記憶装置である。
【０１００】
読取装置１９０４は、プロセッサ１９０１の指示に従って着脱可能記憶媒体１９０５にアクセスする。着脱可能記憶媒体１９０５は、例えば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。通信インタフェース１９０６は、プロセッサ１９０１の指示に従ってネットワーク１９２０を介してデータを送受信する。なお、ネットワーク１９２０は、例えば上述のネットワーク９０３であってよい。入出力インタフェース１９０７は、例えば、入力装置及び出力装置との間のインタフェースに相当する。入力装置は、例えばユーザからの指示を受け付けるキーボードやマウスなどのデバイスである。出力装置は、例えばディスプレーなどの表示装置、及びスピーカなどの音声装置である。
【０１０１】
実施形態に係る各プログラムは、例えば、下記の形態でサーバ装置９０１に提供される。
（１）記憶装置１９０３に予めインストールされている。
（２）着脱可能記憶媒体１９０５により提供される。
（３）プログラムサーバ１９３０から提供される。
【０１０２】
図２０は、実施形態に係るクライアント装置９０２を実現するための例えばコンピュータなどの情報処理装置２０００のハードウェア構成を例示する図である。図２０のクライアント装置９０２を実現するためのハードウェア構成は、例えば、プロセッサ２００１、メモリ２００２、記憶装置２００３、読取装置２００４、通信インタフェース２００６、入出力インタフェース２００７、表示装置２０１０を備える。なお、プロセッサ２００１、メモリ２００２、記憶装置２００３、読取装置２００４、通信インタフェース２００６、入出力インタフェース２００７は、例えば、バス２００８を介して互いに接続されている。
【０１０３】
プロセッサ２００１は、メモリ２００２を利用して例えば上述の動作フローの手順を記述したプログラムを含むプログラム１１２０を実行することにより、上述した各機能部の一部または全部の機能を提供する。例えば、クライアント装置９０２の制御部１１００は、例えばプロセッサ２００１であり、また、記憶部１１１０は、例えばメモリ２００２、記憶装置２００３、及び着脱可能記憶媒体２００５を含んでいる。クライアント装置９０２の記憶装置２００３には、例えば、プログラム１１２０が格納されている。クライアント装置９０２のプロセッサ２００１は、例えば、記憶装置２００３に格納されているプログラム１１２０を読み出して実行することで、接続確立部１１１１、ユーザ操作取得部１１１２、ユーザ操作送信部１１１３、設定部１１１４として機能する。また、クライアント装置９０２のプロセッサ２００１は、例えば、記憶装置２００３に格納されているプログラム１１２０を読み出して実行することで、画面情報受信部１１１５、肯定応答送信部１１１６、画面更新部１１１７として機能する。
【０１０４】
メモリ２００２は、例えば半導体メモリであり、ＲＡＭ領域及びＲＯＭ領域を含んで構成される。記憶装置２００３は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、又は外部記憶装置である。
【０１０５】
読取装置２００４は、プロセッサ２００１の指示に従って着脱可能記憶媒体２００５にアクセスする。着脱可能記憶媒体２００５は、例えば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。通信インタフェース２００６は、プロセッサ２００１の指示に従ってネットワーク２０２０を介してデータを送受信する。なお、ネットワーク２０２０は、例えば上述のネットワーク９０３であってよい。入出力インタフェース２００７は、例えば、入力装置及び出力装置との間のインタフェースに相当する。例えば、図２０では、入出力インタフェース２００７には、ディスプレーなどの表示装置２０１０が接続されている。また、入出力インタフェース２００７には、スピーカなどのその他の出力装置が接続されていてもよい。入出力インタフェース２００７には、例えばキーボードやマウスなどの入力装置が接続されていてもよい。
【０１０６】
実施形態に係る各プログラムは、例えば、下記の形態でクライアント装置９０２に提供される。
（１）記憶装置２００３に予めインストールされている。
（２）着脱可能記憶媒体２００５により提供される。
（３）プログラムサーバ２０３０から提供される。
【０１０７】
以上において、いくつかの実施形態について説明した。しかしながら、実施形態は上記の実施形態に限定されるものではなく、上述の実施形態の各種変形形態及び代替形態を包含するものとして理解されるべきである。例えば、各種実施形態は、その趣旨及び範囲を逸脱しない範囲で構成要素を変形して具体化できることが理解されよう。また、前述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態を成すことができることが理解されよう。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施され得ることが当業者には理解されよう。
【符号の説明】
【０１０８】
９００  システム
９０１  サーバ装置
９０２  クライアント装置
９０３  ネットワーク
９０５  表示装置
１０１１  接続確立部
１０１２  ユーザ操作受信部
１０１３  画面更新部
１０１４  設定部
１０１５  画面データ取得部
１０１６  送信可否判定部
１０１７  画面情報送信部
１０１８  調整部
１０１９  送信部
１１１１  接続確立部
１１１２  ユーザ操作取得部
１１１３  ユーザ操作送信部
１１１４  設定部
１１１５  画面情報受信部
１１１６  肯定応答送信部
１１１７  画面更新部
１９００  情報処理装置
１９０１  プロセッサ
１９０２  メモリ
１９０３  記憶装置
１９０４  読取装置
１９０５  着脱可能記憶媒体
１９０６  通信インタフェース
１９０７  入出力インタフェース
１９０８  バス
２０００  情報処理装置
２００１  プロセッサ
２００２  メモリ
２００３  記憶装置
２００４  読取装置
２００５  着脱可能記憶媒体
２００６  通信インタフェース
２００７  入出力インタフェース
２００８  バス
２０１０  表示装置
【図１】
0005994944.tif 000005
【図２】
0005994944.tif 000006
【図３】
0005994944.tif 000007
【図４】
0005994944.tif 000008
【図５】
0005994944.tif 000009
【図６】
0005994944.tif 000010
【図７】
0005994944.tif 000011
【図８】
0005994944.tif 000012
【図９】
0005994944.tif 000013
【図１０】
0005994944.tif 000014
【図１１】
0005994944.tif 000015
【図１２】
0005994944.tif 000016
【図１３】
0005994944.tif 000017
【図１４】
0005994944.tif 000018
【図１５】
0005994944.tif 000019
【図１６】
0005994944.tif 000020
【図１７】
0005994944.tif 000021
【図１８】
0005994944.tif 000022
【図１９】
0005994944.tif 000023
【図２０】
0005994944.tif 000024