6

मेरे पास सर्वर ऑब्जेक्ट्स हैं जिनके पास संबंधित क्लाइंट ऑब्जेक्ट्स हैं। सिंक में रखा जाने वाला डेटा सर्वर ऑब्जेक्ट की कुंजी/मान शब्दकोश के अंदर है। क्लाइंट ऑब्जेक्ट को अलग ऑब्जेक्ट्स के साथ सिंक में रखने के लिए, मैं चाहता हूं कि सर्वर प्रत्येक ऑब्जेक्ट के लिए प्रत्येक फ्रेम को कुंजी/मूल्य शब्दकोश भेज दें।क्या डेटा-स्ट्रक्चर/एल्गोरिदम मुझे कम से कम बिट्स का उपयोग करके कुंजी/मूल्य शब्दकोशों की एक सूची भेजने की अनुमति देगा?

डेटा-संरचना/एल्गोरिदम मुझे कम से कम बिट्स का उपयोग करके कुंजी/मूल्य शब्दकोशों की एक सूची भेजने की अनुमति देगा?

बोनस बाधा 1: प्रत्येक प्रकार के ऑब्जेक्ट के लिए, कुछ चाबियों के मान दूसरों की तुलना में अधिक बार बदलते हैं। बोनस बाधा 2: सर्वर पक्ष पर मेमोरी उपयोग अपेक्षाकृत महंगा है।

+0

आप कृपया एक जवाब स्वीकार करेंगे? (यह देखते हुए कि आप अभी भी निश्चित रूप से यात्रा करते हैं।) – corazza

उत्तर

4

आपको संपूर्ण शब्दकोश भेजने की आवश्यकता नहीं है। इसके बजाय, बस क्या बदल गया है भेजें।

आपको इसे प्रत्येक फ्रेम भेजने की आवश्यकता नहीं है। इसके बजाय, इसे नियमित अंतराल पर भेजें, जिसमें फ्रेम दर से कोई लेना देना नहीं है।

एक महत्वपूर्ण विचार दूसरी बात में ध्यान में रखना है कि ग्राहकों खेल राज्य में परिवर्तन की भविष्यवाणी कर सकते हैं - खेल पर जा सकते हैं सर्वर से जानकारी प्राप्त करने के बीच में नकली होने के लिए, और उसके बाद ही सही करने के लिए है इसके बाद गलतियों को सर्वर से आधिकारिक जानकारी प्राप्त होती है।

0

कोई विशेष डेटा संरचना या एल्गोरिदम नहीं हैं। सीमित डेटा स्थानांतरित करना पर्याप्त है।

उदाहरण डेटा (एक सी स्ट्रिंग के रूप में, ध्यान दें "\\" जो वास्तव में एक "\" है): key1;value1;key2;value2;key3\\;with delimiter inside it;value3;\0

आप चुन सकते हैं चाबियाँ आप भेजने के लिए, यह * पढ़ना और लिखना आसान है **, थोड़ा स्मृति लेता है और यहां तक ​​कि संपीड़ित भी किया जा सकता है (क्योंकि यह केवल बाइट्स की एक धारा है)।

* -पढ़ें

:

while(peekbyte() != 0) 
{ 
    key = readuntil(';'); // checks if previous byte isn't "\" while looking for char. 
    value = readuntil(';'); 
    add(key, value); 
} 

** - लिखें:

foreach(key in keylist) 
{ 
    write(replace(';', '\\;', key)); 
    write(replace(';', '\\;', dict[ key ])); 
} 
write('\0');