شروعات ڪندڙن لاءِ راندين ۾ نيٽ ورڪ ماڊل بابت

شروعات ڪندڙن لاءِ راندين ۾ نيٽ ورڪ ماڊل بابت
گذريل ٻن هفتن کان آئون پنهنجي راند لاءِ آن لائن انجڻ تي ڪم ڪري رهيو آهيان. ان کان اڳ، مون کي راندين ۾ نيٽ ورڪنگ جي باري ۾ ڪجھ به نه ڄاڻندو هو، تنهنڪري مون تمام گهڻو مضمون پڙهيو ۽ تمام گهڻو تجربا ڪيا ته سڀني تصورن کي سمجهڻ ۽ پنهنجي نيٽ ورڪنگ انجڻ کي لکڻ جي قابل ٿي.

هن رهنمائي ۾، مان توهان سان حصيداري ڪرڻ چاهيان ٿو مختلف تصورات جيڪي توهان کي سکڻ جي ضرورت آهي توهان جي پنهنجي گيم انجڻ لکڻ کان پهريان، انهي سان گڏ بهترين وسيلا ۽ آرٽيڪل انهن کي سکڻ لاء.

عام طور تي، نيٽ ورڪ آرڪيٽيڪچر جا ٻه مکيه قسم آهن: پير کان پير ۽ ڪلائنٽ سرور. هڪ پير کان پيئر (p2p) فن تعمير ۾، ڊيٽا ڪنهن به جوڙيل پليئرز جي وچ ۾ منتقل ڪئي ويندي آهي، جڏهن ته ڪلائنٽ-سرور آرڪيٽيڪچر ۾، ڊيٽا صرف پليئرز ۽ سرور جي وچ ۾ منتقل ڪئي ويندي آهي.

جيتوڻيڪ پير کان پير فن تعمير اڃا تائين ڪجهه راندين ۾ استعمال ڪيو ويندو آهي، ڪلائنٽ-سرور معيار آهي: اهو لاڳو ڪرڻ آسان آهي، هڪ ننڍڙي چينل جي چوٽي جي ضرورت آهي، ۽ ان کي ٺڳيء کان بچائڻ آسان بڻائي ٿو. تنهن ڪري، هن سبق ۾ اسان ڪلائنٽ-سرور آرڪيٽيڪچر تي ڌيان ڏينداسين.

خاص طور تي، اسان کي تمام گهڻي دلچسپي آهي آمريتي سرورز: اهڙين سسٽم ۾، سرور هميشه صحيح آهي. مثال طور، جيڪڏهن ڪو پليئر سوچي ٿو ته هو همراهن تي آهي (10, 5)، ۽ سرور کيس ٻڌائي ٿو ته هو (5، 3) تي آهي، ته پوءِ ڪلائنٽ کي گهرجي ته ان جي پوزيشن کي تبديل ڪري، جيڪو سرور طرفان ٻڌايو ويو آهي، ۽ نه. برعڪس مستند سرور استعمال ڪرڻ سان ٺڳي ڪندڙن کي سڃاڻڻ آسان بڻائي ٿو.

نيٽ ورڪ گيمنگ سسٽم جا ٽي مکيه حصا آهن:

  • ٽرانسپورٽ پروٽوڪول: ڪئين ڊيٽا کي ڪلائنٽ ۽ سرور جي وچ ۾ منتقل ڪيو ويو آهي.
  • ايپليڪيشن پروٽوڪول: ڇا منتقل ڪيو ويو آهي ڪلائنٽ کان سرور ڏانهن ۽ سرور کان ڪلائنٽ ڏانهن ۽ ڪهڙي شڪل ۾.
  • ايپليڪيشن منطق: ڪئين منتقل ٿيل ڊيٽا استعمال ڪيو ويندو آهي ڪلائنٽ ۽ سرور جي حالت کي اپڊيٽ ڪرڻ لاءِ.

هر حصي جي ڪردار ۽ انهن سان جڙيل چئلينجن کي سمجهڻ تمام ضروري آهي.

ٽرانسپورٽ پروٽوڪول

پهريون قدم سرور ۽ گراهڪن جي وچ ۾ ڊيٽا کي منتقل ڪرڻ لاء هڪ پروٽوڪول چونڊڻ آهي. ھن لاءِ ٻه انٽرنيٽ پروٽوڪول آھن: ٽي پي и يو ايس پي. پر توهان انهن مان هڪ جي بنياد تي پنهنجو ٽرانسپورٽ پروٽوڪول ٺاهي سگهو ٿا يا هڪ لائبريري استعمال ڪري سگهو ٿا جيڪو انهن کي استعمال ڪري ٿو.

TCP ۽ UDP جو مقابلو

ٻئي TCP ۽ UDP تي ٻڌل آهن IP. IP هڪ پئڪيٽ کي هڪ ذريعو کان وصول ڪندڙ ڏانهن منتقل ڪرڻ جي اجازت ڏئي ٿو، پر اهو ضمانت نٿو ڏئي ته موڪليو ويو پيڪٽ جلد يا دير سان وصول ڪندڙ تائين پهچندو، ته اهو گهٽ ۾ گهٽ هڪ ڀيرو ان تائين پهچندو، ۽ اهو پيڪيٽس جو سلسلو صحيح طور تي پهچي ويندو. حڪم. ان کان علاوه، هڪ پيڪٽ صرف ڊيٽا جي محدود مقدار تي مشتمل ٿي سگھي ٿو، قيمت طرفان ڏنل آهي ايم يو يو.

UDP صرف IP جي چوٽي تي هڪ پتلي پرت آهي. تنهن ڪري، اهو ساڳيون حدون آهن. ان جي ابتڙ، TCP ڪيترائي خاصيتون آهن. اهو هڪ قابل اعتماد، ترتيب واري ڪنيڪشن فراهم ڪري ٿو ٻن نوڊس جي وچ ۾ غلطي جي چڪاس سان. انهيء ڪري، TCP تمام آسان آهي ۽ ڪيترن ئي ٻين پروٽوڪول ۾ استعمال ٿيندو آهي، مثال طور. HTTP, ايف ٽي پي и SMTP. پر اهي سڀئي خاصيتون قيمت تي اچن ٿيون: دير.

سمجھڻ لاءِ ته اھي ڪم ڇو دير ڪري سگھن ٿا، اسان کي سمجھڻ گھرجي ته TCP ڪيئن ڪم ڪري ٿو. جڏهن هڪ موڪلڻ وارو نوڊ هڪ پيڪٽ کي وصول ڪندڙ نوڊ ڏانهن منتقل ڪري ٿو، اهو هڪ اعتراف (ACK) حاصل ڪرڻ جي اميد رکي ٿو. جيڪڏهن هڪ خاص وقت کان پوءِ اهو وصول نه ٿئي (ڇاڪاڻ ته پيڪٽ يا اقرار گم ٿي ويو هو، يا ڪنهن ٻئي سبب جي ڪري)، پوءِ اهو پيڪٽ ٻيهر موڪليندو آهي. ان کان علاوه، TCP ضمانت ڏئي ٿو ته پيڪيٽس صحيح ترتيب ۾ وصول ڪيا ويا آهن، تنهن ڪري جيستائين گم ٿيل پيڪٽ حاصل نه ڪيو وڃي، ٻين سڀني پيڪٽ تي عمل نه ٿو ڪري سگهجي، جيتوڻيڪ اهي پهريان ئي وصول ڪندڙ ميزبان طرفان وصول ڪيا ويا آهن.

پر جيئن توهان شايد تصور ڪري سگهو ٿا، ملٽي پليئر راندين ۾ ويڪرائي تمام ضروري آهي، خاص طور تي FPS وانگر ايڪشن سان ڀريل جينز ۾. اهو ئي سبب آهي ته ڪيتريون رانديون استعمال ڪن ٿيون UDP پنهنجي پروٽوڪول سان.

هڪ اصلي UDP-بنياد پروٽوڪول مختلف سببن جي ڪري TCP کان وڌيڪ ڪارائتو ٿي سگهي ٿو. مثال طور، اهو نشان لڳائي سگھي ٿو ڪجهه پيڪن کي معتبر طور تي ۽ ٻين کي ناقابل اعتبار طور. تنهن ڪري، اهو پرواه ناهي ته ڇا ناقابل اعتماد پيڪٽ وصول ڪندڙ تائين پهچي ٿو. يا اهو ڪيترن ئي ڊيٽا اسٽريمز کي پروسيس ڪري سگهي ٿو ته جيئن هڪ اسٽريم ۾ گم ٿيل پيڪٽ باقي اسٽريمز کي سست نه ڪري. مثال طور، پليئر ان پٽ لاءِ هڪ ٿريڊ ٿي سگهي ٿو ۽ چيٽ پيغامن لاءِ ٻيو ٿريڊ. جيڪڏهن هڪ چيٽ پيغام جيڪو تڪڙو نه آهي گم ٿي ويو آهي، اهو ان پٽ کي سست نه ڪندو جيڪو تڪڙو آهي. يا هڪ ملڪيت وارو پروٽوڪول هڪ ويڊيو گيم ماحول ۾ وڌيڪ ڪارائتو هجڻ لاءِ TCP کان مختلف طور تي اعتماد تي عمل ڪري سگهي ٿو.

تنهن ڪري، جيڪڏهن TCP تمام گهڻو چوس، پوء اسان يو ڊي پي جي بنياد تي پنهنجو ٽرانسپورٽ پروٽوڪول ٺاهينداسين؟

اهو ٿورو وڌيڪ پيچيده آهي. جيتوڻيڪ TCP گیمنگ نيٽ ورڪ سسٽم لاءِ تقريباً ذيلي اپٽمل آهي، اهو توهان جي مخصوص راند لاءِ تمام سٺو ڪم ڪري سگهي ٿو ۽ توهان جو قيمتي وقت بچائي سگهي ٿو. مثال طور، دير تي ٻڌل راند يا راند لاءِ ڪو مسئلو نه ٿي سگھي ٿو جيڪا صرف LAN نيٽ ورڪن تي کيڏي سگهجي ٿي، جتي دير ۽ پيڪٽ جو نقصان انٽرنيٽ جي ڀيٽ ۾ تمام گهٽ آهي.

ڪيتريون ئي ڪامياب رانديون، جن ۾ ورلڊ آف وارڪرافٽ، ميني ڪرافٽ ۽ ٽريريا شامل آهن، TCP استعمال ڪن ٿيون. جڏهن ته، اڪثر FPSs پنهنجون UDP-based پروٽوڪول استعمال ڪندا آهن، تنهن ڪري اسان هيٺ انهن بابت وڌيڪ ڳالهائينداسين.

جيڪڏهن توهان TCP استعمال ڪرڻ جو فيصلو ڪيو، پڪ ڪريو ته اهو غير فعال آهي ناگل جي الگورتھم، ڇاڪاڻ ته اهو موڪلڻ کان اڳ پيڪن کي بفر ڪري ٿو، جنهن جو مطلب آهي ته اهو دير سان وڌائي ٿو.

ملٽي پليئر گيمز جي حوالي سان UDP ۽ TCP جي وچ ۾ اختلافن بابت وڌيڪ سکڻ لاءِ، توهان پڙهي سگهو ٿا گلين فيڊلر جو مضمون UDP بمقابلہ ٽي سي پي.

ذاتي پروٽوڪول

تنهنڪري توهان پنهنجو ٽرانسپورٽ پروٽوڪول ٺاهڻ چاهيو ٿا، پر خبر ناهي ته ڪٿي شروع ڪجي؟ توهان قسمت ۾ آهيو ڇو ته گلين فيڊر هن بابت ٻه شاندار مضمون لکيا آهن. توهان کي انهن ۾ تمام گهڻو هوشيار خيال ملندا.

پهريون مضمون نيٽ ورڪنگ فار گيم پروگرامرز 2008، ٻئي کان وڌيڪ آسان، هڪ راند نيٽ ورڪ پروٽوڪول جي تعمير 2016. مان سفارش ڪريان ٿو ته توهان پراڻي سان شروع ڪريو.

نوٽ ڪريو ته Glenn Fiedler UDP جي بنياد تي ڪسٽم پروٽوڪول استعمال ڪرڻ جو وڏو حامي آھي. ۽ هن جا مضمون پڙهڻ کان پوءِ، توهان شايد هن جي راءِ کي اختيار ڪندا ته ٽي سي پي ۾ ويڊيو گيمز ۾ سنگين خاميون آهن، ۽ توهان چاهيو ٿا ته توهان پنهنجو پروٽوڪول لاڳو ڪريو.

پر جيڪڏهن توهان نيٽ ورڪنگ لاءِ نوان آهيو، پنهنجو پاڻ تي احسان ڪريو ۽ TCP يا لائبريري استعمال ڪريو. ڪاميابيءَ سان پنھنجي ٽرانسپورٽ پروٽوڪول کي لاڳو ڪرڻ لاءِ، توھان کي اڳي ئي گھڻو ڪجھ سکڻ گھرجي.

نيٽ ورڪ لائبريريون

جيڪڏهن توهان کي TCP کان وڌيڪ ڪارائتو شيءِ جي ضرورت آهي، پر توهان پنهنجي پروٽوڪول کي لاڳو ڪرڻ ۽ تمام گهڻي تفصيل ۾ وڃڻ جي تڪليف مان وڃڻ نٿا چاهيو، توهان هڪ نيٽ ورڪنگ لائبريري استعمال ڪري سگهو ٿا. انھن مان گھڻا آھن:

  • yojimbo گلن فيڊلر
  • RakNet، جنهن کي هاڻي سپورٽ نه آهي، پر ان جو هڪ ڪانٽو SLikeNet لڳي ٿو اهو اڃا تائين سرگرم آهي.
  • اينٽ ملٽي پليئر FPS لاءِ ٺهيل هڪ لائبريري آهي ڪعبي
  • GameNetworkingSockets والو

مون انهن سڀني کي نه آزمايو آهي، پر مان ENet کي ترجيح ڏيان ٿو ڇاڪاڻ ته اهو استعمال ڪرڻ آسان ۽ قابل اعتماد آهي. ان کان علاوه، ان ۾ واضح دستاويز ۽ نئين سکندڙن لاءِ هڪ سبق آهي.

ٽرانسپورٽ پروٽوڪول: نتيجو

اختصار ڪرڻ لاءِ: هتي ٻه مکيه ٽرانسپورٽ پروٽوڪول آهن: TCP ۽ UDP. TCP ۾ ڪيتريون ئي ڪارائتيون خاصيتون آھن: قابل اعتماد، پيڪٽ آرڊر جي حفاظت، غلطي جي سڃاڻپ. UDP وٽ اهو سڀ ڪجهه ناهي، پر TCP ان جي فطرت طرفان دير سان وڌي وئي آهي، جيڪا ڪجهه راندين لاءِ ناقابل قبول آهي. اهو آهي، گهٽ ويڪرائي کي يقيني بڻائڻ لاءِ، توهان ٺاهي سگهو ٿا پنهنجو پروٽوڪول UDP جي بنياد تي يا هڪ لائبريري استعمال ڪريو جيڪا UDP تي ٽرانسپورٽ پروٽوڪول لاڳو ڪري ٿي ۽ ملٽي پليئر ويڊيو گيمز لاءِ ٺاهيل آهي.

TCP، UDP ۽ لائبريري جي وچ ۾ چونڊ ڪيترن ئي عنصرن تي منحصر آهي. پهرين، راند جي ضرورتن کان: ڇا ان کي گهٽ ويڪرائي جي ضرورت آهي؟ ٻيو، ايپليڪيشن پروٽوڪول جي گهرج کان: ڇا اهو هڪ قابل اعتماد پروٽوڪول جي ضرورت آهي؟ جيئن ته اسان ايندڙ حصي ۾ ڏسنداسين، اهو ممڪن آهي ته هڪ ايپليڪيشن پروٽوڪول ٺاهيو جنهن لاء هڪ ناقابل اعتماد پروٽوڪول بلڪل مناسب آهي. آخرڪار، توهان کي پڻ اڪائونٽ ۾ رکڻ جي ضرورت آهي نيٽ ورڪ انجڻ ڊولپر جي تجربي کي.

مون وٽ ٻه صلاحون آهن:

  • ٽرانسپورٽ پروٽوڪول کي باقي ايپليڪيشن مان جيترو ٿي سگهي خلاصو ڪيو ته جيئن اهو آساني سان تبديل ڪري سگهجي بغير سڀني ڪوڊ کي ٻيهر لکڻ جي.
  • وڌيڪ اصلاح نه ڪريو. جيڪڏهن توهان هڪ نيٽ ورڪنگ ماهر نه آهيو ۽ پڪ ناهي ته توهان کي ڪسٽم UDP-بنياد ٽرانسپورٽ پروٽوڪول جي ضرورت آهي، توهان شروع ڪري سگهو ٿا TCP يا هڪ لائبريري جيڪا قابل اعتماد فراهم ڪري ٿي، ۽ پوء جانچ ۽ ڪارڪردگي کي ماپ ڪري سگهو ٿا. جيڪڏهن مسئلا پيدا ٿين ٿا ۽ توهان کي يقين آهي ته اهو سبب آهي ٽرانسپورٽ پروٽوڪول، پوء اهو ٿي سگهي ٿو توهان جو پنهنجو ٽرانسپورٽ پروٽوڪول ٺاهڻ جو وقت.

هن حصي جي آخر ۾، مان سفارش ڪريان ٿو ته توهان پڙهو ملٽي پليئر گیم پروگرامنگ جو تعارف برائن هوڪ طرفان، جيڪو هتي بحث ڪيل ڪيترن ئي عنوانن تي پکڙيل آهي.

ايپليڪيشن پروٽوڪول

هاڻي ته اسان ڪلائنٽ ۽ سرور جي وچ ۾ ڊيٽا مٽائي سگهون ٿا، اسان کي اهو فيصلو ڪرڻو پوندو ته ڪهڙي ڊيٽا کي منتقل ڪرڻ ۽ ڪهڙي شڪل ۾.

کلاسک اسڪيم اهو آهي ته ڪلائنٽ ان پٽ يا ڪارناما سرور ڏانهن موڪلي ٿو، ۽ سرور موڪلي ٿو موجوده راند جي حالت کي ڪلائنٽ ڏانهن.

سرور موڪلي ٿو مڪمل رياست نه، پر هڪ فلٽر ٿيل رياست ادارن سان جيڪي پليئر جي ويجهو واقع آهن. هو اهو ٽن سببن ڪري ٿو. پهرين، مڪمل رياست تمام وڏي ٿي سگهي ٿي جيڪا تيز تعدد تي منتقل ٿي سگهي ٿي. ٻيو، گراهڪ خاص طور تي بصري ۽ آڊيو ڊيٽا ۾ دلچسپي وٺندا آهن، ڇاڪاڻ ته اڪثر راند جي منطق کي راند سرور تي ٺهيل آهي. ٽيون، ڪجهه راندين ۾، پليئر کي ڪجهه خاص ڊيٽا ڄاڻڻ جي ضرورت ناهي، مثال طور، نقشي جي ٻئي پاسي دشمن جي پوزيشن، ٻي صورت ۾ هو پيڪن کي سنيف ڪري سگهي ٿو ۽ ڄاڻي ٿو ته هن کي مارڻ لاء ڪٿي منتقل ڪيو وڃي.

سيريلائيزيشن

پهريون قدم اهو آهي ته ڊيٽا کي تبديل ڪيو وڃي جنهن کي اسان موڪلڻ چاهيون ٿا (ان پٽ يا راند جي حالت) ٽرانسميشن لاءِ موزون فارميٽ ۾. هن عمل کي سڏيو ويندو آهي سيريز ڪرڻ.

اهو فڪر جيڪو فوري طور تي ذهن ۾ اچي ٿو هڪ انساني-پڙهڻ واري فارميٽ کي استعمال ڪرڻ، جهڙوڪ JSON يا XML. پر اهو مڪمل طور تي غير موثر ٿيندو ۽ گهڻو ڪري چينل کي برباد ڪندو.

ان جي بدران بائنري فارميٽ استعمال ڪرڻ جي صلاح ڏني وئي آهي، جيڪو گهڻو وڌيڪ ٺهيل آهي. اهو آهي، پيڪٽس صرف چند بائيٽ تي مشتمل هوندا. هتي غور ڪرڻ لاء هڪ مسئلو آهي بائيٽ آرڊر، جيڪو مختلف ڪمپيوٽرن تي مختلف ٿي سگھي ٿو.

ڊيٽا کي ترتيب ڏيڻ لاء، توهان هڪ لائبريري استعمال ڪري سگهو ٿا، مثال طور:

بس پڪ ڪريو ته لائبريري پورٽبل آرڪائيو ٺاهي ٿي ۽ ختم ٿيڻ جي پرواهه ڪري ٿي.

هڪ متبادل حل اهو آهي ته ان کي پنهنجو پاڻ تي لاڳو ڪرڻ؛ اهو خاص طور تي ڏکيو ناهي، خاص طور تي جيڪڏهن توهان استعمال ڪريو ڊيٽا-مرڪزي طريقي سان توهان جي ڪوڊ لاءِ. اضافي طور تي، اهو توهان کي بهتر ڪرڻ جي اجازت ڏيندو جيڪا هميشه ممڪن ناهي جڏهن لائبريري استعمال ڪندي.

گلين فيڊر سيريلائيزيشن بابت ٻه مضمون لکيا: پڙهڻ ۽ لکڻ جي پيڪيجز и سيريلائيزيشن حڪمت عمليون.

ٺڳ

ڪلائنٽ ۽ سرور جي وچ ۾ منتقل ٿيل ڊيٽا جي مقدار چينل جي بينڊوڊٿ طرفان محدود آهي. ڊيٽا کمپريشن توهان کي هر سنيپ شاٽ ۾ وڌيڪ ڊيٽا منتقل ڪرڻ جي اجازت ڏيندو، تازه ڪاري جي تعدد کي وڌايو، يا صرف چينل گهرجن کي گهٽائڻ.

بيٽ پيڪنگنگ

پهرين ٽيڪنڪ بٽ پيڪنگ آهي. اهو صرف استعمال ڪرڻ تي مشتمل آهي بٽ جو تعداد جيڪو گهربل قدر بيان ڪرڻ لاء ضروري آهي. مثال طور، جيڪڏهن توهان وٽ هڪ اينم آهي جنهن ۾ 16 مختلف قيمتون ٿي سگهن ٿيون، پوء هڪ مڪمل بائيٽ (8 بٽ) جي بدران، توهان صرف 4 بٽ استعمال ڪري سگهو ٿا.

Glenn Fiedler وضاحت ڪري ٿو ته هن کي ڪيئن لاڳو ڪجي آرٽيڪل جي ٻئي حصي ۾ پڙهڻ ۽ لکڻ جي پيڪيجز.

بٽ پيڪنگ خاص طور تي نموني سان ڪم ڪري ٿو، جيڪو ايندڙ سيڪشن جو موضوع هوندو.

نمونو ڏيڻ

نمونو ڏيڻ هڪ نقصانڪار ڪمپريشن ٽيڪنڪ آهي جيڪو صرف ممڪن قدرن جو هڪ ذيلي سيٽ استعمال ڪري ٿو هڪ قدر انڪوڊ ڪرڻ لاءِ. discretization کي لاڳو ڪرڻ جو آسان طريقو فلوٽنگ پوائنٽ نمبرن کي گول ڪرڻ سان آهي.

Glenn Fiedler (ٻيهر!) ڏيکاري ٿو ته ڪيئن نموني کي عملي طور تي پنهنجي مضمون ۾ سنيپ شاٽ کمپريشن.

کمپريشن الگورتھم

ايندڙ ٽيڪنڪ نقصان کان سواء ڪمپريشن الگورتھم هوندي.

هتي، منهنجي خيال ۾، ٽي سڀ کان وڌيڪ دلچسپ الگورتھم آهن توهان کي ڄاڻڻ جي ضرورت آهي:

  • Huffman ڪوڊنگ اڳ ۾ ٺهيل ڪوڊ سان، جيڪو انتهائي تيز آهي ۽ سٺو نتيجا پيدا ڪري سگهي ٿو. اهو Quake3 نيٽ ورڪنگ انجڻ ۾ پيڪيٽس کي دٻائڻ لاءِ استعمال ڪيو ويو.
  • Zlib هڪ عام-مقصد کمپريشن الگورٿم آهي جيڪو ڪڏهن به ڊيٽا جي مقدار کي نٿو وڌائي. توهان ڪيئن ڏسي سگهو ٿا هتي، اهو مختلف ايپليڪيشنن ۾ استعمال ڪيو ويو آهي. رياستن کي تازه ڪاري ڪرڻ لاءِ اهو بيڪار ٿي سگهي ٿو. پر اھو ڪارائتو ٿي سگھي ٿو جيڪڏھن توھان کي اثاثن، ڊگھي نصوص يا خطن کي سرور کان گراهڪن ڏانھن موڪلڻ جي ضرورت آھي.
  • رن ڊگھائي نقل ڪندي - اهو شايد آسان ڪمپريشن الگورٿم آهي، پر اهو ڊيٽا جي ڪجهه قسمن لاءِ تمام گهڻو اثرائتو آهي، ۽ zlib کان اڳ پروسيسنگ قدم طور استعمال ڪري سگهجي ٿو. اهو خاص طور تي ٽائلس يا ووڪسلز مان ٺهيل خطي کي دٻائڻ لاءِ مناسب آهي جنهن ۾ ڪيترائي ويجها عنصر ورجائي رهيا آهن.

ڊيلٽا کمپريشن

آخري کمپريشن ٽيڪنڪ ڊيلٽا کمپريشن آهي. اهو حقيقت تي مشتمل آهي ته موجوده راند جي حالت ۽ ڪلائنٽ طرفان حاصل ڪيل آخري رياست جي وچ ۾ صرف فرق منتقل ٿيل آهن.

اهو پهريون ڀيرو Quake3 نيٽ ورڪ انجڻ ۾ استعمال ڪيو ويو. هتي ٻه مضمون آهن وضاحت ڪن ٿا ته ڪيئن استعمال ڪجي:

Glenn Fiedler ان کي پنهنجي مضمون جي ٻئي حصي ۾ پڻ استعمال ڪيو سنيپ شاٽ کمپريشن.

پاسخاطري ڪرڻ

اضافي طور تي، توهان کي ضرورت پوندي ته ڪلائنٽ ۽ سرور جي وچ ۾ معلومات جي منتقلي کي انڪوڊ ڪرڻ. هن جا ڪيترائي سبب آهن:

  • رازداري / رازداري: پيغام صرف وصول ڪندڙ طرفان پڙهي سگهجي ٿو، ۽ نيٽ ورڪ کي سنوارڻ وارو ٻيو ڪو به ماڻهو انهن کي پڙهڻ جي قابل نه هوندو.
  • تصديق: هڪ شخص جيڪو پليئر جو ڪردار ادا ڪرڻ چاهي ٿو ان کي ڄاڻڻ گهرجي ته هن جي اهم.
  • چيٽ جي روڪٿام: بدسلوڪي رانديگرن لاءِ پنهنجون چيٽ پيڪيجز ٺاهڻ تمام گهڻو ڏکيو هوندو، انهن کي انڪرپشن اسڪيم کي ٻيهر ٺاهڻو پوندو ۽ ڪيئي ڳولڻو پوندو (جيڪو هر ڪنيڪشن سان تبديل ٿئي ٿو).

مان هن لاءِ لائبريري استعمال ڪرڻ جي صلاح ڏيان ٿو. مان استعمال ڪرڻ جي صلاح ڏيان ٿو ليبسڊيم, ڇاڪاڻ ته اهو خاص طور تي سادو آهي ۽ بهترين سبق آهي. خاص طور تي دلچسپ آهي سبق تي اهم مٽاسٽا، جيڪو توهان کي هر نئين ڪنيڪشن سان نيون ڪيچون ٺاهڻ جي اجازت ڏئي ٿو.

ايپليڪيشن پروٽوڪول: نتيجو

هي اسان جي ايپليڪيشن پروٽوڪول کي ختم ڪري ٿو. مان سمجهان ٿو ته ڪمپريشن مڪمل طور تي اختياري آهي ۽ ان کي استعمال ڪرڻ جو فيصلو صرف راند ۽ گهربل بينڊوڊٿ تي منحصر آهي. انڪريشن، منهنجي خيال ۾، لازمي آهي، پر پهرين پروٽوٽائپ ۾ توهان ان کان سواء ڪري سگهو ٿا.

ايپليڪيشن منطق

اسان هاڻي ڪلائنٽ ۾ اسٽيٽ کي اپڊيٽ ڪرڻ جي قابل آهيون، پر دير سان مسئلن ۾ هلائي سگهون ٿا. پليئر، ان پٽ کي مڪمل ڪرڻ کان پوء، انتظار ڪرڻ جي ضرورت آهي راند جي حالت لاء سرور کان تازه ڪاري ڪرڻ لاء اهو ڏسڻ لاء دنيا تي ڇا اثر پيو.

ان کان علاوه، ٻن رياستي تازه ڪارين جي وچ ۾، دنيا مڪمل طور تي جامد آهي. جيڪڏهن رياست جي تازه ڪاري جي شرح گهٽ آهي، ته پوء تحريڪون تمام جهرڪيون هونديون.

ھن مسئلي جي اثر کي گھٽائڻ لاءِ ڪيترائي طريقا آھن، ۽ مان انھن کي ايندڙ حصي ۾ بيان ڪندس.

Latency Smoothing ٽيڪنڪس

هن حصي ۾ بيان ڪيل سڀني ٽيڪنڪ جي سيريز ۾ تفصيل سان بحث ڪيو ويو آهي تيز رفتار ملٽي پليئر جبرائيل گمبيٽا. مان تمام گهڻي سفارش ڪريان ٿو مضمونن جي هن شاندار سيريز کي پڙهڻ. اهو پڻ شامل آهي هڪ انٽرويو ڊيمو جيڪو توهان کي ڏسڻ جي اجازت ڏئي ٿو ته اهي ٽيڪنڪ ڪيئن ڪم ۾ ڪم ڪن ٿيون.

پهرين ٽيڪنڪ اهو آهي ته ان پٽ نتيجو سڌو سنئون سرور کان جواب جي انتظار ۾. ان کي سڏيو ويندو آهي ڪلائنٽ پاسي جي اڳڪٿي. بهرحال، جڏهن ڪلائنٽ سرور کان هڪ تازه ڪاري حاصل ڪري ٿي، ان کي تصديق ڪرڻ گهرجي ته ان جي اڳڪٿي صحيح هئي. جيڪڏهن ائين نه آهي ته پوءِ هن کي ضرورت آهي ته هو پنهنجي حالت کي انهيءَ مطابق بدلائي جيڪو هن سرور مان حاصل ڪيو آهي، ڇاڪاڻ ته سرور اختيار ڪندڙ آهي. هي ٽيڪنڪ پهريون ڀيرو زلزلي ۾ استعمال ڪئي وئي. توھان مضمون ۾ ان بابت وڌيڪ پڙھي سگھو ٿا زلزلي انجڻ ڪوڊ جو جائزو فابين سانگلرز [ترجمو هبري تي].

ٽيڪنالاجي جو ٻيو سيٽ استعمال ڪيو ويندو آهي ٻين ادارن جي حرڪت کي ٻن رياستن جي تازه ڪارين جي وچ ۾. هن مسئلي کي حل ڪرڻ جا ٻه طريقا آهن: مداخلت ۽ اضافي. مداخلت جي صورت ۾، آخري ٻن رياستن کي ورتو وڃي ٿو ۽ هڪ کان ٻئي ڏانهن منتقلي ڏيکاريل آهي. ان جو نقصان اهو آهي ته اهو ٿورڙي دير جي دير جو سبب بڻائيندو آهي ڇاڪاڻ ته ڪلائنٽ هميشه ڏسي ٿو ته ماضي ۾ ڇا ٿيو. Extrapolation اڳڪٿي ڪرڻ جي باري ۾ آهي جتي ادارا ھاڻي ھاڻي ڪلائنٽ پاران حاصل ڪيل آخري رياست تي ٻڌل آھن. ان جو نقصان اهو آهي ته جيڪڏهن ادارو مڪمل طور تي حرڪت جي رخ کي تبديل ڪري ٿو، ته پوء اڳڪٿي ۽ حقيقي پوزيشن جي وچ ۾ وڏي غلطي ٿيندي.

جديد، جديد ترين ٽيڪنڪ صرف FPS ۾ مفيد آهي دير جو معاوضو. جڏهن وقفي معاوضي کي استعمال ڪندي، سرور کي ڪلائنٽ جي دير جي حساب ۾ وٺندو آهي جڏهن اهو ٽارگيٽ تي گول ٿئي ٿو. مثال طور، جيڪڏهن هڪ رانديگر پنهنجي اسڪرين تي هيڊ شاٽ ڪيو، پر حقيقت ۾ انهن جو ٽارگيٽ دير جي ڪري مختلف هنڌ تي هو، ته پوءِ پليئر کي دير جي ڪري مارڻ جي حق کان انڪار ڪرڻ ناانصافي ٿيندي. تنهن ڪري، سرور ان لمحي کي واپس ورجائي ٿو جيڪو پليئر فائرنگ ڪيو ان کي نقل ڪرڻ لاءِ جيڪو پليئر پنهنجي اسڪرين تي ڏٺو ۽ انهن جي شاٽ ۽ ٽارگيٽ جي وچ ۾ ٽڪراءَ جي جانچ ڪري.

Glenn Fiedler (هميشه وانگر!) 2004 ۾ هڪ مضمون لکيو نيٽورڪ فزڪس (2004)، جنهن ۾ هن سرور ۽ ڪلائنٽ جي وچ ۾ فزڪس سموليشن کي هم وقت سازي جو بنياد رکيو. 2014 ۾ هن مضمونن جو هڪ نئون سلسلو لکيو نيٽ ورڪنگ فزڪس، جنهن کي فزڪس سموليشن کي هم وقت سازي ڪرڻ لاءِ ٻيون ٽيڪنالاجيون بيان ڪيون ويون آهن.

والو ويڪي تي پڻ ٻه مضمون آهن، ذريعو ملٽي پليئر نيٽورڪنگ и ڪلائنٽ/سرور ان گيم پروٽوڪول ڊيزائن ۽ اصلاح ۾ دير جي معاوضي جا طريقا جيڪي دير جي معاوضي تي غور ڪن ٿا.

ٺڳيءَ کي روڪڻ

دوکي کي روڪڻ لاء ٻه مکيه ٽيڪنالاجيون آهن.

پهريون: خيانت ڪندڙن لاءِ بدسلوڪي پيڪيٽ موڪلڻ وڌيڪ ڏکيو بنائڻ. جيئن مٿي ذڪر ڪيو ويو آهي، ان کي لاڳو ڪرڻ جو هڪ سٺو طريقو آهي انڪرپشن.

ٻيو: هڪ بااختيار سرور کي صرف حڪم / ان پٽ / عمل حاصل ڪرڻ گهرجي. ڪلائنٽ کي ان پٽ موڪلڻ کان سواءِ سرور تي حالت تبديل ڪرڻ جي قابل نه هجڻ گهرجي. پوءِ، هر دفعي سرور کي ان پٽ ملي ٿو، ان کي چيڪ ڪرڻ گهرجي ته ڇا ان کي استعمال ڪرڻ کان اڳ صحيح آهي.

ايپليڪيشن منطق: نتيجو

مان سفارش ڪريان ٿو ته توهان هڪ طريقي سان عمل ڪريو تيز دير ۽ گهٽ ريفريش جي شرحن کي ترتيب ڏيڻ لاءِ ته جيئن توهان خراب حالتن ۾ پنهنجي راند جي رويي کي جانچي سگهو ، جيتوڻيڪ ڪلائنٽ ۽ سرور ساڳئي ڪمپيوٽر تي هلي رهيا آهن. اهو دير سان هموار ڪرڻ واري ٽيڪنالاجي تي عمل درآمد کي تمام گهڻو آسان بڻائيندو.

ٻيا مددگار وسيلا

جيڪڏهن توهان نيٽ ورڪ ماڊلز تي ٻين وسيلن کي ڳولڻ چاهيو ٿا، توهان انهن کي هتي ڳولي سگهو ٿا:

جو ذريعو: www.habr.com

تبصرو شامل ڪريو