मैं अपने द्वारा बनाए गए गेम में नेटवर्क मल्टीप्लेयर जोड़ रहा हूं। जब सर्वर क्लाइंट को अद्यतन पैकेट भेजता है, तो मुझे टाइमस्टैंप शामिल होता है ताकि ग्राहक जानता हो कि वह जानकारी कब मान्य है। हालांकि, सर्वर कंप्यूटर और क्लाइंट कंप्यूटर में उनके घड़ियों को अलग-अलग समय पर सेट किया जा सकता है (शायद कुछ ही सेकंड अंतर भी), इसलिए सर्वर से टाइमस्टैम्प को क्लाइंट के स्थानीय समय में अनुवादित करने की आवश्यकता है।नेटवर्क किए गए डिवाइसों के बीच समय अंतर मापना
तो, मैं सर्वर और क्लाइंट के बीच समय अंतर की गणना करने का सबसे अच्छा तरीका जानना चाहता हूं। वर्तमान में, क्लाइंट प्रारंभिक समय के दौरान सर्वर के समय के लिए सर्वर को पिंग करता है, जब अनुरोध भेजा गया था और जब इसका उत्तर दिया गया था, तो यह ध्यान में रखता है, और अनुमान लगाता है कि टाइम स्टैंप यात्रा के साथ लगभग आधा रास्ते उत्पन्न हुआ था। ग्राहक इन परीक्षणों में से 10 भी चलाता है और औसत लेता है।
लेकिन, समस्या यह है कि मुझे कार्यक्रम के दोहराए गए रनों पर अलग-अलग परिणाम मिल रहे हैं। 10 के प्रत्येक सेट के भीतर, प्रत्येक माप शायद ही कभी 400 मिलीसेकंड से अधिक हो जाता है, जो स्वीकार्य हो सकता है। लेकिन अगर मैं कार्यक्रम के प्रत्येक भाग के बीच कुछ मिनट इंतजार करता हूं, तो परिणामी औसत 2 सेकंड तक असहमत हो सकते हैं, जो स्वीकार्य नहीं है।
क्या दो नेटवर्क वाले उपकरणों की घड़ियों के बीच अंतर जानने का कोई बेहतर तरीका है? या क्या मेरे सटीक परिणामों को उत्पन्न करने के लिए मेरे एल्गोरिदम को ट्विक करने का कम से कम एक तरीका है?
विवरण जो प्रासंगिक हो सकता है या नहीं भी हो सकता है: डिवाइस आईपॉड टच ब्लूटूथ पर संचार कर रहे हैं। मैं पिंग्स को 50-200 मिलीसेकंड से कहीं भी माप रहा हूं। मैं उपयोगकर्ताओं को अपने घड़ियों को सिंक करने के लिए नहीं कह सकता। :)
अद्यतन: नीचे दिए गए उत्तरों की सहायता से, मैंने इसे संभालने के लिए एक उद्देश्य-सी कक्षा लिखी। मैंने इसे अपने ब्लॉग पर पोस्ट किया: http://scooops.blogspot.com/2010/09/timesync-was-time-sink.html
वाह! धन्यवाद! यही वही है जो मैं ढूंढ रहा हूं। यह मेरे लिए पूरी तरह से स्पष्ट नहीं है, फिर भी यह मेरी मूल विधि से बेहतर क्यों है (हालांकि मुझे विश्वास है कि यह है), लेकिन जब मैं इसे आज़माता हूं तो मैं यहां वापस पोस्ट करूंगा। मुझे नहीं लगता कि मुझे गेमिंग सत्र में डी को समायोजित करने की आवश्यकता होगी, लेकिन अगर मुझे आवश्यकता हो तो इसे करना मुश्किल नहीं होगा। एक बार फिर धन्यवाद! – whooops
यह वास्तव में अच्छी तरह से काम किया है। मैंने पाया कि यदि मैं हमेशा सबसे छोटा (यानी, सबसे नकारात्मक) टी 1 और टी 2 मान लेता हूं, तो यह सबसे छोटी चीजें लेने जैसा ही होता है, इसलिए यह सही ऑफसेट पर परिवर्तित होता है। मैं t1 = ग्राहक डाक टिकट है - सर्वर टिकट और t2 = सर्वर टिकट - ग्राहक टिकट इसके अलावा, मुझे पता चला है कि आईफोन सुंदर काफी बहाव! आधे घंटे के भीतर, दो उपकरणों के बीच वास्तविक ऑफसेट आधे सेकेंड तक बदल सकता है। मैंने इसे घड़ी कार्यक्रमों के साथ सत्यापित किया जो एनटीपी सर्वर से संपर्क करते हैं। – whooops
खुशी है कि यह आपके लिए सहायक था। –