ميگا پيڪيج: ڪيئن فيڪٽريو ڊولپرز 200 پليئرز لاءِ ملٽي پليئر سان مسئلو حل ڪيو

ميگا پيڪيج: ڪيئن فيڪٽريو ڊولپرز 200 پليئرز لاءِ ملٽي پليئر سان مسئلو حل ڪيو
هن سال جي مئي ۾، مون هڪ رانديگر جي حيثيت ۾ حصو ورتو KatherineOfSky MMO واقعا. مون محسوس ڪيو ته جڏهن رانديگرن جو تعداد هڪ خاص نمبر تي پهچي ٿو، هر چند منٽن ۾ انهن مان ڪجهه "گر" وڃن ٿا. خوش قسمت توهان لاء (پر مون لاء نه)، مان انهن رانديگرن مان هڪ هو هر ڀيريجيتوڻيڪ سٺو ڪنيڪشن سان. مون ان کي ذاتي چئلينج طور ورتو ۽ مسئلي جي سببن کي ڳولڻ شروع ڪيو. ٽن هفتن جي ڊيبگنگ، ٽيسٽنگ ۽ فڪسنگ کان پوءِ، آخرڪار بگ ٺيڪ ٿي ويو، پر اهو سفر ايترو آسان نه رهيو آهي.

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

مختصر ۾، دير جي حالت جي تخليق جي هڪ بگ ۽ نامڪمل عمل جي ڪري، ڪلائنٽ ڪڏهن ڪڏهن پاڻ کي اهڙي صورتحال ۾ ڳولي ٿو جتي هن کي هڪ ڪلاڪ جي چڪر ۾ هڪ نيٽ ورڪ پيڪٽ موڪلڻو هو، جنهن ۾ تقريبا 400 راندين جي ادارن کي چونڊڻ لاء پليئر-ان پٽ ڪارناما شامل آهن ( اسان ان کي "ميگا پيڪٽ" سڏين ٿا). ان کان پوء، سرور کي نه رڳو انهن سڀني ان پٽ عملن کي صحيح طور تي وصول ڪرڻ جي ضرورت آهي، پر انهن کي ٻين سڀني مراجعين ڏانهن پڻ موڪليو. جيڪڏهن توهان وٽ 200 ڪلائنٽ آهن، اهو جلدي هڪ مسئلو بڻجي ويندو. سرور ڏانهن چينل جلدي بند ٿي ويندو آهي، جنهن جي نتيجي ۾ گم ٿيل پيڪٽس ۽ ٻيهر درخواست ڪيل پيڪٽس جو هڪ cascade. ان پٽ ڪارناما کي ملتوي ڪرڻ پوءِ وڌيڪ گراهڪ کي ميگا پيڪيٽ موڪلڻ شروع ڪرڻ جو سبب بڻائيندو آهي ، ۽ انهن جو برفاني طوفان اڃا به مضبوط ٿي ويندو آهي. ڪامياب گراهڪ بحال ڪرڻ جو انتظام ڪن ٿا، باقي سڀ ختم ٿي ويا.

ميگا پيڪيج: ڪيئن فيڪٽريو ڊولپرز 200 پليئرز لاءِ ملٽي پليئر سان مسئلو حل ڪيو
مسئلو ڪافي بنيادي هو، ۽ ان کي حل ڪرڻ ۾ مون کي 2 هفتا لڳا. اھو ڪافي ٽيڪنيڪل آھي، تنھنڪري مان ھيٺ ڏنل تفصيلي فني تفصيل بيان ڪندس. پر پهريان، توهان کي ڄاڻڻ جي ضرورت آهي ته نسخو 0.17.54 کان وٺي، 4 جون تي جاري ڪيو ويو، عارضي ڪنيڪشن جي مسئلن جي منهن ۾، ملٽي پليئر وڌيڪ مستحڪم ٿي چڪو آهي، ۽ دير جي لڪائي تمام گهٽ بگي آهي (گهٽ بريڪنگ ۽ ٽيلي پورٽنگ). انهي سان گڏ، مون طريقي سان تبديل ڪيو آهي جنگي تاخير لڪيل آهن، ۽ اميد آهي ته اهو انهن کي ٿورو هموار بڻائيندو.

ملٽي پليئر ميگا پيڪ - ٽيڪنيڪل تفصيل

ان کي آسان ڪرڻ لاءِ، راند ۾ ملٽي پليئر هن طرح ڪم ڪري ٿو: سڀئي ڪلائنٽ صرف پليئر ان پٽ وصول ڪرڻ ۽ موڪلڻ ذريعي راند جي حالت کي ترتيب ڏين ٿا (جنهن کي "انپٽ ايڪشن" سڏيو ويندو آهي. ان پٽ ڪارناما). سرور جو بنيادي ڪم منتقل ڪرڻ آهي ان پٽ ڪارناما ۽ يقيني بڻائڻ ته سڀئي گراهڪ ساڳيا ڪارناما انجام ڏين ٿا ساڳئي چڪر ۾. توھان پوسٽ ۾ ھن بابت وڌيڪ پڙھي سگھو ٿا. FFF-149.

جيئن ته سرور کي فيصلا ڪرڻا پوندا آهن ته ڪهڙن ڪمن کي کڻڻو آهي، پليئر جا ڪارناما هيٺين رستي تي هلندا آهن: پليئر ايڪشن -> گيم ڪلائنٽ -> نيٽ ورڪ -> سرور -> نيٽورڪ -> گيم ڪلائنٽ. هن جو مطلب اهو آهي ته پليئر جو هر عمل صرف ان کان پوء ڪيو ويندو آهي جڏهن اهو نيٽ ورڪ ذريعي هڪ گول سفر جو رستو ٺاهيو آهي. انهي جي ڪري، راند ڏاڍي سست لڳي ها، تنهنڪري تقريبا فوري طور تي راند ۾ ملٽي پليئر جي ظاهر ٿيڻ کان پوء، دير سان لڪائڻ لاء هڪ ميڪانيزم متعارف ڪرايو ويو. دير جي لڪائي ٻين رانديگرن جي عملن ۽ سرور جي فيصلي تي غور ڪرڻ کان سواءِ پليئر ان پٽ کي نقل ڪري ٿي.

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

کان سواء راند جي حالت اسان وٽ دير جي حالت آهي دير جي حالت. اهو مکيه رياست جو هڪ ننڍڙو ذيلي سيٽ تي مشتمل آهي. دير جي حالت مقدس نه آهي ۽ صرف هڪ تصوير جي نمائندگي ڪري ٿي ته مستقبل ۾ راند جي حالت ڪهڙي طرح نظر ايندي، پليئر جي انپٽس جي بنياد تي ان پٽ ڪارناما.

هن کي ڪرڻ لاء، اسان ٺاهيل جي ڪاپي رکون ٿا ان پٽ ڪارناما دير جي قطار ۾.

ميگا پيڪيج: ڪيئن فيڪٽريو ڊولپرز 200 پليئرز لاءِ ملٽي پليئر سان مسئلو حل ڪيو
اهو آهي، ڪلائنٽ جي پاسي تي عمل جي آخر ۾، تصوير هن طرح ڪجهه ڏسڻ ۾ اچي ٿو:

  1. لاڳو ڪريو ان پٽ ڪارناما سڀني رانديگرن کي راند جي حالت جيئن اهي ان پٽ ڪارناما سرور کان وصول ڪيا ويا.
  2. دير جي قطار مان سڀڪنھن شيء کي هٽايو ان پٽ ڪارناما، جيڪو، سرور جي مطابق، اڳ ۾ ئي لاڳو ڪيو ويو آهي راند جي حالت.
  3. ختم ڪريو دير جي حالت ۽ ان کي ري سيٽ ڪريو ته جيئن اهو بلڪل ساڳيو نظر اچي راند جي حالت.
  4. دير واري قطار کان وٺي سڀني عملن کي لاڳو ڪريو دير جي حالت.
  5. ڊيٽا جي بنياد تي راند جي حالت и دير جي حالت راند کي رانديگر کي ڏيو.

اهو سڀ ڪجهه هر ڪٽ ۾ بار بار ڪيو ويندو آهي.

ڏاڍو ڏکيو؟ آرام نه ڪريو، اهو سڀ ڪجهه ناهي. ناقابل اعتماد انٽرنيٽ ڪنيڪشن جي معاوضي لاء، اسان ٻه ميڪانيزم ٺاهيا آهن:

  • Skipped ticks: جڏهن سرور اهو فيصلو ڪري ٿو ان پٽ ڪارناما راند جي tact ۾ عمل ڪيو ويندو، پوء جيڪڏھن حاصل نه ڪيو آهي ان پٽ ڪارناما ڪجهه رانديگر (مثال طور، دير جي دير جي سبب)، هو انتظار نه ڪندو، پر هن ڪلائنٽ کي ٻڌايو ته "مون توهان جي حساب ۾ نه ورتو آهي" ان پٽ ڪارنامامان ان کي ايندڙ بار ۾ شامل ڪرڻ جي ڪوشش ڪندس. اهو ڪيو ويو آهي انهي ڪري ته هڪ پليئر جي ڪنيڪشن (يا ڪمپيوٽر سان) جي مسئلن جي ڪري، نقشي جي تازه ڪاري هر ڪنهن لاء سست ناهي. اهو قابل ذڪر آهي ته ان پٽ ڪارناما نظر انداز نه ڪيو ويو آهي، پر صرف ملتوي ڪيو ويو آهي.
  • مڪمل راؤنڈ ٽريپ جي ويڪرائي: سرور اهو اندازو لڳائڻ جي ڪوشش ڪري ٿو ته ڪلائنٽ ۽ سرور جي وچ ۾ گول-ٽريپ جي ويڪرائي هر ڪلائنٽ لاءِ ڇا آهي. هر 5 سيڪنڊن ۾، اها ضرورت مطابق ڪلائنٽ سان هڪ نئين دير سان ڳالهه ٻولهه ڪري ٿي (ان تي منحصر آهي ته ماضي ۾ ڪنيڪشن ڪيئن رهيو آهي)، ۽ ان مطابق گول سفر جي دير کي وڌائي يا گهٽائي ٿو.

پاڻ ۾، اهي ميکانيزم بلڪل سادو آهن، پر جڏهن اهي گڏجي استعمال ڪيا ويندا آهن (جيڪو اڪثر ڪنيڪشن جي مسئلن سان ٿئي ٿو)، ڪوڊ منطق کي منظم ڪرڻ ڏکيو ٿي ويندو آهي ۽ ڪيترن ئي کنڊ ڪيسن سان. اضافي طور تي، جڏهن اهي ميڪانيزم راند ۾ اچن ٿا، سرور ۽ دير جي قطار کي صحيح طور تي لاڳو ڪرڻ گهرجي خاص ان پٽ عمل نالو هيٺ Stop MovementInTheNextTick. انهي جي مهرباني، ڪنيڪشن جي مسئلن جي صورت ۾، ڪردار پنهنجو پاڻ تي نه هلندو (مثال طور، ٽرين هيٺ).

هاڻي مون کي توهان کي وضاحت ڪرڻ جي ضرورت آهي ته ڪيئن اداري جي چونڊ ڪم ڪري ٿي. منظور ٿيل قسمن مان هڪ ان پٽ عمل هڪ اداري جي چونڊ حالت ۾ تبديلي آهي. اهو هر ڪنهن کي ٻڌائي ٿو ته پليئر ڪهڙي اداري کي مائوس سان گڏ ڪيو. جئين توھان ڏسي سگھو ٿا، ھي ھڪڙو گھڻا گھڻا ان پٽ ڪارناما آھن جيڪي ڪلائنٽ پاران موڪليا ويا آھن، تنھنڪري بينڊوڊٿ کي بچائڻ لاءِ، اسان ان کي بهتر ڪيو آھي ته جيئن اھو ممڪن حد تائين گھٽ جاءِ وٺي. اهو هن طرح لاڳو ڪيو ويو آهي: جڏهن هر اداري کي چونڊيو ويندو آهي، ان جي بدران، مطلق، اعلي-سڌائي واري نقشي جي همراهڪن کي ذخيرو ڪرڻ جي، راند اڳوڻي چونڊ کان گهٽ-سڌائي واري نسبتي آفسيٽ کي محفوظ ڪري ٿي. اهو سٺو ڪم ڪري ٿو ڇاڪاڻ ته ماؤس جي چونڊ عام طور تي پوئين چونڊ جي تمام ويجهو ٿئي ٿي. اهو ٻن اهم ضرورتن کي جنم ڏئي ٿو: ان پٽ ڪارناما ڪڏهن به نه ڇڏڻ گهرجي ۽ صحيح ترتيب ۾ ٿيڻ گهرجي. اهي گهرجون پوريون ڪيون وڃن ٿيون راند جي حالت. پر ڪم کان وٺي دير جي حالت پليئر لاءِ ”ڪافي سٺي لڳندي“ ۾، اهي دير واري حالت ۾ مطمئن نه آهن. دير جي حالت حساب ۾ نه رکندو آھي ڪيترائي سرحدي ڪيسگھڙين کي لڪائڻ ۽ گول-ٽريپ ٽرانسميشن دير سان تبديل ڪرڻ سان لاڳاپيل.

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

  1. پليئر ڪنيڪشن مسئلن جو تجربو ڪري رهيو آهي.
  2. سائيڪل کي لڪائڻ ۽ گول ٽرپ ٽرانسميشن جي دير کي منظم ڪرڻ لاءِ ميڪانيزم راند ۾ اچن ٿا.
  3. دير رياست جي قطار انهن ميکانيزم جي حساب سان نه آهي. اهو ڪجهه عملن کي وقت کان اڳ هٽائڻ يا غلط ترتيب ۾ هلائڻ جو سبب بڻائيندو آهي، نتيجي ۾ هڪ غلط دير جي حالت.
  4. پليئر کي ڪو به ڪنيڪشن مسئلو ناهي ۽ سرور سان پڪڙڻ لاءِ 400 سائيڪلن تائين نقل ڪري ٿو.
  5. هر چڪر ۾، هڪ نئين عمل ٺاهي وئي آهي ۽ سرور ڏانهن موڪلڻ لاء تيار آهي، اداري جي چونڊ کي تبديل ڪندي.
  6. ڪلائنٽ موڪلي ٿو 400+ اداري جي چونڊ تبديلين جو هڪ ميگا پيڪيٽ سرور ڏانهن (۽ ٻين عملن سان: فائرنگ جي حالت، هلڻ واري حالت، وغيره. پڻ هن مسئلي کان متاثر ٿيو).
  7. سرور وصول ڪري ٿو 400 ان پٽ ڪارناما. جيئن ته ان کي هڪ واحد ان پٽ عمل کي ڇڏڻ جي اجازت ناهي، اهو سڀني مراجعين کي انهن عملن کي انجام ڏيڻ جي هدايت ڪري ٿو ۽ انهن کي نيٽ ورڪ تي موڪلي ٿو.

ستم ظريفي اها آهي ته بينڊوڊٿ کي بچائڻ لاءِ ٺهيل ميکانيزم جي نتيجي ۾ وڏي نيٽ ورڪ پيڪٽس پيدا ٿيا.

اسان هن مسئلي کي حل ڪيو آهي سڀني تازه ڪاري ايج ڪيسن کي حل ڪندي ۽ قطار جي مدد ۾ دير. جيتوڻيڪ اهو ڪافي وقت وٺي ويو، اهو ان کي حاصل ڪرڻ جي لائق هو آخر ۾ اهو جلدي هيڪس تي ڀروسو ڪرڻ بجاءِ.

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

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