Пытаюсь получить "тикающий" сервер с точным или почти точным периодом в 1 секунду для получения относительно точного времени с погрешностью не более 1 секунды.
Есть контроллер
example.com/timer на который nodejs с интервалом 1000мс отправляет текущее время. Затем с контроллера время выводится в браузер:
var request = require('request');
var requestLoop = setInterval(function() {
var time = Math.round(+new Date()/1000);
request({
url: "http://example.com/timer",
method: "POST",
data: {time: time},
followRedirect: false
});
}, 1000);
Первую неделю все работает нормально, время "тикает", но через неделю время в браузере начинает постепенно спешить и за неделю разница с настоящим временем возрастает примерно до 4-5 секунд. Получается что setInterval в данном случае работает чуть-чуть быстрее чем 1000мс? Можно ли каким то способом добиться того, чтобы получать всегда точное время на сервере?
Уже несколько месяцев интересуюсь этим вопросом и знающие люди
подсказывали что для того чтобы получить точные периоды в 1 секунду надо найти сервер с частотой кратной 60, а таких не бывает и все плохо. Но ведь есть же в интернете сервисы в которых отображается точное время и оно никогда не спешит". Видимо как то нужно сглаживать погрешность в промежутках между запросами, которая накапливается со временем. Есть какие нибудь идеи?
UPD: подробнее: setInterval постоянно крутится на nodejs сервере, отправляя запросы на контроллер timer, который находится на laravel.
Как выводится время в браузер: контроллер timer по запросу пушит время клиентам (вебсокет), а на клиенте выводится в читаемом формате в браузер.
Проблема в том что setInterval после 1-2 недели работы показывает время на 4-5 секунд больше актуального времени