Недавно я взял урок на один час, и этого было недостаточно, но я постараюсь свести его к минимуму, чтобы вы указали правильное направление.Приготовьтесь к небольшой алгебре.
Давайте сравним время в соответствии с сервером.Пусть c равняется времени в соответствии с клиентом.Пусть d = s - c.d - это то, что добавляется к времени клиента, чтобы скорректировать его к времени сервера, и это то, для чего мы должны решить.
Сначала мы отправляем пакет с сервера клиенту с отметкой времени.Когда этот пакет получен на клиенте, он сохраняет разницу между данной временной меткой и своими собственными часами как t1.
Затем клиент отправляет пакет на сервер со своей собственной временной меткой.Сервер отправляет разность между отметкой времени и собственными часами обратно клиенту как t2.
Обратите внимание, что оба t1 и t2 включают в себя «время прохождения» t пакета плюс разницу во времени между двумя часами d,Предполагая на данный момент, что время прохождения одинаково в обоих направлениях, теперь у нас есть два уравнения с двумя неизвестными, которые могут быть решены:
t1 = t - d
t2 = t + d
t1 + d = t2 - d
d = (t2 - t1)/2
Хитрость заключается в том, что время в пути не всегда постоянное,что подтверждается вашими пингами от 50 до 200 мс.Оказывается, наиболее точно использовать временные метки с минимальным временем пинга.Это потому, что ваше время пинга является суммой задержки «голого металла» плюс любые задержки, затраченные на ожидание в очередях маршрутизатора.Время от времени удачный пакет проходит без каких-либо задержек в очереди, поэтому вы используете это минимальное время как самое повторяемое время.
Также имейте в виду, что часы работают с разной скоростью.Например, я могу сбросить свой компьютер дома до миллисекунды, а через день он будет медленным на 8 секунд.Это означает, что вы должны постоянно корректировать d.Вы можете использовать наклон различных значений d, вычисленных с течением времени, чтобы рассчитать ваш дрейф и компенсировать его между измерениями, но это выходит за рамки ответа здесь.
Надеюсь, что поможет вам указать правильное направление.