كيف يتم ربط خوادم الموقع وخوادم الألعاب معًا؟
1. هناك العديد من أنواع الألعاب ، دعنا نلقي نظرة على MMORPG أولاً.
بغض النظر عن مدى بساطة خادم RPG ، من المحتم التعامل مع التفاعلات متعددة الأشخاص. في نفس السيناريو ، يحتاج مئات الأشخاص إلى تلقي معلومات العملية من أي شخص آخر.
ثانياً ، عمليات المستخدمين متكررة للغاية ، وتميل الخوادم العامة إلى عقد اتصالات طويلة. علاوة على ذلك ، تتفاعل هذه الروابط بشكل متكرر وليس لديها استراتيجيات تقسيم واضحة ، لذلك فهي تقيد التحجيم الأفقي للخادم. في كثير من الأحيان يمكن تشغيل نفس السيناريو فقط على آلة مادية واحدة.
مرة أخرى ، عادةً ما تجرؤ ألعاب الكمبيوتر على وضع العمليات المنطقية على العميل. يقوم المستخدمون بتكسيرها في دقائق ، وتغيير العملات الذهبية ، وفرشاة قطعتين من المعدات. لذلك ، يجب أن يتحقق خادم الخريطة هذا من عمليات جميع اللاعبين في الخريطة وحساب سلسلة من منطق الأعمال مثل Monster AI ومعدل الانخفاض.
يمكننا أن نرى أن خوادم الألعاب التقليدية تختلف بشكل واضح عن خوادم الويب ، مع احتياجات الأعمال الفريدة مثل الاتصالات الطويلة ، والبث المتعدد ، ومنطق الأعمال المعقدة ، واستراتيجيات التقسيم المقيدة.
2. دعونا نلقي نظرة على فوائد التزامن مع خادم اللعبة.
التزامن هو في الواقع عملية منطقية للبرنامج ، ولا تتطلب دعمًا بدنيًا متعدد النواة. المعنى العام هو جعل تدفقات المنطق المستقلة المتعددة تبدو وكأنها تعمل في نفس الوقت. التزامن على مستوى نظام التشغيل هو نموذج متعدد الخيوط متعدد العمليات. دع نظام التشغيل يتعامل مع مدار الساعة ، حظر الإدخال/الإخراج وغيرها من المشكلات.
بالنسبة للخادم ، إذا تم إنفاق معظم المهام على I/O ، فإن آلية التزامن يمكن أن تمنع خدمة الخريطة بأكملها من حظر الوصول عن طريق الوصول إلى الإدخال/الإخراج. عندما يتم حظر المهمة ، قم بتخصيص موارد الحوسبة الاحتياطية للمهام الأخرى. في هذه الحالة ، يعد التزامن مفيدًا لكفاءة تشغيل الخادم ووقت الاستجابة.
بالنسبة للمبرمجين ، يعني التدفق المنطقي المستقل أنه يمكنهم إكمال مهامهم في سياق موثوق وبسيط ومقرترات فضفاضة.
نظرًا لأن مفتاح المنطق بين معالجات OS يجب أن يكون عالقًا بشكل متكرر في النواة ، يعتقد بعض الناس أن هذا بطيء للغاية ، لذلك يقومون ببعض الخيوط في مساحة المستخدم ، والتحكم في تدفقات منطقية متعددة في هذه العملية. نظرًا لقيود إمكانيات وصف اللغة ، من المزعج للغاية أن تكتب واستخدام مثل هذه الأشياء على C/C ++. لذا فإن سكر بناء الجملة Coroutine في إرلانج ، Go ، يتم إنشاء Lua.
يتحكم Node.js بشكل أساسي في تدفقات منطقية متعددة من تلقاء نفسها ، ولكن يتم توزيع هذا الدفق المنطقي على أساس حالة الإدخال/الإخراج وله الأولوية. في التنفيذ الفعلي ، يحاول استخدام I/O غير متزامن غير متزامن قدر الإمكان. عندما تستدعي مهمة واحدة I/O ، أوقفها وانتظر حتى يتم إرسال إشارة I/O ، أعيد تشغيلها.
لاحظ هذا ، في كل مرة أقوم فيها بتشغيل مهمة ، ولن أتحول بنشاط إلى تدفقات البرامج الأخرى حتى تكمل أو تحدث استدعاء I/O. لذلك إذا كانت هذه المهمة تتضمن الكثير من الحوسبة ، فسيتم حظر عملية الخريطة بأكملها هنا.
ولأن Node.js غير متزامن ، فمن الضروري كتابة عوائق باستمرار للاستماع إلى الإشارات التي تم الانتهاء منها بواسطة I/O. سيتم مقاطعة التدفق المنطقي لمهمة واحدة عدة مرات. عندما تصبح المهمة معقدة للغاية ، فإن ما يسمى Callbak Hell سيؤدي إلى مشكلة كبيرة في التصحيح والتنمية.
3. بسبب الأسباب المذكورة أعلاه ، لا أوصي باستخدام Node.js في تطوير خادم MMORPG غير النمط.
4. خادم ألعاب الهاتف المحمول الذي ظهر مؤخرًا مناسب تمامًا لـ Node.js ، لأن ألعاب الهاتف المحمول تقتصر على مشاكل الشبكة ، ويمكن للخادم التحقق من البيانات الرئيسية فقط ، وليس من الممكن التعامل مع المواقف التي يتفاعل فيها العديد من الأشخاص. تم تبسيط جانب الخادم لدرجة أنه لا يختلف عن خادم الويب. منطق العمل بسيط أيضًا ، ومعالجة البيانات ثم يستمر.