1 पॉइंट द्वारा GN⁺ 2024-11-24 | 1 टिप्पणियां | WhatsApp पर शेयर करें

नेटवर्क मॉडल

  • 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 टिप्पणियां

 
GN⁺ 2024-11-24
Hacker News राय
  • यह लेख बहुत दिलचस्प है, और पहले के लेख भी ऐसे ही थे। लेकिन आजकल का काम इतना उबाऊ है कि हॉबी प्रोजेक्ट्स के लिए ऊर्जा नहीं बचती।
  • "Isochronous" शब्द मैंने पहली बार FireWire के आने पर सुना था, और यह UDP के उपयोग के औचित्य के संदर्भ में आया था। आज भी यह USB/Thunderbolt स्पेसिफिकेशन का एक महत्वपूर्ण हिस्सा है।
  • सीरीज़ के पहले लेख का लिंक: https://fabiensanglard.net/quake3/index.php
  • latency prediction और correction दिलचस्प हैं, और इसमें जटिल operational transform (OT) का उपयोग नहीं होता। यह ज्यादा सरल है, और shared state को collaborative editing document की जगह एक स्वतंत्र source of truth चाहिए होता है, जिससे development तेज़ होता है और performance भी बेहतर मिलती है।
  • मूल Q3A client का network code LAN पर अच्छा काम करता था, लेकिन remote play में latency के प्रति संवेदनशील था। Quake Live में दिलचस्प बदलावों में से एक remote play के लिए अपडेट किया गया network code था। समय के साथ इंटरनेट कनेक्शन भी कुल मिलाकर बेहतर हुए हैं।
  • लगता है साइट HN Hug of Death झेल रही है: <कनेक्शन का समय समाप्त हो गया>
  • शनिवार की सुबह धीरे-धीरे माते पीते हुए पढ़ने के लिए यह बढ़िया लेख है। जीवन के छोटे सुखों में से एक।
  • प्रश्न: क्या real-time game protocol के आधुनिक approaches सीखने के लिए कोई संसाधन हैं?
  • शायद snapshot ID number भी client को भेजा जाता है और verify किया जाता है?
  • क्या अब भी कोई bulletproof open source middleware मौजूद है?