Синхронизация времени

Для многих алгоритмов вам нужно, чтобы часы были синхронизированы между клиентом и сервером. Mirror делает это автоматически за вас.

Чтобы получить текущее время, используйте этот код:

double now = NetworkTime.time;

Он вернет одно и то же значение на клиенте и серверах. Он начинается с 0 при запуске сервера. Обратите внимание, что время является типом double и никогда не должно быть приведено к типу float. Приведение этого значения к значению float означает, что через некоторое время часы потеряют точность:

  • через 1 день точность снижается до 8 мс

  • через 10 дней точность снижается до 62 мс

  • через 30 дней точность снижается до 250 мс

  • через 60 дней точность снижается до 500 мс

Mirror также будет рассчитывать RTT(Время приема-передачи) как видно из приложения:

double rtt = NetworkTime.rtt;

Вы можете измерить точность.

double time_standard_deviation = NetworkTime.timeSd;

например, если это возвращает значение 0,2, это означает, что измерения времени колеблются вверх и вниз примерно на 0,2 с

Сбои в работе сети компенсируются сглаживанием значений с помощью EMA. Вы можете настроить, как часто вы хотите, чтобы ping отправлялся:

NetworkTime.PingFrequency = 2;

Вы также можете настроить, сколько результатов проверки связи будет использоваться при расчете:

NetworkTime.PingWindowSize = 10;

Last updated