আমি মনে করি এটি অবশ্যই সিস্টেমে ঘড়ির সাথে সংহত করা ঠিক নয় । ব্যবহারকারী আপনাকে সিস্টেম সেটিংস স্পর্শ করবে এমন প্রত্যাশা করে না এবং অনেকগুলি সিস্টেম আপনাকে এমনকি করতে দেয় না।
আপনার কেবলমাত্র টাইমস্ট্যাম্পকে একপাশের ঘড়ি থেকে অন্য পাশের ঘড়িতে রূপান্তর করার জন্য একটি পারস্পরিক সম্পর্ক থাকতে হবে। অন্যদিকে আপনার এই পারস্পরিক সম্পর্কটি বরং সুনির্দিষ্ট হতে হবে, যদি আপনি প্লেয়ারের অবস্থানের পূর্বাভাস দেওয়ার জন্য এটি ব্যবহার করতে চান তবে কমপক্ষে একটি সেকেন্ডের শতভাগকে বলুন। সিস্টেম ঘড়ি কখনও এলোমেলো মেশিনগুলির মধ্যে ভালভাবে সম্পর্কিত হতে পারে না । সুতরাং আপনাকে এনটিপি থিমের কিছু প্রকরণ ব্যবহার করে আপনার নিজের সম্পর্ক স্থাপন করতে হবে , সম্ভবত নেটওয়ার্ক ব্যান্ডউইদথ সংরক্ষণের জন্য আপনার অন্যান্য বার্তাগুলিতে এম্বেড করা।
প্রাথমিক ধারণাটি হ'ল প্রতিটি প্যাকেটের মাধ্যমে আপনি টাইমস্ট্যাম্প প্রেরণ করেছিলেন এবং যখন আপনি অন্য দিক থেকে শেষ প্যাকেটটি পেয়েছেন তখন এটি পাঠিয়েছেন এবং টাইমস্ট্যাম্পের সিকোয়েন্স নম্বর এবং টাইমস্ট্যাম্প। এ থেকে আপনি রাউন্ডট্রিপ গণনা করুন: উদাহরণস্বরূপ যদি প্যাকেট কিউ বলে যে এটি 1000 এ প্রেরণ করা হয়েছিল এবং প্যাকেট পি 500 পেয়েছিল, আপনি প্যাকেট পি 0 পাঠিয়েছেন এবং 800 এ কিউ পাচ্ছেন, রাউন্ড ট্রিপটি (800 - 0 ) - (1000 - 500) = 300. অ্যাসিমেট্রিটি জানার কোনও উপায় নেই, সুতরাং আপনি কেবল ধরে নিন যে প্যাকেটটি উভয় দিকের অর্ধেক (150) টিক নেয়। এবং সেই দূরবর্তী টাইমস্ট্যাম্পটি স্থানীয় - 1000 - (800 - 150) = 350 টিকি দ্বারা এগিয়ে। রাউন্ড ট্রিপ বিভিন্ন হবে। আপনি যদি ধরে নেন যে ঘড়িটি যুক্তিসঙ্গতভাবে সুনির্দিষ্ট হয় তবে আপনার সম্পর্কের দীর্ঘমেয়াদী গড় ব্যবহার করা উচিত।
দ্রষ্টব্য, আপনি ঘড়িটির জন্য সিস্টেম ঘড়িটি ব্যবহার করতে চান না। তারা আপনাকে মাঝপথে ফেলে দিয়ে পুনরায় সংক্রামিত হতে পারে। আপনার clock(CLOCK_MONOTONIC)ইউনিক্স বা GetTickCountউইন্ডোজে ব্যবহার করা উচিত (কীভাবে এই মুহুর্তে জাভা বা পাইথনগুলিতে এই API গুলি মোড়ানো রয়েছে তা নিশ্চিত নয়) not
দ্রষ্টব্য: SO_TIMESTAMPসকেট বিকল্প ( সকেট দেখুন ()) উট দ্বারা উল্লেখ করা হয়েছে - প্রশ্নে মন্তব্য করে) প্যাকেটগুলি প্রাপ্ত ইভেন্ট লুপটির বিলম্বের প্রভাবকে পৃথক করার জন্য কার্যকর হবে। আপনার প্রচেষ্টাটি কতটা যথাযথ নির্ভুলতার প্রয়োজন তা নির্ভর করে।