سؤال

وأنا على صنع لعبة متعددة اللاعبين.الآن أنا أحاول أن اختيار التكنولوجيا لربط أجهزة الروبوت إلى الملقم.العملاء تعمل على الروبوت, لعبة MMORPG.أود أن أكتب الخادم في جاوة.الآن لدي فقط 3 أفكار من أجل ذلك:

1) إنشاء خاصية تعدد البيئة عادي جافا ومآخذ.بهذه الطريقة سيكون من الأسهل إجراء اتصال مزدوج بين لعبة العميل والخادم.ولكن لدي الشواغل التالية:

1.1) لعبة MMORPG مع عدد كبير من الكائنات ، وأنا غير متأكد من كيفية هذه الحلول يتم تحجيم إذا كان هناك على سبيل المثال 5000 شخص يلعب في نفس الوقت.كيف العديد من المواضيع سوف تكون قادرة على تشغيل على آلة جافا?كيف يمكنني أن ما يقرب من حساب ذلك ؟ في حالة 1 موضوع القراءة لكل مقبس 1 موضوع الكتابة إلى المقبس (حتى 2 المواضيع لاعب 1).

1.2) عند عدد من اللاعبين ينمو ، كيف سوف تكون قادرة على توسيع نطاق بلدي الذاتي مكتوب جرة-أرشيف توزيع على عدة السيرفرات ؟ ربما هناك بعض خدعة الخاصة بذلك ؟

1.3) الكثير من البرامج العامة - مآخذ API هو مستوى منخفض جدا.

2) إنشاء بريمج واجهة لخدمة طلبات HTTP.

2.1) من السهل السيطرة دورات (وإذن) طالما أن كل لاعب له وظيفته الخاصة بالدورة.

2.2) يمكن الاتصال EE جافا EJB أو أيا كان - الكثير من المضاعفات مع النظام على مستوى البرمجة تؤخذ بعيدا.حتى أستطيع التركيز على الكتابة منطق الأعمال.

2.3) يمكن أن تكون جميع أنواع العملاء مع HTTP الأجهزة المحمولة + المتصفحات.

2.4) عالية السرعة - حتى 1 بريمج حاوية يمكن أن تخدم بضعة آلاف من الطلبات في الثانية لذلك سوف تكون سريعة حقا.

2.4) ولكن هذا النهج غير قادر على توفير كامل دوبلكس الاتصال.يجب أن ترسل طلبات كل 1 ثانية للتحقق من وجود تحديثات.1 ثانية تأخير لا تجعل الكثير من الفرق للعبة كما هو بدورها القائم ، ولكن لا يزال يولد الكثير من حركة المرور.من الممكن عندما يكون هناك العديد من اللاعبين اللعب ؟ سمعت عن بعض المذنب التكنولوجيا ، ولكن يبدو أنه إذا كان الملقم إلى دفع العديد من الرسائل في الصف ، أنا سوف لا تزال بحاجة إلى إرسال الطلبات في كل مرة + هذه التكنولوجيا ليست راسخة حتى الآن.

3) إنشاء مآخذ وربطها من خلال الدائرة إلى java EE الخادم.

3.1) بارد لأنه يسمح الازدواج الكامل التواصل بين العميل و الخادم + توفر جميع الميزات الرائعة من جافا EE.في وقت لاحق يمكن أن تمتد إلى المتصفح عن طريق بريمج واجهة.

3.2) يبدو وكأنه نوع من overengineering.هل هو حقا كيف يمكن للناس أن تفعل ذلك ؟ أعني حتى هو الطريق الصحيح ؟ أن أي عاقل المطور تفعل ذلك ؟

أود منك أن تساعدني في اختيار من فضلك.أنا لم يكن لديك الكثير من الخبرة مع القيام ببعض الأعمال مثل ذلك.وترغب في التمسك أفضل الممارسات.

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

المحلول

لماذا كتابة ما يمكنك الحصول على الرف?

لماذا لا تستخدم RedDwarf الخادم (سابقا المشروع النجم الساحلي)?

RedDwarf الخادم هو مفتوح المصدر الوسيطة حل النامية من جانب الخادم من كثر الألعاب عبر الإنترنت.هو المجتمع الرسمي شوكة المشروع النجم الساحلي, مشروع مفتوح المصدر ويدعم وتدار من قبل شركة صن مايكروسيستمز.- من RedDwarf هي مقالة ويكيبيديا

RedDwarf المجال يبدو اليوم (2013-06-12), ولكن لا يزال هناك ويكي, وهم يهاجرون إلى جيثب الريبو.

RedDward يقدم الفلسفة و الأهداف:

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

غير أن هذا لا يعني أن الخادم هو رمز واحدة مترابطة ولكن هذا هو المستخرجة من مطور لعبة منظور.على RedDwarf التعليمي يوفر الكثير من المعلومات حول ما RedDwarf يمكن أن تفعل ويوضح العديد من قرارات التصميم.

نقطة واحدة من قلق بالنسبة لك ، على الرغم من أن multi-node القدرة لم تنفذ بالكامل آخر مرة تحقق (ca.2011).

من الصفر

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

ولكن على أي حال ، فيما يتعلق بك 3 خيارات أول واحد يبدو أفضل بالنسبة لي, إذا كنت تريد الذهاب الصنع التنفيذ.الخيار 2 (باستخدام HTTP سيرفلتس) يبدو فقط تكييفها بعض الألعاب ، على الرغم من أنني أعتقد أنه يمكن أن يكون لائق نسبيا بديلة لتنفيذ شيء من نفسك حين لا يزال تفويض إلى الوسيطة و يمكنك الاستفادة من العديد من ملقم ويب الإضافات على التعامل مع الحمل (ذاكرة التخزين المؤقت وحدات, الخ...).الخيار 3 (باستخدام الدائرة + جي) في الواقع يبدو overengineered, ولكن من الصعب أن نعرف بالتأكيد من دون معرفة ما لديك في الاعتبار.

وإذا أنت هنا تحاول أن تتعلم ، ثم من الواضح أن الخيار 1 سوف تغطي الكثير من الأرض.ولكن سيكون بدلا معركة شاقة.

نصائح أخرى

1.1) you can't think in term of one Thread by user. Depending of machine configuration but you could load thousands of threads but it will not scale and lose a lot of time in Thread context switch. Better think NIO Netty like framework with few incoming and outcoming Thread pool executor that perform incoming messages under milli second execution.

1.2) You can simply scale by putting in front of you game server a loadbalancer component that can forward incoming player to right server according their load

1.3) NIO can handle thousands to to millions connection on a single box. Don't worry with this.

2.1) Manage your player sessions and 2.2) be away of EJB architecture. It will eat all your box power instead of allocating power to your game which is your goal.

2.3) HTTP can serve all clients but if you run realtime game i encourage to use binary socket and keep HTTP only for loadbalancing , login , stats and fallback when can't establish a socket connection.

2.4) Socket based server can handle hundred thousands incoming message per second. This is the property of low latency system

While it's very interesting to dive in building such system. What is your goal? Learn to build such system or succeed your game?

Many java multiplayer game server technology framework already exist. SmartFox Server, ElectroTank...

We have our own java high load Nuggeta multiplayer crossplatform java game server that addresses all points discussed above and much more. If you wanna try it it's free.

If your goal is to write a game server it's awesome venture that can takes long time but very exciting. If your goal is to succeed your game. Pick up among Java game server SDK already existing.

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