Каким образом сервер может отслеживать одностороннюю задержку (latency) и временное отклонение (offset) клиента, учитывая возможную разницу в скорости хода часов на сервере и у клиента?
Для измерения односторонней задержки и временного сдвига клиента на UDP сервере можно использовать протокол Network Time Protocol (NTP). Вот пример настройки UDP сервера для измерения этих параметров: 1. Установить и настроить NTP сервер на вашем UDP сервере. Множество открытых и бесплатных NTP серверов доступны в Интернете для синхронизации времени. 2. Отправить NTP запросы клиентам и записать время отправки запроса и получения ответа. 3. Рассчитать одностороннюю задержку клиента, вычитая время отправки запроса из времени получения ответа. 4. Сравнить время, полученное от клиента, с временем сервера и рассчитать временное отклонение. 5. Учитывать разницу в скорости хода часов на сервере и у клиента при анализе результатов. В итоге, настройка UDP сервера для измерения односторонней задержки и временного отклонения клиента может быть осуществлена с помощью NTP протокола и анализа времени отправки и получения сетевых запросов.
То что причина в часах понятна. Я вижу тут несколько решений:
1. Синхронизация часов клиента. Возможно какой-нибудь NTP поможет (не работал с ним). Но синхронизировать надо только клиента, т.к. если сервер затронет, то и других клиентов тоже
2. Использовать глобальный синхронизатор (время по gps синхронизировать)
3. Делать бенчмарки + вычисления
Насчет 3 -
1. Предполагаем, что в обе стороны время одинаковое
2. Делаем несколько замеров (например, можно каждые 100 пакетов)
3. Рассчитываем время как avg / 2 , где avg - это среднее время отправки в обе стороны