میگاپیک: فیکٹریو نے 200 پلیئر ملٹی پلیئر کا مسئلہ کیسے حل کیا۔

میگاپیک: فیکٹریو نے 200 پلیئر ملٹی پلیئر کا مسئلہ کیسے حل کیا۔
اس سال مئی میں، میں نے بطور کھلاڑی حصہ لیا۔ کیتھرین آف اسکائی ایم ایم او ایونٹس. میں نے دیکھا کہ جب کھلاڑیوں کی تعداد ایک خاص تعداد تک پہنچ جاتی ہے تو ہر چند منٹ میں ان میں سے کچھ "گر جاتے ہیں"۔ خوش قسمتی سے آپ کے لیے (لیکن میرے لیے نہیں)، میں ان کھلاڑیوں میں سے ایک تھا۔ ہر وقتیہاں تک کہ اچھے کنکشن کے ساتھ۔ میں نے اسے ایک ذاتی چیلنج کے طور پر لیا اور مسئلے کی وجوہات کو تلاش کرنا شروع کیا۔ تین ہفتوں کی ڈیبگنگ، ٹیسٹنگ اور فکسنگ کے بعد بالآخر بگ ٹھیک ہو گیا، لیکن سفر اتنا آسان نہیں رہا۔

ملٹی پلیئر گیمز میں مسائل کا سراغ لگانا بہت مشکل ہے۔ وہ عام طور پر بہت ہی مخصوص نیٹ ورک سیٹنگز اور بہت ہی مخصوص گیم سٹیٹس کے تحت ہوتے ہیں (اس معاملے میں، 200 سے زیادہ کھلاڑی)۔ اور یہاں تک کہ جب کوئی مسئلہ دوبارہ پیش کیا جا سکتا ہے، تو اسے صحیح طریقے سے ڈیبگ نہیں کیا جا سکتا کیونکہ بریک پوائنٹس ڈالنے سے گیم رک جاتا ہے، ٹائمرز میں گڑبڑ ہو جاتی ہے، اور عام طور پر وقت ختم ہونے کی وجہ سے کنکشن ختم ہو جاتا ہے۔ لیکن ثابت قدمی اور ایک شاندار آلے کا شکریہ اناڑی میں یہ جاننے کے قابل تھا کہ کیا ہو رہا ہے۔

مختصراً، تاخیر کی حالت کے تخروپن کے ایک بگ اور نامکمل نفاذ کی وجہ سے، مؤکل بعض اوقات خود کو ایسی صورت حال میں پاتا ہے جہاں اسے ایک گھڑی کے چکر میں نیٹ ورک پیکٹ بھیجنا پڑتا ہے، جس میں تقریباً 400 گیم ہستیوں کو منتخب کرنے کے لیے پلیئر ان پٹ ایکشنز شامل ہوتے ہیں ( ہم اسے "میگا پیکٹ" کہتے ہیں)۔ اس کے بعد، سرور کو نہ صرف ان تمام ان پٹ ایکشنز کو صحیح طریقے سے وصول کرنے کی ضرورت ہے، بلکہ انہیں دوسرے تمام کلائنٹس کو بھی بھیجنا ہوگا۔ اگر آپ کے پاس 200 کلائنٹ ہیں، تو یہ جلد ہی ایک مسئلہ بن جاتا ہے۔ سرور کا چینل تیزی سے بند ہو جاتا ہے، جس کے نتیجے میں پیکٹ کا نقصان ہوتا ہے اور دوبارہ درخواست کردہ پیکٹوں کا جھڑپ ہوتا ہے۔ ان پٹ ایکشن کو ملتوی کرنے سے مزید کلائنٹس میگا پیکٹ بھیجنا شروع کر دیتے ہیں، اور ان کا برفانی تودہ اور بھی مضبوط ہو جاتا ہے۔ کامیاب کلائنٹ ٹھیک ہونے کا انتظام کرتے ہیں، باقی سب گر جاتے ہیں۔

میگاپیک: فیکٹریو نے 200 پلیئر ملٹی پلیئر کا مسئلہ کیسے حل کیا۔
مسئلہ کافی بنیادی تھا، اور مجھے اسے ٹھیک کرنے میں 2 ہفتے لگے۔ یہ کافی تکنیکی ہے، لہذا میں ذیل میں رسیلی تکنیکی تفصیلات کی وضاحت کروں گا۔ لیکن سب سے پہلے، آپ کو یہ جاننے کی ضرورت ہے کہ 0.17.54 جون کو ریلیز ہونے والے ورژن 4 کے بعد سے، عارضی کنکشن کے مسائل کے پیش نظر، ملٹی پلیئر زیادہ مستحکم ہو گیا ہے، اور تاخیر سے چھپنا بہت کم چھوٹی چھوٹی (کم بریک اور ٹیلی پورٹنگ) ہے۔ اس کے علاوہ، میں نے جنگی تاخیر کے چھپنے کا طریقہ تبدیل کر دیا ہے، اور امید ہے کہ اس سے وہ تھوڑا ہموار ہو جائیں گے۔

ملٹی پلیئر میگا پیک - تکنیکی تفصیلات

اسے سادہ لفظوں میں کہا جائے تو گیم میں ملٹی پلیئر اس طرح کام کرتا ہے: تمام کلائنٹس صرف پلیئر ان پٹ (جسے "ان پٹ ایکشنز" کہتے ہیں) وصول کرکے اور بھیج کر گیم کی حالت کی نقالی کرتے ہیں۔ ان پٹ ایکشنز)۔ سرور کا بنیادی کام ٹرانسفر کرنا ہے۔ ان پٹ ایکشنز اور اس بات کو یقینی بنانا کہ تمام کلائنٹس ایک ہی چکر میں ایک جیسے اعمال انجام دیں۔ آپ پوسٹ میں اس کے بارے میں مزید پڑھ سکتے ہیں۔ FFF-149.

چونکہ سرور کو اس بارے میں فیصلہ کرنا ہوتا ہے کہ کون سے اقدامات کرنے ہیں، اس لیے کھلاڑی کے اعمال درج ذیل راستے پر چلتے ہیں: پلیئر ایکشن -> گیم کلائنٹ -> نیٹ ورک -> سرور -> نیٹ ورک -> گیم کلائنٹ۔ اس کا مطلب یہ ہے کہ کھلاڑی کا ہر عمل نیٹ ورک کے ذریعے راؤنڈ ٹرپ کا راستہ بنانے کے بعد ہی انجام پاتا ہے۔ اس کی وجہ سے، کھیل بہت سست لگ رہا تھا، لہذا تقریبا فوری طور پر گیم میں ملٹی پلیئر کی ظاہری شکل کے بعد، تاخیر کو چھپانے کے لئے ایک طریقہ کار متعارف کرایا گیا تھا. تاخیر کو چھپانا دوسرے پلیئرز کے اعمال اور سرور سے متعلق فیصلہ سازی پر غور کیے بغیر پلیئر ان پٹ کی نقل کرتا ہے۔

میگاپیک: فیکٹریو نے 200 پلیئر ملٹی پلیئر کا مسئلہ کیسے حل کیا۔
فیکٹریو میں گیم اسٹیٹ ہے۔ کھیل کی حالت نقشہ، کھلاڑی، اداروں، اور ہر چیز کی مکمل حالت ہے۔ سرور سے موصول ہونے والی کارروائیوں کی بنیاد پر تمام کلائنٹس میں اس کی تقلید کی جاتی ہے۔ گیم اسٹیٹ مقدس ہے، اور اگر یہ کبھی بھی سرور یا کسی دوسرے کلائنٹ سے مختلف ہونے لگتی ہے، تو ڈی سنکرونائزیشن ہوتی ہے۔

لیکن کھیل کی حالت ہمارے پاس تاخیر کی حالت ہے۔ تاخیر کی حالت. یہ مرکزی ریاست کا ایک چھوٹا ذیلی سیٹ پر مشتمل ہے۔ تاخیر کی حالت مقدس نہیں ہے اور صرف اس تصویر کی نمائندگی کرتا ہے کہ کھلاڑی کے ان پٹس کی بنیاد پر مستقبل میں گیم کی حالت کیسی ہوگی۔ ان پٹ ایکشنز.

ایسا کرنے کے لیے، ہم تیار کردہ کی ایک کاپی رکھتے ہیں۔ ان پٹ ایکشنز تاخیر کی قطار میں

میگاپیک: فیکٹریو نے 200 پلیئر ملٹی پلیئر کا مسئلہ کیسے حل کیا۔
یعنی کلائنٹ سائیڈ پر عمل کے اختتام پر تصویر کچھ اس طرح نظر آتی ہے:

  1. درخواست دیں ان پٹ ایکشنز تمام کھلاڑیوں کو کھیل کی حالت جس طرح سے یہ ان پٹ ایکشن سرور سے موصول ہوئے تھے۔
  2. تاخیر کی قطار سے ہر چیز کو ہٹا دیں۔ ان پٹ ایکشنز، جو سرور کے مطابق، پہلے ہی لاگو کیا جا چکا ہے۔ کھیل کی حالت.
  3. حذف کریں تاخیر کی حالت اور اسے دوبارہ ترتیب دیں تاکہ یہ بالکل ویسا ہی نظر آئے کھیل کی حالت.
  4. تاخیر کی قطار سے لے کر تمام کارروائیوں کو لاگو کریں۔ تاخیر کی حالت.
  5. ڈیٹا کی بنیاد پر کھیل کی حالت и تاخیر کی حالت کھلاڑی کو گیم رینڈر کریں۔

یہ سب ہر پیمائش میں دہرایا جاتا ہے۔

بہت مشکل؟ آرام نہ کرو، یہ سب کچھ نہیں ہے۔ غیر معتبر انٹرنیٹ کنیکشن کی تلافی کے لیے، ہم نے دو میکانزم بنائے ہیں:

  • سکپڈ ٹِکس: جب سرور اس کا فیصلہ کرتا ہے۔ ان پٹ ایکشنز کھیل کے tact میں پھانسی دی جائے گی، پھر اگر وہ موصول نہیں ہوا ہے ان پٹ ایکشنز کچھ کھلاڑی (مثال کے طور پر، زیادہ تاخیر کی وجہ سے)، وہ انتظار نہیں کرے گا، لیکن اس کلائنٹ کو مطلع کرے گا "میں نے آپ کے اکاؤنٹ میں نہیں لیا ان پٹ ایکشنزمیں انہیں اگلی بار میں شامل کرنے کی کوشش کروں گا۔ ایسا اس لیے کیا جاتا ہے کہ ایک پلیئر کے کنکشن (یا کمپیوٹر کے ساتھ) میں دشواریوں کی وجہ سے، نقشہ اپ ڈیٹ ہر کسی کے لیے سست نہیں ہوتا ہے۔ یہ بات قابل غور ہے۔ ان پٹ ایکشنز نظر انداز نہیں کر رہے ہیں، لیکن صرف ملتوی کر رہے ہیں.
  • مکمل راؤنڈ ٹرپ لیٹنسی: سرور یہ اندازہ لگانے کی کوشش کرتا ہے کہ کلائنٹ اور سرور کے درمیان راؤنڈ ٹرپ لیٹنسی ہر کلائنٹ کے لیے کیا ہے۔ ہر 5 سیکنڈ میں، یہ کلائنٹ کے ساتھ ضرورت کے مطابق ایک نئی تاخیر پر بات چیت کرتا ہے (اس بات پر منحصر ہے کہ ماضی میں کنکشن کا برتاؤ کیسے رہا ہے)، اور اس کے مطابق راؤنڈ ٹرپ کی تاخیر میں اضافہ یا کمی کرتا ہے۔

بذات خود، یہ میکانزم کافی آسان ہیں، لیکن جب ان کا ایک ساتھ استعمال کیا جاتا ہے (جو اکثر کنکشن کے مسائل کے ساتھ ہوتا ہے)، کوڈ لاجک کا انتظام کرنا مشکل ہو جاتا ہے اور بہت سارے ایج کیسز کے ساتھ۔ اس کے علاوہ، جب یہ میکانزم کام میں آجاتا ہے، تو سرور اور تاخیر کی قطار کو صحیح طریقے سے ایک خصوصی لاگو کرنا چاہیے ان پٹ ایکشن کہا جاتا Stop MovementInTheNextTick. اس کی بدولت، کنکشن کے مسائل کی صورت میں، کردار خود سے نہیں چلے گا (مثال کے طور پر، ٹرین کے نیچے)۔

اب مجھے آپ کو یہ بتانے کی ضرورت ہے کہ ہستی کا انتخاب کیسے کام کرتا ہے۔ منظور شدہ اقسام میں سے ایک ان پٹ ایکشن ایک ہستی کے انتخاب کی حالت میں تبدیلی ہے۔ یہ ہر کسی کو بتاتا ہے کہ کھلاڑی نے ماؤس کے ساتھ کس ہستی پر منڈلایا ہے۔ جیسا کہ آپ دیکھ سکتے ہیں، یہ کلائنٹس کی طرف سے اکثر بھیجے جانے والے ان پٹ ایکشنز میں سے ایک ہے، لہذا بینڈوتھ کو بچانے کے لیے، ہم نے اسے بہتر بنایا ہے تاکہ یہ ممکنہ حد تک کم جگہ لے۔ اس کو اس طرح لاگو کیا جاتا ہے: جب ہر ہستی کو منتخب کیا جاتا ہے، مطلق، اعلی درستگی والے نقشے کے نقاط کو ذخیرہ کرنے کے بجائے، گیم پچھلے انتخاب سے کم درستگی والے رشتہ دار آفسیٹ کو اسٹور کرتی ہے۔ یہ اچھی طرح سے کام کرتا ہے کیونکہ ماؤس کا انتخاب عام طور پر پچھلے انتخاب کے بہت قریب ہوتا ہے۔ اس سے دو اہم تقاضے جنم لیتے ہیں: ان پٹ ایکشنز اسے کبھی نہیں چھوڑنا چاہیے اور صحیح ترتیب میں ہونا چاہیے۔ ان تقاضوں کو پورا کیا جاتا ہے۔ کھیل کی حالت. لیکن کام کے بعد سے تاخیر کی حالت کھلاڑی کے لیے "کافی اچھے لگ رہے ہیں" میں، وہ تاخیر کی حالت میں مطمئن نہیں ہیں۔ تاخیر کی حالت اکاؤنٹ میں نہیں لیتا ہے بہت سے سرحدی معاملاتگھڑیوں کو چھوڑنے اور راؤنڈ ٹرپ ٹرانسمیشن میں تاخیر کو تبدیل کرنے سے وابستہ ہے۔

آپ پہلے ہی اندازہ لگا سکتے ہیں کہ یہ کہاں جا رہا ہے۔ آخر میں، ہم میگا پیکج کے مسئلے کی وجوہات کو دیکھنا شروع کر رہے ہیں۔ مسئلے کی جڑ یہ ہے کہ ہستی کے انتخاب کی منطق پر انحصار کیا جاتا ہے۔ تاخیر کی حالت، اور اس حالت میں ہمیشہ درست معلومات نہیں ہوتی ہیں۔ تو میگا پیکٹ اس طرح تیار ہوتا ہے:

  1. کھلاڑی کو کنکشن کے مسائل کا سامنا ہے۔
  2. سائیکلوں کو چھوڑنے اور راؤنڈ ٹرپ ٹرانسمیشن میں تاخیر کو منظم کرنے کے طریقہ کار کام میں آتے ہیں۔
  3. تاخیر ریاست کی قطار ان میکانزم کا حساب نہیں رکھتی ہے۔ اس کی وجہ سے کچھ اعمال وقت سے پہلے ہٹا دیے جاتے ہیں یا غلط ترتیب میں چلتے ہیں، جس کے نتیجے میں غلط ہو جاتا ہے۔ تاخیر کی حالت.
  4. پلیئر کو کنکشن کا کوئی مسئلہ نہیں ہے اور سرور کو پکڑنے کے لیے 400 سائیکلوں تک نقل کرتا ہے۔
  5. ہر چکر میں، ایک نیا عمل تیار کیا جاتا ہے اور اسے سرور کو بھیجنے کے لیے تیار کیا جاتا ہے، جس سے ہستی کا انتخاب تبدیل ہوتا ہے۔
  6. کلائنٹ سرور پر 400+ ہستی کے انتخاب کی تبدیلیوں کا ایک میگا پیکٹ بھیجتا ہے (اور دیگر اعمال کے ساتھ: فائرنگ کی حالت، چلنے کی حالت، وغیرہ بھی اس مسئلے کا شکار ہیں)۔
  7. سرور 400 ان پٹ ایکشن وصول کرتا ہے۔ چونکہ اسے کسی ایک ان پٹ ایکشن کو چھوڑنے کی اجازت نہیں ہے، اس لیے یہ تمام کلائنٹس کو ان کارروائیوں کو انجام دینے کی ہدایت کرتا ہے اور انہیں نیٹ ورک پر بھیجتا ہے۔

ستم ظریفی یہ ہے کہ بینڈوڈتھ کو بچانے کے لیے بنائے گئے میکانزم کے نتیجے میں نیٹ ورک کے بڑے پیکٹ نکلے۔

ہم نے تمام اپ ڈیٹ ایج کیسز کو ٹھیک کر کے اور قطار کی حمایت میں تاخیر کر کے اس مسئلے کو حل کر لیا ہے۔ اگرچہ اس میں کافی وقت لگا، لیکن فوری ہیکس پر بھروسہ کرنے کے بجائے آخر میں اسے درست کرنا قابل قدر تھا۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں