नेटवर्क मॉडल
- Quake 3 का नेटवर्क मॉडल इंजन के सबसे सुरुचिपूर्ण हिस्सों में से एक है, जो यह रेखांकित करता है कि तेज़ वातावरण में पहली ट्रांसमिशन में जो जानकारी प्राप्त नहीं हुई, उसे दोबारा भेजना उपयोगी नहीं होता।
- यह UDP/IP का उपयोग करता है, और TCP/IP की reliable transmission latency पैदा करती है, इसलिए इसका उपयोग नहीं किया जाता।
- नेटवर्क स्टैक दो परस्पर अनन्य लेयरों तक विस्तारित है: pre-shared key का उपयोग करने वाला encryption और पहले से गणना की गई Huffman key का उपयोग करने वाला compression.
- सर्वर-साइड पर UDP datagram का आकार न्यूनतम रखते हुए UDP की reliability की कमी की भरपाई करने वाला सिस्टम खास तौर पर उल्लेखनीय है।
आर्किटेक्चर
- क्लाइंट-साइड सरल है, और हर फ्रेम पर सर्वर को command भेजता है तथा game state update प्राप्त करता है।
- सर्वर को master game state हर क्लाइंट तक प्रसारित करनी होती है, और UDP packet loss को ध्यान में रखना पड़ता है।
- तीन मुख्य तत्व हैं: master game state, Netchannel के माध्यम से क्लाइंट के command का transmission, और 32 हालिया game state को circular array में सहेजने वाले snapshot.
स्नैपशॉट सिस्टम
- जब सर्वर क्लाइंट को update भेजता है, तो वह हमेशा master game state को क्लाइंट के अगले history slot में कॉपी करता है और अन्य snapshot से उसकी तुलना करता है।
- यदि कोई valid snapshot नहीं है, तो पूरे update को बनाने के लिए "dummy snapshot" का उपयोग किया जाता है।
- जब क्लाइंट यह पुष्टि करता है कि उसे पिछला update मिल गया है, तब केवल partial update भेजा जाता है।
- यदि packet loss होता है, तब भी वही प्रक्रिया लागू होती है, और पहले न पहुँची जानकारी तथा नई जानकारी को एक ही message में भेजा जाता है।
मेमोरी रेज़िलिएंस और C
- Quake3 introspection के बिना snapshot की तुलना करता है, और हर field की position को array और preprocessor directive के माध्यम से पहले से कॉन्फ़िगर किया जाता है।
netField_t स्ट्रक्चर का उपयोग field की position और size को परिभाषित करने के लिए किया जाता है, और इसी के माध्यम से अंतर को नेटवर्क पर भेजा जाता है।
पूर्व-विभाजन
- NetChannel मॉड्यूल message को 1400-byte chunk में बाँटकर भेजता है, जिससे router को packet fragmentation करने की आवश्यकता नहीं पड़ती।
- router fragmentation महँगी पड़ती है, क्योंकि नेटवर्क में प्रवेश करते समय packet को रोकना पड़ता है, और बाहर निकलते समय सभी fragment का इंतज़ार करना होता है।
reliable और unreliable संदेश
- snapshot सिस्टम नेटवर्क में खोए हुए UDP datagram की भरपाई करता है, लेकिन कुछ message और command ऐसे होते हैं जिन्हें हर हाल में पहुँचना चाहिए।
- इस तरह की गारंटी NetChannel के माध्यम से abstract की जाती है।
1 टिप्पणियां
Hacker News राय