मैं उन विभिन्न तरीकों का मूल्यांकन करने में रुचि रखता हूं जो नेटकोड एक गेम इंजन "हुक इन" कर सकते हैं। मैं अब एक मल्टीप्लेयर गेम डिजाइन कर रहा हूं, और अब तक मैंने यह निर्धारित किया है कि मुझे नेटवर्क सॉकेट को संभालने के लिए एक अलग धागा है, बाकी इंजन से अलग है जो ग्राफिक्स लूप और स्क्रिप्टिंग को संभालता है।
मेरे पास नेटवर्क गेम को पूरी तरह से सिंगल-थ्रेडेड बनाने के लिए एक संभावित तरीका था, जो यह है कि गैर-ब्लॉकिंग सॉकेट्स का उपयोग करके प्रत्येक फ्रेम को रेंडर करने के बाद नेटवर्क की जांच करें। हालाँकि, यह स्पष्ट रूप से इष्टतम नहीं है क्योंकि फ़्रेम को रेंडर करने में लगने वाला समय नेटवर्क लैग में जोड़ा जाता है: नेटवर्क पर आने वाले संदेशों को तब तक इंतजार करना चाहिए जब तक कि वर्तमान फ्रेम रेंडर (और गेम लॉजिक) पूरा नहीं हो जाता। लेकिन, कम से कम इस तरह से गेमप्ले अभी भी कम या ज्यादा सुचारू रहेगा।
नेटवर्किंग के लिए एक अलग थ्रेड होने से खेल नेटवर्क के लिए पूरी तरह से उत्तरदायी है, उदाहरण के लिए यह सर्वर से एक राज्य अद्यतन प्राप्त होने पर तुरंत एसीके पैकेट वापस भेज सकता है। लेकिन मैं गेम कोड और नेटवर्क कोड के बीच संवाद करने के सर्वोत्तम तरीके के बारे में थोड़ा भ्रमित हूं। नेटवर्किंग थ्रेड प्राप्त पैकेट को एक कतार में धकेल देगा, और गेम थ्रेड कतार से उसके लूप के दौरान उचित समय पर पढ़ेगा, इसलिए हमने इस अप-टू-फ़्रेम विलंब से छुटकारा नहीं पाया है।
इसके अलावा, ऐसा लगता है कि मैं चाहता हूं कि थ्रेड जो पैकेट भेजने के लिए संभालता है वह पाइप से नीचे आने वाले पैकेट के लिए अलग से जांच कर रहा है, क्योंकि यह बीच में होने पर एक को भेजने में सक्षम नहीं होगा आने वाले संदेशों की जाँच कर रहा है। मैं select
या इसी तरह की कार्यक्षमता के बारे में सोच रहा हूं ।
मुझे लगता है कि मेरा सवाल है, सबसे अच्छा नेटवर्क जवाबदेही के लिए गेम डिजाइन करने का सबसे अच्छा तरीका क्या है? स्पष्ट रूप से क्लाइंट को सर्वर से जितनी जल्दी हो सके उपयोगकर्ता इनपुट भेजना चाहिए, इसलिए मैं गेम लूप के अंदर, इवेंट प्रोसेसिंग लूप के तुरंत बाद नेट-सेंड कोड आ सकता है। क्या इसका कोई मतलब है?