كود الشبكة

Netcode هو مصطلح شامل يستخدمه اللاعبون بشكل شائع فيما يتعلق بالشبكات في الألعاب عبر الإنترنت ، وغالبًا ما يشير إلى مشكلات المزامنة بين العملاء والخوادم. غالبًا ما يستنتج اللاعبون "أكواد الشبكة السيئة" عندما يواجهون تأخيرًا أو عندما يتم إسقاط مدخلاتهم. تشمل الأسباب الشائعة لمثل هذه المشكلات زمن الوصول العالي بين الخادم والعميل وفقدان الحزم وازدحام الشبكة والعوامل الخارجية المستقلة عن جودة الشبكة مثل وقت عرض الإطارات أو معدلات الإطارات غير المتسقة . [1] [2] قد يتم تصميم أكواد الشبكة لدعم تجربة متزامنة وسلسة بين المستخدمين على الرغم من تحديات الشبكات هذه.

أنواع Netcode

على عكس اللعبة المحلية حيث يتم تنفيذ مدخلات جميع اللاعبين على الفور في نفس المحاكاة أو مثيل اللعبة، في اللعبة عبر الإنترنت توجد العديد من المحاكاة المتوازية (واحدة لكل لاعب) حيث يتم تلقي المدخلات من لاعبيها على الفور، بينما تصل المدخلات لنفس الإطار من لاعبين آخرين بتأخير معين (أكبر أو أقل اعتمادًا على المسافة المادية بين اللاعبين وجودة وسرعة اتصالات شبكة اللاعبين، إلخ). [3] أثناء المباراة عبر الإنترنت، يجب أن تتلقى الألعاب وتعالج مدخلات اللاعبين في غضون وقت معين لكل إطار (يساوي 16.66 مللي  ثانية لكل إطار بمعدل 60  إطارًا في الثانية )، وإذا وصل إدخال لاعب بعيد لإطار معين (على سبيل المثال، للإطار رقم 10) عندما يكون إطار آخر قيد التشغيل بالفعل (على سبيل المثال، في الإطار رقم 20، بعد 166.66 مللي ثانية)، يتم إنتاج عدم التزامن بين محاكاة اللاعب. هناك حلين رئيسيين لحل هذا الصراع وجعل اللعبة تعمل بسلاسة:

على أساس التأخير

رسم تخطيطي يوضح تنفيذ ومزامنة مدخلات لاعبين اثنين (بزمن ping يبلغ 90 مللي ثانية بينهما) في لعبة عبر الإنترنت تستخدم رمز الشبكة القائم على التأخير في نموذج نظير إلى نظير.

الحل الكلاسيكي لهذه المشكلة هو استخدام رمز شبكة يعتمد على التأخير. عندما تصل مدخلات لاعب بعيد متأخرة، تؤخر اللعبة مدخلات اللاعب المحلي وفقًا لذلك لمزامنة المدخلين وتشغيلهما في وقت واحد. يمكن أن يكون هذا التأخير الإضافي مزعجًا للاعبين (خاصة عندما يكون زمن الوصول مرتفعًا)، ولكن التغيير بشكل عام ليس ملحوظًا جدًا. ومع ذلك، يمكن أن تكون هذه التأخيرات غير متسقة بسبب التقلبات المفاجئة في زمن الوصول الحالي. إذا تجاوز زمن الوصول بين اللاعبين نافذة تخزين مؤقتة ثابتة للاعب البعيد، فيجب أن تنتظر اللعبة، مما يتسبب في "تجميد" الشاشات. يحدث هذا لأن رمز الشبكة القائم على التأخير لا يسمح باستمرار المحاكاة حتى تتلقى المدخلات من جميع اللاعبين في الإطار المعني. [4] يتسبب هذا التأخير المتغير في تجربة غير متسقة وغير مستجيبة مقارنة باللعب دون اتصال بالإنترنت (أو لعبة LAN )، ويمكن أن يؤثر سلبًا على أداء اللاعب في الأنواع الحساسة للتوقيت والسريعة مثل ألعاب القتال . [5]

التراجع

رسم تخطيطي يوضح تنفيذ ومزامنة مدخلات لاعبين اثنين (بزمن ping يبلغ 90 مللي ثانية بينهما) في لعبة عبر الإنترنت تستخدم رمز الشبكة التراجعي في نموذج نظير إلى نظير.

هناك نظام بديل لـ netcode السابق وهو rollback netcode. يقوم هذا النظام بتشغيل مدخلات اللاعب المحلي على الفور (بحيث لا تتأخر كما هو الحال مع netcode القائم على التأخير)، كما لو كانت لعبة غير متصلة بالإنترنت، ويتنبأ بمدخلات اللاعب أو اللاعبين البعيدين بدلاً من انتظارهم (على افتراض أنهم سيقومون بنفس المدخلات التي تم إدخالها في النقرة السابقة). بمجرد وصول هذه المدخلات البعيدة (لنفترض، على سبيل المثال، بعد 45 مللي ثانية)، يمكن للعبة أن تعمل بطريقتين: إذا كان التوقع صحيحًا، تستمر اللعبة كما هي، بطريقة مستمرة تمامًا؛ إذا كان التوقع غير صحيح، يتم عكس حالة اللعبة وتستمر اللعبة من الحالة المصححة، والتي يُنظر إليها على أنها "قفزة" إلى اللاعب أو اللاعبين الآخرين (تعادل 45 مللي ثانية، وفقًا للمثال). [1] تستخدم بعض الألعاب حلاً هجينًا لإخفاء هذه "القفزات" (التي يمكن أن تصبح مشكلة مع نمو زمن الوصول بين اللاعبين، حيث يكون هناك وقت أقل وأقل للرد على تصرفات اللاعبين الآخرين) مع تأخير إدخال ثابت ثم استخدام التراجع. يعد التراجع فعالًا جدًا في إخفاء ارتفاعات التأخير أو المشكلات الأخرى المتعلقة بالتناقضات في اتصالات المستخدمين، حيث تكون التوقعات صحيحة غالبًا ولا يلاحظ اللاعبون ذلك حتى. ومع ذلك، يمكن أن يكون هذا النظام مزعجًا كلما تباطأت لعبة العميل (عادةً بسبب ارتفاع درجة الحرارة)، حيث يمكن أن تحدث مشكلات الشق مما يؤدي إلى تبادل التذاكر بين الأجهزة بمعدلات غير متساوية. يؤدي هذا إلى حدوث خلل بصري يقطع طريقة لعب هؤلاء اللاعبين الذين يتلقون المدخلات بوتيرة أبطأ، بينما يتمتع اللاعب الذي تباطأت لعبته بميزة على البقية من خلال تلقي المدخلات من الآخرين بمعدل طبيعي (يُعرف هذا بالتراجع من جانب واحد). [6] لمعالجة تدفق الإدخال غير المتساوي هذا (وبالتالي، تدفق الإطارات غير المتساوي أيضًا)، توجد حلول قياسية مثل انتظار وصول الإدخالات المتأخرة إلى جميع الأجهزة (على غرار نموذج netcode القائم على التأخير) أو حلول أكثر إبداعًا [ بحاجة لمصدر ] مثل تلك المستخدمة حاليًا في Skullgirls ، والتي تتكون من الحذف المنهجي لإطار واحد كل سبعة إطارات بحيث عندما تواجه اللعبة المشكلة المعنية، يمكنها استعادة الإطارات المتخطاة من أجل مزامنة حالات الألعاب تدريجيًا على الأجهزة المختلفة. [7]

يتطلب رمز الشبكة التراجعي أن يكون محرك اللعبة قادرًا على إعادة حالته إلى حالتها السابقة، الأمر الذي يتطلب إجراء تعديلات على العديد من المحركات الموجودة، وبالتالي، فإن تنفيذ هذا النظام يمكن أن يكون إشكاليًا ومكلفًا في ألعاب نوع AAA (التي عادةً ما تحتوي على محرك قوي وشبكة ذات حركة مرور عالية)، كما علق منتج Dragon Ball FighterZ، توموكو هيروكي، من بين آخرين. [8]

على الرغم من أن هذا النظام يرتبط غالبًا بهندسة نظير إلى نظير وألعاب القتال، إلا أن هناك أشكالًا من الشبكات التراجعية التي تُستخدم أيضًا بشكل شائع في هياكل العميل والخادم (على سبيل المثال، تتضمن المجدولة العدوانية الموجودة في أنظمة إدارة قواعد البيانات وظيفة التراجع) وفي أنواع ألعاب الفيديو الأخرى . [1]

توجد مكتبة شائعة مرخصة من معهد ماساتشوستس للتكنولوجيا تسمى GGPO مصممة للمساعدة في تنفيذ الشبكات التراجعية للألعاب (ألعاب القتال بشكل أساسي). [9]

الأسباب المحتملة لمشاكل netcode

كمون

لا يمكن تجنب التأخير في الألعاب عبر الإنترنت، وترتبط جودة تجربة اللاعب ارتباطًا وثيقًا بهذا (كلما زاد التأخير بين اللاعبين، زاد الشعور بأن اللعبة لا تستجيب لمدخلاتهم). [1] لا يعد التأخير في شبكة اللاعبين (الذي يكون خارج سيطرة اللعبة إلى حد كبير) هو العامل الوحيد محل التساؤل، ولكن أيضًا التأخير المتأصل في الطريقة التي يتم بها تشغيل محاكاة اللعبة. هناك العديد من طرق تعويض التأخير المستخدمة لإخفاء التأخير أو التعامل معه (خاصة مع قيم التأخير العالية). [10]

معدل النقر

يُعرف التحديث الفردي لمحاكاة اللعبة باسم "تيك". غالبًا ما يُشار إلى المعدل الذي يتم به تشغيل المحاكاة على الخادم باسم معدل تيك الخادم؛ وهو في الأساس يعادل معدل إطارات العميل في الخادم ، في غياب أي نظام عرض. [11] يقتصر معدل التيك على طول الوقت الذي يستغرقه تشغيل المحاكاة، وغالبًا ما يتم تقييده عمدًا لتقليل عدم الاستقرار الناتج عن معدل تيك متقلب، وتقليل تكاليف وحدة المعالجة المركزية ونقل البيانات. يزيد معدل التيك المنخفض من زمن الوصول في مزامنة محاكاة اللعبة بين الخادم والعملاء. [12] غالبًا ما يكون معدل النقر للألعاب مثل ألعاب إطلاق النار من منظور الشخص الأول بين 128 نقرة في الثانية (مثل حالة Valorant) ، و 64 نقرة في الثانية (في ألعاب مثل Counter-Strike: Global Offensive و Overwatch )، و30 نقرة في الثانية (مثل Fortnite وإصدار وحدة التحكم في Battlefield V) [ 13 ] و20 نقرة في الثانية (مثل الحالات المثيرة للجدل في Call of Duty: Modern Warfare و Call of Duty: Warzone و Apex Legends ). [14] [15] كما يقلل معدل النقر المنخفض بشكل طبيعي من دقة المحاكاة، [11] وهو ما قد يسبب مشاكل في حد ذاته إذا تم تجاوزه كثيرًا، أو إذا كانت محاكاة العميل والخادم تعمل بمعدلات مختلفة بشكل كبير.

بسبب القيود المفروضة على مقدار النطاق الترددي المتاح ووقت وحدة المعالجة المركزية الذي يستغرقه الاتصال عبر الشبكة، تعطي بعض الألعاب الأولوية لبعض الاتصالات الحيوية مع الحد من تواتر وأولوية المعلومات الأقل أهمية. وكما هو الحال مع معدل التجزئة، فإن هذا يزيد بشكل فعال من زمن انتقال المزامنة. قد تحد محركات الألعاب من عدد المرات التي يتم فيها إرسال التحديثات (للمحاكاة) إلى عميل معين و/أو كائنات معينة في عالم اللعبة بالإضافة إلى تقليل دقة بعض القيم المرسلة عبر الشبكة للمساعدة في استخدام النطاق الترددي. قد يكون هذا الافتقار إلى الدقة ملحوظًا في بعض الحالات. [11] [16]

أخطاء البرمجيات

يمكن أن تندرج أيضًا أخطاء المزامنة المختلفة للمحاكاة بين الأجهزة ضمن فئة "مشكلات رمز الشبكة". قد تتضمن هذه الأخطاء أخطاء تتسبب في استمرار المحاكاة بشكل مختلف على جهاز عن آخر، أو تتسبب في عدم توصيل بعض الأشياء عندما يدرك المستخدم أنه يجب توصيلها. [2] تقليديًا، استخدمت ألعاب الإستراتيجية في الوقت الفعلي (مثل Age of Empires ) نماذج الشبكات من نظير إلى نظير ببروتوكول الخطوة المتطابقة حيث يُفترض أن المحاكاة ستعمل بنفس الطريقة تمامًا على جميع العملاء؛ ومع ذلك، إذا خرج أحد العملاء عن الخطوة لأي سبب، فقد تتفاقم عملية عدم المزامنة وتصبح غير قابلة للإصلاح. [11] [17]

بروتوكول طبقة النقل ورمز الاتصال: TCP وUDP

يمكن أن يؤثر اختيار اللعبة لبروتوكول طبقة النقل (وإدارته وترميزه) أيضًا على مشكلات الشبكة المتصورة.

إذا استخدمت اللعبة بروتوكول التحكم في الإرسال (TCP)، فسوف يكون هناك زيادة في زمن الوصول بين اللاعبين. يعتمد هذا البروتوكول على الاتصال بين جهازين، حيث يمكنهما تبادل البيانات وقراءتها. هذه الأنواع من الاتصالات موثوقة للغاية ومستقرة ومنظمة وسهلة التنفيذ، وتُستخدم في أي عملية تتم على الإنترنت تقريبًا (من تصفح الويب إلى إرسال البريد الإلكتروني أو الدردشة عبر IRC ) . ومع ذلك، فإن هذه الاتصالات ليست مناسبة تمامًا لسرعات الشبكة التي تتطلبها ألعاب الحركة السريعة، حيث يقوم هذا النوع من البروتوكول ( بروتوكولات البث في الوقت الفعلي ) تلقائيًا بتجميع البيانات في حزم (لن يتم إرسالها حتى يتم الوصول إلى حجم معين من المعلومات، ما لم يتم تعطيل هذه الخوارزمية - خوارزمية ناجل -) والتي سيتم إرسالها من خلال الاتصال الذي تم إنشاؤه بين الأجهزة، بدلاً من إرسالها بشكل مباشر (التضحية بالسرعة من أجل الأمان). يميل هذا النوع من البروتوكول أيضًا إلى الاستجابة ببطء شديد كلما فقدوا حزمة، أو عندما تصل الحزم بترتيب غير صحيح أو مكررة، مما قد يكون ضارًا جدًا بلعبة عبر الإنترنت في الوقت الفعلي (لم يتم تصميم هذا البروتوكول لهذا النوع من البرامج).

إذا استخدمت اللعبة بدلاً من ذلك بروتوكول بيانات المستخدم (UDP)، فسيكون الاتصال بين الأجهزة سريعًا جدًا، لأنه بدلاً من إنشاء اتصال بينها، سيتم إرسال البيانات واستلامها مباشرة. هذا البروتوكول أبسط كثيرًا من البروتوكول السابق، لكنه يفتقر إلى موثوقيته واستقراره ويتطلب تنفيذ كود خاص به للتعامل مع الوظائف التي لا غنى عنها للاتصال بين الأجهزة التي يتم التعامل معها بواسطة TCP (مثل تقسيم البيانات من خلال الحزم، والكشف التلقائي عن فقدان الحزم، وما إلى ذلك)؛ وهذا يزيد من تعقيد المحرك وقد يؤدي في حد ذاته إلى حدوث مشكلات. [18]

انظر أيضا

مراجع

  1. ^ أ ب ج د هوينه، مارتن؛ فالارينو، فرناندو (2019). تحليل نماذج الاتساق المستمر في ألعاب القتال بين الأقران في الوقت الفعلي.
  2. ^ "معالجة "Netcode" في Battlefield 4". EA Digital Illusions CE . مارس 2014. تم الاسترجاع في 2014-03-30 .
  3. ^ "Netcode [p1]: Fightin' Words". ki.infil.net . تم الاسترجاع في 2020-12-07 .
  4. ^ Staff, Ars (2019-10-18). "شرح كيفية استخدام ألعاب القتال لرمز الشبكة القائم على التأخير والتراجع". Ars Technica . تم الاسترجاع في 2020-12-07 .
  5. ^ Pinnacle. "الفرق بين الرياضات الإلكترونية على الشبكة المحلية والإنترنت". Pinnacle . تم الاسترجاع في 2020-12-01 .
  6. ^ لي، جيرالد (2020-04-08). تحليل: لماذا يعد التراجع عن Netcode أفضل (يوتيوب).
  7. ^ هيلز، داكوتا "دارك هورس" (2020-04-29). "تتلقى لعبة Skullgirls تحديثًا محسنًا لرمز الشبكة تم إنشاؤه في البداية بواسطة أحد محبي اللعبة". EventHubs . تم الاسترجاع في 2020-12-11 .
  8. ^ Hills, Dakota 'DarkHorse' (2020-12-10). "قد يكون عصر الترميز الشبكي القائم على التأخير قد انتهى أخيرًا في ألعاب القتال اعتمادًا على ما تفعله SNK مع The King of Fighters 15". EventHubs . تم الاسترجاع في 2020-12-10 .
  9. ^ Pusch, Ricky (2019-10-18). "شرح كيفية استخدام ألعاب القتال لرمز الشبكة القائم على التأخير والتراجع". Ars Technica . تم الاسترجاع في 2020-12-14 .
  10. ^ "طرق تعويض زمن الوصول في تصميم وتحسين بروتوكولات اللعبة بين العميل والخادم". مجتمع مطوري Valve . تم الاسترجاع في 11 ديسمبر 2020 .
  11. ^ abcd "Source Multiplayer Networking". Valve . تم الاسترجاع في 2014-03-30 .
  12. ^ “Titanfall، de l’importance d’un bon tickrate”. gamekult.com. 2014-03-29 . تم الاسترجاع 2014/03/30 .
  13. ^ "كشف معدل نقرات خادم Battlefield V وسبب أهميته". www.glitched.online . تم الاسترجاع في 2020-12-05 .[ رابط ميت دائم ]
  14. ^ دافيسون، إيثان. "خوادم Valorant فائقة السرعة تجذب اللاعبين والمحترفين بأعداد كبيرة. إليكم السبب". واشنطن بوست . ISSN  0190-8286 . تم الاسترجاع في 2020-12-05 .
  15. ^ "ما مدى سوء رمز شبكة Apex Legends مقارنة بـ Fortnite وPUBG؟". Dexerto . 2019-11-23 . تم الاسترجاع في 2020-12-05 .
  16. ^ "Unreal Networking Architecture". Epic Games . تم الاسترجاع في 2014-09-07 .
  17. ^ جلين فيدلر (24 فبراير 2010). "ما يحتاج كل مبرمج إلى معرفته حول شبكات الألعاب" . تم الاسترجاع في 2014-09-08 .
  18. ^ فيدلر، جلين (2008-10-01). "UDP vs. TCP". Gaffer On Games . تم الاسترجاع في 2020-12-14 .
تم الاسترجاع من "https://en.wikipedia.org/w/index.php?title=Netcode&oldid=1224566980"
Original text
Rate this translation
Your feedback will be used to help improve Google Translate