Myślę, że to na pewno nie OK synchornize zegara w systemie . Użytkownik nie oczekuje, że dotkniesz ustawień systemu, a wiele systemów nawet na to nie pozwala.
Wystarczy mieć korelację, aby przekonwertować znacznik czasu z zegara jednej strony na zegar drugiej strony. Z drugiej strony potrzebujesz, aby ta korelacja była dość precyzyjna, powiedzmy co najmniej do setnej sekundy, jeśli chcesz użyć jej do przewidywania pozycji graczy. Zegar systemowy nigdy nie będzie tak dobrze skorelowany między losowymi maszynami. Dlatego powinieneś sam ustalić korelację, używając pewnej odmiany motywu NTP , prawdopodobnie osadzonej w innych wiadomościach w celu zachowania przepustowości sieci.
Podstawową ideą może być to, że z każdym wysłanym pakietem wysyłany jest znacznik czasu oraz numer sekwencji i znacznik czasu, gdy otrzymałeś ostatni pakiet z drugiej strony. Na tej podstawie obliczasz objazd: Na przykład, jeśli pakiet Q mówi, że został wysłany o wartości 1000, a pakiet P został odebrany o wartości 500, niż biorąc pod uwagę, że wysłałeś pakiet P o wartości 0 i otrzymujesz Q o wartości 800, podróż w obie strony wynosi (800 - 0 ) - (1000 - 500) = 300. Nie ma sposobu na poznanie asymetrii, więc po prostu zakładasz, że pakiet zabiera połowę (150) tyknięć w dowolnym kierunku. I ten zdalny znacznik czasu wyprzedza lokalny o 1000 - (800 - 150) = 350 tyknięć. Podróż w obie strony będzie się różnić. Jeśli przyjmiesz, że zegar jest dość precyzyjny, powinieneś użyć długoterminowej średniej korelacji.
Zauważ, że nie chcesz również używać zegara systemowego dla zegara. Mogą zostać zsynchronizowane w połowie drogi, co zepchnie cię z toru. Powinieneś używać clock(CLOCK_MONOTONIC)
na Unixie lub GetTickCount
Windowsie (nie jestem pewien, jak te interfejsy API są teraz opakowane w Javie lub Pythonie).
Uwaga: Opcja SO_TIMESTAMP
gniazda (patrz gniazdo (7) wspomniane przez ott - w komentarzu do pytania) byłaby przydatna do oddzielenia efektu opóźnienia pętli zdarzeń, która odbiera pakiety. To, czy warto wysiłek, zależy od tego, jak dobrej precyzji potrzebujesz.