Ben kesinlikle olduğunu düşünüyorum değil Tamam synchornize saati sisteminde . Kullanıcı sistem ayarlarına dokunmanızı beklemez ve birçok sistem bile izin vermez.
İhtiyacınız olan tek şey, zaman damgasını bir tarafın saatinden diğer tarafın saatine dönüştürmek için bir korelasyona sahip olmaktır. Öte yandan, eğer oyuncu pozisyonlarını tahmin etmek için kullanmak istiyorsanız, bu korelasyonun oldukça hassas olması gerekir, en azından saniyenin yüzde birine kadar. Sistem saati , rastgele makineler arasında bu kadar iyi bir korelasyon olmayacaktır. Dolayısıyla, ağ bant genişliğini korumak için muhtemelen diğer iletilerinizde gömülü olan NTP temasında bazı varyasyonlar kullanarak korelasyonu kendiniz kurmalısınız.
Temel fikir, gönderdiğiniz her zaman damgası ile onu gönderdiğiniz zaman damgası ve diğer taraftan son paketi aldığınızda sıra numarası ve zaman damgası olabilir. Buradan gidiş dönüşü hesaplarsınız: Örneğin, paket Q 1000'de gönderildiğini ve paket P 500'de alındığını söylüyorsa, 0'da paket P gönderdiğinizde ve 800'de Q aldığınızdan, gidiş dönüş (800-0) olur. ) - (1000 - 500) = 300. Asimetri bilmenin bir yolu yoktur, bu yüzden paketin her iki yönde yarım (150) keneler aldığını varsayarsınız. Ve bu uzak zaman damgası 1000 - (800 - 150) = 350 keneyle yerelin önünde. Gidiş-dönüş değişecektir. Saatin makul derecede hassas olduğunu varsayarsanız, korelasyonun uzun vadeli bir ortalamasını kullanmalısınız.
Saat için sistem saatini de kullanmak istemediğinizi unutmayın. Yarı yolda yeniden senkronize edilebilirler ve sizi yoldan çıkarabilirler. Sen kullanmalıdır clock(CLOCK_MONOTONIC)
Unix veya GetTickCount
(değil emin bu API'ler şu anda Java veya Python sarılmış nasıl) Windows üzerinde.
Not: SO_TIMESTAMP
Soket seçeneği ( soru üzerine yorumda ott- tarafından belirtilen sokete (7) bakın ) , paketleri alan olay döngüsünün gecikme etkisini ayırmak için yararlı olacaktır. Çabaya değip değmeyeceği, ihtiyacınız olan hassasiyete bağlıdır.