Синхронизация объектов между двумя устройствами с разным системным временем - PullRequest
0 голосов
/ 07 мая 2010

Я синхронизирую объекты между двумя устройствами. Объекты имеют свойство lastModified. Если оба устройства изменили объект, то при следующей синхронизации версия объекта с самой последней lastModified будет выбрана на обоих устройствах. Поэтому мы не делаем мелкозернистое слияние, только слияние «самой последней версии».

Проблема заключается в следующем. Когда одно устройство получает список измененных объектов, оно не может надежно сравнить lastModified полученных объектов с его собственным, поскольку системное время на обоих устройствах может быть разным.

Я подумал, чтобы каждое устройство отправляло свою текущую дату / время во время синхронизации. Затем каждый рассчитывает разницу между удаленным временем и местным временем, чтобы правильно сравнить даты. Но если существует задержка между отправкой даты и получением ее удаленным устройством, это вызывает некорректное сравнение с объектами, которые были изменены одновременно (или очень близко друг к другу во времени). то есть оба устройства думают, что удаленный объект более новый, и в результате они получают разные объекты.

Надеюсь, я объяснил это достаточно ясно.

Должно быть общее решение этой проблемы, но мой мозг ничего не придумывает. Какие-либо предложения? Заранее спасибо ...

1 Ответ

0 голосов
/ 07 мая 2010

Я нашел решение, которое должно работать.

Клиент отправляет свою дату на сервер. Сервер вычисляет дельту, которую он использует для нормализации дат клиента к своему собственному времени. Сервер отправляет эту дельту обратно клиенту, и клиент использует ту же самую дельту (с отрицанием), чтобы сделать то же самое со временем рабочего стола. Теперь любые преобразования согласуются между двумя устройствами. Все еще может быть ситуация, когда между двумя объектами выбирается более старый объект, который изменяется в течение <LAG> секунд друг от друга, но по крайней мере это сейчас соответствует.

...