с периодичностью 15сек то со временем не будут совпадать?
====================
Лучше использовать DateTime.now(), если ты хочешь точное время. И то это будет зависеть от времени на устройстве. timer будет работать относительно загружености системы
Нужно чтобы на двух разных серверах что-то выполнялось бесконечно в один и тот же момент с одинаковой периодичностью. Не знаю как реализовать это гарантировано
https://stackoverflow.com/questions/64026825/how-to-get-network-datetime-now
Абсолютно гарантированно – никак. Весь вопрос в том, какая степень точности вас устроит.
Это всё не про то
Синхронизируете время на каждом из серверов и запускаете
я не знаю, что у вас за задача, но возможно вы не с той стороны подходите к вопросу. Одновременно и периодически что-то делать на распределенной системе – это звучит как одно из решений какой-то проблемы, но не факт, что самое лучшее.
Какой-то сервер может задержаться и пропустить момент...похоже с делением и остатками времени надо вычисления следующего момента делать
Та не, возможно, делал так, но пришлось перейти на servertimestamp чтоб не зависить от клиентской части - была большая морока с синхронизацией клиентов при проблеме задержки интернета при заявке - ответе и куча костылей
В контексте распределенных систем это вобше не решение, это ошибка. @YK1000YK скажите изначальную проблему, очень похоже на типичную XY
Типа был timstamp_start Теперь есть timstamp_now (timstamp_now-timestamp_start )*1000/15сек определяем сколько было раз уже По остатку делаем ожидание Await Future.delay(ост милисек)
И в чем проблема?
А вычисление периуда когда будет происходить, после выполнения? Как избежать накопления ошибки из за времени выполнения DateTime.now()?
Ну вот начал проговаривать проблему и сам понял решение Не выговорился то не решился бы вопрос ещё какое-то время
Когда выполнился предыдущий раз определяется сколько детей и ставиться на ожидание
Datetime now должно быть только у клиента и пох что у хитрожопого дата на 2 года назад - при заявке от него идет очередной server timestamp для валидации
Т.е. если таска будет выполняться больше чем промежуток то все сломается. Тогда вобше лучше используете periodic там реализация точнее чем эта реализация
Если выполняться будет дольше чем 15сек а 19 сек то просто пропускаться будут иногда эти точки выполнения. Например через раз выполняться будет иногда
Вроде по моем исполнении периодичность никогда не собьеться, Тесть абсолютно всегда в ХХ:15 ХХ:30 ХХ:45 ХХ:00 На четвертях секундного циферблата
Т.е. точность уже не важна, тогда нормально будет почти что угодно. Вобше рекомендую все таки вернуться к изанчальной проблеме и найти другое решение, т.к. полагатся на синхронизацию времени между разными устройствами рассчитывать не стоит
Точность в тысячных долях секунды уже от ресурсов каждого сервера зависит. Тут никак точнее не сделать
Прекрасно, крон и фильтр приходящих заявок, только вот проблема - из-за сети человек может и выслал заявку за пол секунды до конца, но она пришла после этого
Они каждый раз datetime now получают и опираясь на это всё точно получиться. Ошибка не накопиться
DateTime.now() - источник накопления ошибки, если его убрать может что то и нормальное будет, но там есть другой подвох который я забыл
Если чел отправил заявку в 14,9сек А пришла в 15,1сек То по результатам работы в 15,0 он получит ответ
Может быть каким угодно
Datetime now кто даёт?
Клиентское устройство
Где источник надёжного текущего времени?
честно, не помню) в любом случае - если вам надо что то выполнять иногда - в Timer.pereodic решены все проблемы. А выполнять что то одновременно на нескольких серверах - принцпиально не возможно, банально из за задержек сети и еще множества причин
Обсуждают сегодня