كيف يتم بناء ألعاب تقمص الأدوار متعددة اللاعبين عبر الإنترنت؟

StackOverflow https://stackoverflow.com/questions/1418749

سؤال

كيف يتم إنشاء ألعاب RPG متعددة اللاعبين عبر الإنترنت؟

  • ما هي البنية التحتية للخادم التي بنيت عليها؟خاصة مع وجود العديد من العملاء المتصلين والمتواصلين في الوقت الفعلي.

  • هل يديرون البرامج النصية التي يتم تنفيذها بناءً على طلبات الصفحة؟أو الخدمات المثبتة التي تعمل في الخلفية وإدارة الاتصال مع العملاء المتصلين؟

  • هل يستخدمون بروتوكولات أخرى؟لأن HTTP لا يسمح للخوادم بدفع البيانات إلى العملاء.

  • كيف تعمل "المحركات" لمعالجة المئات من أحداث اللعب المتضاربة مركزيًا؟

شكرا على وقتك.

هل كانت مفيدة؟

المحلول

ما هي البنية التحتية للخادم التي بنيت عليها؟خاصة مع وجود العديد من العملاء المتصلين والمتواصلين في الوقت الفعلي.

أعتقد أن الخوادم ستعمل على Linux أو BSD أو Solaris بنسبة 99% تقريبًا من الوقت.

هل يديرون البرامج النصية التي يتم تنفيذها بناءً على طلبات الصفحة؟أو الخدمات المثبتة التي تعمل في الخلفية وإدارة الاتصال مع العملاء المتصلين؟

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

هل يستخدمون بروتوكولات أخرى؟لأن HTTP لا يسمح للخوادم بدفع البيانات إلى العملاء.

UDP هو البروتوكول المستخدم.إنه سريع لأنه لا يقدم أي ضمانات باستلام الحزمة.لا يهمك إذا كان القليل من الكمون يتسبب في فقدان العميل لمكانته العالمية.

كيف تعمل "المحركات" لمعالجة المئات من أحداث اللعب المتضاربة مركزيًا؟

تحتوي معظم ألعاب MMO على مناطق تقصر ذلك على عدد معين من الأشخاص.بالنسبة لأولئك الذين لديهم 100 شخص في منطقة واحدة، عادة ما يكون هناك زمن استجابة مرتفع.يتعين على الخادم التعامل مع مئات التعويذات التي يتم إرسالها إليه، ويجب عليه حساب مقدار الضرر لكل واحدة.بالنسبة لألعاب MMO الخمس الكبرى، أتصور أن هناك فرقًا مكونة من 10 إلى 20 مطورًا أذكياء جدًا وموهوبين رياضيًا يعملون على هذا يوميًا ولا توجد لعبة MMO تمكنت من تحقيق ذلك بشكل صحيح حتى الآن، معظمهم يكسرون بعد 100 لاعب.

--

قم بالبحث عن واويمو (لا يوجد موقع رسمي ولا أريد الارتباط بموقع مخادع).هذا على أساس ApireCore وهو عبارة عن محاكي MMO، أو في الأساس مهندس عكسي لبروتوكول WoW.هذا ما تعمل عليه خوادم WoW الخاصة.مما أذكر أن Wowemu هو

  • mySQL
  • بايثون

لكن ApireCore هو C++.

الواجهة الخلفية لـ Wowemu بسيطة بشكل مثير للدهشة (لقد جربتها في عام 2005) وربما تكون عبارة عن تبسيط كامل لمخطط قاعدة البيانات.إنه يمنحك فكرة جيدة عما ينطوي عليه الأمر.

نصائح أخرى

العديد من الطرق تؤدي إلى روما، والعديد من المباني تؤدي إلى ألعاب MMORPG.

فيما يلي بعض الأفكار العامة حول نقاطك:

  • تحتاج البنية التحتية للخادم إلى دعم القدرة على التوسع...إضافة خوادم إضافية مع زيادة التحميل.بالمناسبة، هذا مناسب تمامًا للحوسبة السحابية.أقوم حاليًا بتشغيل تطبيق خدمات مالية كبير يحتاج إلى التوسع والتقليص اعتمادًا على الوقت من اليوم والوقت من العام.نحن نستخدم Amazon AWS لإضافة الخوادم الافتراضية وإزالتها على الفور تقريبًا.
  • من المحتمل أن ألعاب MMORPG التي أعرفها لا تستخدم خدمات الويب للاتصال (نظرًا لأنها عديمة الجنسية) ولكنها تستخدم برنامجًا مخصصًا من جانب الخادم (على سبيل المثال.خدمة تستمع إلى رسائل TCP و/أو UDP).
  • من المحتمل أنهم يستخدمون بروتوكولًا مخصصًا يستند إلى TCP و/أو UDP (انظر إلى اتصال المقبس)
  • يتم تقسيم معظم الألعاب إلى "عوالم"، مما يحد من عدد اللاعبين الموجودين في نفس الكون الافتراضي بعدد أحداث اللعبة التي يمكن لخادم واحد (ربما يحتوي على الكثير من وحدات المعالجة المركزية والكثير من الذاكرة) معالجتها بشكل معقول.تعتمد آلية معالجة الأحداث الدقيقة على متطلبات مصمم اللعبة، ولكن بشكل عام أتوقع أن الأحداث الواردة تدخل في قائمة انتظار ذات أولوية (يتم تحديد أولوياتها حسب وقت الاستلام و/أو وقت الإرسال وربما معايير أخرى على غرار "ما مدى سوء الأمر إذا" هل نتجاهل هذا الحدث؟").

هذا موضوع كبير جدًا بشكل عام.أود أن أقترح عليك مراجعة موقع Amazon.com بحثًا عن الكتب التي تتناول هذا الموضوع.

نظرًا لأن ألعاب MMO بشكل عام تتطلب موارد الشركة لتطويرها ونشرها، وفي هذه المرحلة تعتبر ملكية فكرية قيمة للشركة، فلا يوجد الكثير من المعلومات المتاحة للعامة حول عمليات التنفيذ.

الشيء الوحيد المؤكد إلى حد ما هو أنه نظرًا لأن ألعاب MMO تستخدم بشكل عام عميلًا مخصصًا وعارضًا ثلاثي الأبعاد، فإنها لا تستخدم HTTP لأنها ليست متصفحات ويب.سيكون للألعاب عبر الإنترنت بروتوكولاتها الخاصة المبنية على TCP/IP أو UDP.

سيتم إنشاء عمليات محاكاة اللعبة نفسها باستخدام نفس التقنيات المستخدمة في أي لعبة ثلاثية الأبعاد متصلة بالشبكة، لذا يمكنك البحث عن الموارد الخاصة بمجال المشكلة لمعرفة المزيد.

بالنسبة إلى الأب الكبير، World of Warcraft، يمكننا تخمين أن قاعدة البيانات الخاصة بهم هي Oracle لأن قوائم وظائف Blizzard تشير في كثير من الأحيان إلى تجربة Oracle كمتطلب/ميزة إضافية.يستخدمون Lua للبرمجة النصية لواجهة المستخدم.يمكن افتراض أن C++ وOpenGL (لنظام التشغيل Mac) وDirect3D (لأجهزة الكمبيوتر الشخصي) هي لغات التنفيذ لعملاء اللعبة لأن هذا هو ما تُصنع به الألعاب.

إحدى الشركات الرائعة في مناقشة تنفيذها هي CCP، منشئو Eve عبر الإنترنت.لقد نشروا عددًا من العروض التقديمية والمقالات حول البنية التحتية لـ Eve، وهي حالة مثيرة للاهتمام بشكل خاص لأنهم يستخدمون Stackless Python في الكثير من عمليات تنفيذ Eve.

http://www.disinterest.org/resource/PyCon2006-StacklessInEve.wmv http://us.pycon.org/2009/conference/schedule/event/91/

كان هناك أيضًا مقال حديث في مجلة Game Developer حول بنية Eve:

https://store.cmpgame.com/product/3359/Game-Developer-June%7B47%7DJuly-2009-Issue---Digital-Edition

كان للبودكاست الإذاعي لهندسة البرمجيات حلقة مع جيم بوربريك عن الحياة الثانية الذي يناقش الخوادم والعوالم والقياس وغيرها من العناصر الداخلية للعبة MMORPG.

تقليديًا، تعتمد ألعاب MMO على تطبيقات خادم C++ التي تعمل على Linux وتتواصل مع قاعدة بيانات للتخزين الخلفي وتطبيقات العميل السميكة باستخدام OpenGL أو DirectX.

في كثير من الحالات، يقوم العميل والخادم بتضمين محرك برمجة نصية يسمح بتحديد السلوكيات بلغة ذات مستوى أعلى.يتميز EVE بأنه يتم تنفيذه في الغالب في Python ويعمل فوق Stackless بدلاً من أن يكون في الغالب C++ مع بعض البرامج النصية عالية المستوى.

بشكل عام، يجلس الخادم في حلقة لقراءة الطلبات الواردة من العملاء المتصلين، ومعالجتها لفرض آليات اللعبة ثم إرسال التحديثات إلى العملاء.يمكن استخدام UDP لتقليل زمن الوصول وإعادة إرسال البيانات التي لا معنى لها، ولكن بما أن ألعاب تقمص الأدوار بشكل عام لا تستخدم طريقة لعب Twitch، فإن TCP/IP عادةً ما يكون خيارًا أفضل.يمكن استخدام Comet أو BOSH للسماح بالاتصالات ثنائية الاتجاه عبر HTTP لألعاب MMO المستندة إلى الويب وستكون مقابس الويب خيارًا جيدًا قريبًا.

إذا كنت أقوم بإنشاء لعبة MMO جديدة اليوم، فمن المحتمل أن أستخدم XMPP وBOSH وأنشئ العميل في JavaScript لأن ذلك سيسمح له بالعمل دون تنزيل عميل كبير والتفاعل مع أنظمة المراسلة الفورية والصوتية المستندة إلى XMPP (مثل gchat).وبمجرد دعم WebGL على نطاق واسع، فإن هذا من شأنه أن يسمح بعوالم افتراضية ثلاثية الأبعاد قائمة على المتصفح.

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

يوجد عرض تقديمي جيد حول بنية الحياة الثانية قدمه إيان ويلكس الذي كان مدير العمليات هنا: http://www.infoq.com/presentations/Second-Life-Ian-Wilkes

معظم محادثاتي حول تقنية Second Life مرتبطة بمدونتي على: http://jimpurbrick.com

نلقي نظرة على إرلانج.إنها لغة برمجة متزامنة ونظام وقت تشغيل، وقد تم تصميمها لدعم التطبيقات الموزعة والمتسامحة مع الأخطاء وفي الوقت الفعلي وغير المتوقفة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top