2012-12-20 23 views
7

संशोधित प्रश्न:क्या कोई डीकोडर्स/एनकोडर्स को बेहतर समझा सकता है?

ठीक है तो मैं इसे अपने स्वयं के कस्टम गेम में शामिल करने की कोशिश कर रहा हूं। मैं नेटटी सर्वर और क्लाइंट कनेक्ट करने की प्रक्रिया को समझता हूं। मैं यह भी समझता हूं कि डीकोडर्स और एन्कोडर्स सिद्धांत में कैसे काम करते हैं। लेकिन यहां मैं अभी भी समझना चाहता हूं।

मेरे सर्वर प्रक्रिया:

Server boots up -> Client starts 
Client requests connection -> Server accepts 
Server instructs client connection is good -> Client continues to the login screen 
(Ignoring any type of security protocol) 
Client sends username and password over Channel 
Server gets username and password checks it in the database or file 
Server pushes -> yes or no 
if yes Server sends player stats 
if no Server creates new player 

है कि इस प्रक्रिया मैं जानता हूँ कि मैं इतना है कि हर कोई पास वास्तविक समय में अद्यतन देख रहा है एक ऐसी दुनिया हैंडलर की आवश्यकता के बाद। अब मुझे नहीं पता कि इस सामान के लिए डिकोडर्स को कैसे कार्यान्वित किया जाए।

मैं वास्तव में कुछ उदाहरणों को देखना चाहता हूं कि उन्हें कैसे लागू किया गया है। अधिमानतः कुछ निर्देशों के साथ .... नोट: मैं यह नहीं कह रहा हूं कि मेरे लिए इस मुद्दे को हल करें लेकिन मुझे दिखाएं कि विभिन्न जानकारी कैसे संभालें। सर्वोत्तम अभ्यास और मानकों कृपया ....

+0

मैं इस पर जोड़ना चाहता हूं कि मैं नेटटी एपीआई का संदर्भ दे रहा हूं और यह वास्तव में डिकोडर्स और एन्कोडर्स का उपयोग कैसे करता है ... मुझे लगता है कि गाइड वास्तव में आपके अपने डिकोडर्स को लागू करने के बारे में किसी भी विवरण में नहीं जाता है और कैसे .. जैसा कि मैंने पिछली बार कहा था, मैं भी दोहराना चाहता हूं। मैं थोड़ी देर के लिए इस पर अपने सिर को तेज़ कर रहा हूं और मुझे यह समझ में नहीं आ रहा है ... – Maxs728

उत्तर

7

मैं आपके विचार के लिए this tutorial सबमिट करता हूं।

आपको दूर करने की कोशिश नहीं कर रहा है, लेकिन मैंने इन सटीक रहस्यों को समझाने की कोशिश की।

यह श्रृंखला में दूसरा है, तो आप read the first one भी चाह सकते हैं।

+0

मैं अभी भी आपकी सामग्री पढ़ रहा हूं और बाद में निर्णय के साथ वापस आऊंगा .... – Maxs728

+0

मैंने इसमें सबकुछ पढ़ा और यद्यपि हां यह बहुत उपयोगी जानकारी है, यह बहुत सैद्धांतिक था और कोड उदाहरणों और इस तरह की चीजों पर बहुत हाथ नहीं था ... हालांकि यह कैसे काम करता है इस पर एक बड़ी समझ देता है। धन्यवाद! लेकिन मुझे अभी भी एक प्रमुख सवाल के साथ छोड़ दिया गया है .... आप अपने डिकोडर्स/एन्कोडर्स को कैसे कार्यान्वित करते हैं? – Maxs728

3

लोग अपने स्वयं के एन्कोडर्स/डिकोडर्स (कोडेक्स) लिखते हैं क्योंकि नेटटी एक अनुप्रयोग स्तर प्रोटोकॉल को लागू नहीं करता है और परिभाषित नहीं करता है, ताकि आप अपना स्वयं का प्रोटोकॉल लिख सकें। आपके द्वारा परिभाषित कोडेक्स का सेट एक प्रोटोकॉल है जो उदाहरण के लिए स्ट्रिंग आधारित और कुछ बाइनरी प्रारूप प्रोटोबफ के बीच कुछ भी हो सकता है। नेटटी आपकी सुविधा के लिए कोडेक्स प्रदान करता है (आपके द्वारा उपयोग किए जाने वाले उदाहरण उदाहरण हैं)।

मुझे लगता है कि स्ट्रीम को जल्दी से कटऑफ होने से रोकना है?

आमतौर पर, जब आप भेज रहे हैं/प्राप्त धाराओं, आप विघटित करने के लिए कि एक निश्चित लंबाई मात्रा (बुलाया फ्रेम) पर की जरूरत है। एक लोकप्रिय दृष्टिकोण, जिसे इंटरनेट की सुबह से उपयोग किया गया है, धारा से पढ़ने वाले पहले फ़ील्ड के रूप में खंड की लंबाई (आमतौर पर एक 4 बाइट int) का उपयोग करना है। तो यदि पहली int का मान 20 है तो आप जानते हैं कि निम्नलिखित 20 बाइट्स पेलोड (डेटा) हैं, और 21 वीं बाइट दूसरी लंबाई का पहला बाइट है। इस दृष्टिकोण का लाभ यह है कि यह परिवर्तनीय लंबाई के भाग की अनुमति देता है। लेकिन आप इस तक सीमित नहीं हैं। उदाहरण के लिए, यदि आप एक प्रोटोकॉल लिखने की योजना बनाते हैं जो पूर्वनिर्धारित लंबाई (पैडिंग के साथ) के साथ स्ट्रिंग का उपयोग करता है तो आप इसके लिए उचित नेटटी वर्तमान कोडेक्स का उपयोग या लिख ​​सकते हैं।

एक बार, मैं तीन डिकोडर के साथ एक प्रोटोकॉल है जो इस क्रम में प्रदर्शन करेंगे कार्यान्वित:

  1. एक धारा प्राप्त करते हैं और लंबाई उपसर्ग के फ्रेम में यह विघटित;
  2. प्रत्येक फ्रेम को एक स्ट्रिंग में कनवर्ट करें;
  3. स्ट्रिंग को एक पूर्वनिर्धारित जावा ऑब्जेक्ट में कनवर्ट करने के लिए जैक्सन लाइबेरे का उपयोग करें।

एन्कोडर्स केवल वही संचालन करेंगे, लेकिन पीछे की तरफ। दुर्भाग्यवश, मैंने मूल कोड खो दिया है, लेकिन मैं जल्द ही इसे फिर से लिखूंगा।

लेकिन यह कैसे धारा को पता है कि धारा एक स्ट्रिंग या पूर्णांक के की एक श्रृंखला या डबल्स की एक श्रृंखला है? आप यह कैसे कहते हैं कि अंतर सवाल है?

संक्षिप्त उत्तर: यह नहीं पता। आपको कोडेक्स में इस जानकारी को एन्कोड करना होगा। उदाहरण के लिए, आप एक ऑडोडोड का उपयोग पेलोड में पहले फ़ील्ड के रूप में कर सकते हैं जो कहता है कि पेलोड स्ट्रिंग्स, डबल्स, इनट्स या दोनों के किसी भी संयोजन हैं।

असल में, नेटटी एक स्ट्रीम प्रदान करता है और आप जितना चाहें डीकोड करने के लिए स्वतंत्र होते हैं। उदाहरण के लिए, यदि आप लंबी श्रृंखला (8 बाइट्स) की श्रृंखला पढ़ रहे हैं तो आप एक कोडेक लिखने जा रहे हैं जो स्ट्रीम से एक समय में 64 बाइट्स पढ़ता है क्योंकि प्रत्येक एक लंबे समय का प्रतिनिधित्व करता है। नेटटी कोडेक्स आउट-ऑफ-बॉक्स प्रदान करता है ताकि आपको हर बार पहिया को फिर से शुरू करने की आवश्यकता न हो।

+0

धन्यवाद जो समझ में आता है और इसे थोड़ा सा साफ़ करता है ... पट्टा थोड़े से मुझे यह बताने देता है कि मेरे पास यह कैसे काम करता है इसका सही प्रभाव था ... – Maxs728