алгоритм синхронизации текста между клиентом и сервером - PullRequest
1 голос
/ 26 июля 2011

Что такое алгоритм с низкой задержкой и низкой пропускной способностью для синхронизации, скажем, текстового файла между клиентом и сервером?

Существует ли схема, в которой клиент отправляет дельту своего текущего состояния и своего последнего состояния ACK с сервера? Я думаю, Quake3 сетей ..

РЕДАКТИРОВАТЬ 1:

Более конкретно, как поведет себя алгоритм diff / delta в среде клиент / сервер.

например. Дороже ли рассчитывать diff на стороне клиента, отправлять на сервер, сервер интерпретирует и обновляет свое хранилище, отправляет ACK клиенту? Или дешевле иметь модель репликации, в которой клиент отправляет свое полное состояние, а сервер сохраняет его? ..

РЕДАКТИРОВАТЬ 2:

100 КБ текстовый файл. Что-то маленькое, не слишком большое.

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Вы имеете в виду как diff ?

Хранить версию файла на стороне сервера в клиенте.Всякий раз, когда вам нужно синхронизировать, запустите diff (вы можете написать свой собственный или использовать библиотеку).Затем отправьте разницу на сервер и получите сервер patch это локальная версия.

1 голос
/ 27 июля 2011

Если клиент также редактирует текст и имеет функцию отмены / возврата, то стек отмены может использоваться для дельты.Для больших текстов и небольших изменений использование отмены стека должно быть более эффективным, чем запуск diff.

1 голос
/ 26 июля 2011

Для текста вы можете использовать дельта-алгоритм, посмотрите, например, как работает rsync.

Google использует другой подход к обновлению Chrome, вы можете "погуглить" его, чтобы увидеть.

Редактировать: если это был сервер, генерирующий одно изменение и реплицирующий на большом количестве клиентов, это должно быть сделано на сервере. Из изменений вопроса я понял, что клиент (или много клиентов) будет производить изменения и хочет, чтобы они были реплицированы на сервере.

Ну ... я бы учел 4 вещи:

  • производительность сети
  • количество клиентов
  • ожидаемое количество изменений
  • производительность сервера и клиента

Слишком много клиентов отправляют и делают это на сервере: это почти DoS Я сделал бы это только на сервере, если бы было мало клиентов, высокая производительность сервера и низкая производительность клиента. В противном случае я бы делал это только на клиентах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...