ฉันคิดว่ามันเป็นมั่นเหมาะไม่ตกลงเพื่อsynchornizeนาฬิกาในระบบ ผู้ใช้ไม่ได้คาดหวังให้คุณสัมผัสการตั้งค่าระบบและหลาย ๆ ระบบจะไม่ยอมให้คุณทำ
สิ่งที่คุณต้องมีคือการมีความสัมพันธ์ในการแปลงเวลาจากนาฬิกาด้านหนึ่งไปเป็นนาฬิกาอีกด้าน ในอีกทางหนึ่งคุณต้องมีความสัมพันธ์นี้ค่อนข้างแม่นยำพูดอย่างน้อยหนึ่งร้อยวินาทีถ้าคุณต้องการใช้มันเพื่อทำนายตำแหน่งผู้เล่น นาฬิการะบบจะไม่สัมพันธ์กันระหว่างเครื่องสุ่ม ดังนั้นคุณควรสร้างความสัมพันธ์ด้วยตัวคุณเองโดยใช้ชุดรูปแบบบางอย่างในธีมNTPซึ่งอาจฝังอยู่ในข้อความอื่นของคุณเพื่อประหยัดแบนด์วิดท์เครือข่าย
แนวคิดพื้นฐานอาจเกิดจากแต่ละแพ็กเก็ตที่คุณส่งการประทับเวลาคุณส่งและหมายเลขลำดับของและการประทับเวลาเมื่อคุณได้รับแพ็กเก็ตล่าสุดจากอีกด้านหนึ่ง จากนี้คุณคำนวณไปกลับ: ตัวอย่างเช่นถ้าแพ็คเก็ต Q บอกว่ามันถูกส่งที่ 1,000 และได้รับแพ็กเก็ต P 500 ที่มากกว่าที่คุณส่งแพ็กเก็ต P ที่ 0 และได้รับ Q ที่ 800 การเดินทางไปกลับคือ (800 - 0 ) - (1,000 - 500) = 300. ไม่มีวิธีรู้ assymetry ดังนั้นคุณแค่คิดว่าแพ็คเก็ตนั้นใช้เวลาครึ่งหนึ่ง (150) เห็บในทิศทางใดทิศทางหนึ่ง และการประทับเวลาระยะไกลนั้นอยู่ข้างหน้าของท้องถิ่น 1,000 - (800 - 150) = 350 เห็บ การเดินทางไปกลับจะแตกต่างกัน หากคุณคิดว่านาฬิกามีความแม่นยำพอสมควรคุณควรใช้ความสัมพันธ์เฉลี่ยในระยะยาว
โปรดทราบว่าคุณไม่ต้องการใช้นาฬิการะบบสำหรับนาฬิกาเช่นกัน พวกเขาอาจได้รับการซิงโครไนซ์ตรงกลางทำให้คุณหลุด คุณควรใช้clock(CLOCK_MONOTONIC)
กับ Unix หรือGetTickCount
Windows (ไม่แน่ใจว่า API เหล่านั้นถูกห่อใน Java หรือ Python ในขณะนี้)
หมายเหตุ: SO_TIMESTAMP
ตัวเลือกซ็อกเก็ต (ดูซ็อกเก็ต (7) ที่กล่าวถึงโดย ott-- ในความคิดเห็นเกี่ยวกับคำถาม) จะเป็นประโยชน์สำหรับการแยกผลกระทบของเวลาแฝงของลูปเหตุการณ์ที่ได้รับแพ็คเก็ต ไม่ว่าจะคุ้มค่าหรือไม่นั้นขึ้นอยู่กับความแม่นยำที่คุณต้องการ