2011-07-26 12 views
2

クライアントとサーバ間のテキストファイルを同期させるための、待ち時間の短い、帯域幅の狭いアルゴリズムとは何ですか?クライアント/サーバ間でテキストを同期させるアルゴリズム

クライアントが現在の状態のデルタを送信し、サーバーからの最後のACK状態です。

具体的に

、どのようにクライアント/サーバー環境での差分/デルタアルゴリズム振る舞う:私は

EDIT 1 ... Quake3ネットワーキングを考えています。

クライアント側で差分を計算し、サーバーに送信し、サーバーがそのストアを解釈し更新し、クライアントにACKを送信するのは、より高価ですか?または、クライアントが完全な状態を送信し、サーバーがそれを格納する複製モデルを持つ方が安いでしょうか?

EDIT 2:

100 KBテキストファイル。小さいもの、あまりにも大きいものではない。

答えて

1

デルタアルゴリズムを使用すると、たとえばrsyncの動作を見てみましょう。

Googleはクロムを更新するために別のアプローチを使用しています。あなたは「google」でそれを見ることができます。

編集:1つの変更を生成し、多数のクライアントで複製するサーバーの場合は、サーバーで行う必要があります。質問の変更から、クライアント(または多くのクライアント)が変更を生成し、それらを変更してサーバーに複製することを理解しました。

うーん...私は、アカウントに4つの物事取ると思います:

  • ネットワークパフォーマンスを
  • 変化の
  • クライアント数
  • 数は、サーバのクライアント
  • パフォーマンスを期待

サーバーで送信しているクライアントが多すぎます。ほとんどのDoSです。 クライアントの数が少なく、サーバーのパフォーマンスが高く、クライアントのパフォーマンスが低い場合は、サーバー上で動作します。 それ以外の場合は、私はクライアントでのみ行います。

+0

これはクライアント/サーバー環境で効率的ですか? – brooksbp

+0

@brooksbp編集済み – woliveirajr

2

diffのような意味ですか?

クライアントのファイルのサーバー側のバージョンを格納します。同期が必要なときはいつでも、diffを実行してください(自分で書き込んだり、ライブラリを使うこともできます)。その後、サーバーに差を送り、サーバーをpatchローカルバージョンにします。

+0

私はdiff/deltaアルゴリズムがその一部だと思います。元の質問を更新して、私が尋ねようとしていることを詳述しました – brooksbp

1

クライアントがテキストを編集し、元に戻す/やり直し機能を持っている場合、元に戻すスタックをデルタに使用できます。大規模なテキストや小さな変更の場合は、差分を実行するよりも効率的でなければなりません。

関連する問題