Скажем в игре Farmerama, с которой я кхм... разбирался ;-) устроено так - с каждым объектом связано поле в котором хранится время следующего события, unix timestamp. Например время когда что-то на поле созреет и тд.
Анимации всякие и визуальное отображение объекта оперирует значением этого поля, то есть если судя по таймеру поле должно уже созреть - на клиенте оно рисуется как готовое. Регулярно клиент посылает на сервер PUSH сообщения в ответ на которые сервер сообщает новое реальное состояние поля, новые значения таймеров в том числе. Так что если возникает какая-то рассинхронизация или задержка в ответе сервера - полое хоть и рисуется как созревшее или убранное или еще какое изменение состояния - но реально состояние игры (добавление или уменьшение ресурсов) произойдет только когда это подтвердит сервер.
Синхронизация с сервером происходит время от времени если даже игрок ничего не делает, и после отправки действий игрока на сервер.