Как синхронизировать клиентскую и серверную часть сайта?
Здравствуйте!
Мне нужно синхронизировать клиентскую серверную часть приложения.
Если конкретнее, то есть некое число, которое просчитывается в зависимости от времени начала.
Нужное время я храню на сервере и отправляю на клиент с помощью сокетов(каждые 0.4 секунды).
Получается, что через каждые +-0.4 секунды(в зависимости от того, как быстро придёт сокет) у меня есть новая просчитанная с помощью времени версия числа.
Как мне, с учётом вышеописанного, сделать плавный переход из старого числа с дробной частью в новое с дробной частью(к примеру из 10.32 в 20.23), пока не поступил сокет с новым временем для генерации нового числа. Делал что-то такое с помощью setInterval, но из-за разности времени между приходом сокетов, ничего не получилось.
WbICHA, ему нужно изменить число в соответствии со временем, то есть каждую секунду например число должно меняться ( в соответствии с данными от сервера ), не раньше не позже - ну я так понял, а число меняется анимацией, скорее всего, поэтому он пытался отправлять его раньше 0.4
Верить клиенту конечно нельзя, но можно сделать вид что веришь:
1. рассчитывай число и на клиенте и на сервере.
2. в начале расчёта один раз синхронизируй с сервером.
3. выводи рассчитываемое на клиенте число с какой угодно плавностью.
4. если синхронизация прям очень важна - продолжай слать число с сервера и сравнивать с клиентом, если разница в пределах (заданной) погрешности - ничего не делай, еслы вышла за пределы - меняй клиентское(ничего страшного если такое будет происходить изредка).
5. если сама по себе синхронизация не особо важна, а важно лишь конечно число, то собственно сравнивай клиентское с серверным только в самом конце. Если совпало (с погрешностью в нужную сторону) - всё ок. Не совпало - клиент хацкер - идёт нафиг.
У любого нормального клиента всё всегда будет совпадать, мегаредкие исключения со сломанными системными часами в любом случае будут баговать, а хацкеры нам и не нужны.