Back to Top
 
 
 

بلاگ

انواع معماری ساخت بازی آنلاین از نظر شبکه

انواع مختلفی از بازی ها وجود دارند که از طریق شبکه اینترنت یا شبکه داخلی بین بازی کنان ارتباط برقرار می کنند. ما به مجموعه این بازی ها، بازی های آنلاین (online games) یا بازی های چند نفره (multiplayer games) می گوییم. اگر این بازی ها تعداد بسیار زیادی بازی کن را در دنیای مشترکی گرد هم آورند به آن ها بازی های MMO (Massively multiplayer online) می گوییم که در این پست راجع به آن ها صحبت نمی کنیم ولی در آینده راجع به آن ها نیز خواهم گفت. من در ساخت یک بازی MMO شرکت داشته ام و این کار بسیار جالب و هیجان انگیز است.

بازی های آنلاین معمول را به روش های مختلفی می توان پیاده سازی کرد و این روش ها بستگی به نوع بازی و میزان تقلب قابل تحمل دارند. مساله اول معماری کلی می باشد که می تواند peer to peer و یا client server باشد. در مدل p2p بازی کنان به شکل مستقیم به یک دیگر وصل می شوند و یکی از آن ها به عنوان کلاینت اصلی master client در نظر گرفته می شود که مشخص می کند چه اتفاقی در بازی افتاده و اگر میان نتیجه عملی و یا وضعیت یک متغیر بین کلاینت ها اختلافی باشد، مقداری که در کلاینت اصلی وجود دارد به عنوان حقیقت در نظر گرفته می شود. بسیاری از بازی های کنسول ها با این مدل کار می کنند. اگر معماری بر پایه کلاینت و سرور باشد یک برنامه به عنوان سرور بین همه کلاینت ها ارتباط برقرار می کند و همه کلاینت ها فقط به سرور متصل می شوند و سرور پیام ها را بین آن ها رد و بدل می کند. در این مدل منطق بازی می تواند server authoritative باشد و یا نباشد. در صورت server authoritative بودن ، سرور به کلاینت ها می گوید که متغیر های بازی در چه وضعیتی قرار دارند و به طور کلی دنیای بازی در چه وضعی است. در غیر این صورت سرور فقط داده ها را بین کلاینت ها رد و بدل کرده و مثل مدل p2p یک master client مسول نشان دادن وضعیت دنیای بازی به بقیه است. آپادانا تا به حال فقط از سرور none-authoritative پشتیبانی می کرد. با افزودن scripting مدل server authoritative نیز پوشش داده خواهد شد.

فرق مدل p2p با none-authoritative server این است که کلاینت ها همواره می توانند به سرور متصل شوند و مشکلات معمول در اتصال بین کلاینت ها رخ نخواهند داد. چون کلاینت ها بیشتر مواقع پشت firewall قرار دارند وصل کردن آن ها یه یک دیگر همواره به سادگی امکان پذیر نیست و در واقع بیشتر بازی های تجاری p2p دارای سرور none-authoritative هستند که هنگام رخ دادن مشکل در اتصال کلاینت ها از ان استفاده می کنند. به سروری که فقط داده ها را بین کلاینت ها جا به جا می کند، relay server نیز گفته می شود.

ساخت بازی ها در مدل p2p به شکلی که قابلیت انتشار داشته باشند کار بسیار پیچیده ایست و کتابخانه های آماده زیادی نیز برای آن وجود ندارد اما اگر شما این کار را بکنید هزین های سرور را از دوش خود برداشته اید. در مقابل در صورت p2p بودن بازی یا استفاده از سرور none-authoritative بازی کنان کاملا امکان تقلب دارند و می توانند وضعیت بازی را به نام خود تغییر دهند. مکانیزم هایی برای جلوگیری از این کار وجود دارد ولی در نهایت اگر سرور معین کننده وضعیت نهایی دنیای بازی نباشد، کلاینت ها توانایی تقلب را خواهند داشت. به این دلیل ها بسیاری از بازی ها از authoritative server ها استفاده می کنند. البته چون چک کردن همه چیز در سرور هزینه به همراه دارد معمولا یک مدل نیمه authoritative انتخاب می شود که موارد مهم در سرور چک می شوند.

مثلا اگر شما بخواهید یک بازی آنلاین FPS بسازید احتمال زیاد همه شلیک های کاربران در سرور چک می شوند و میزان آسیب به وجود آمده به کلاینت ها اطلاع داده خواهند شد اما جهت دوربین هر کاربر را لازم نیست با سرور چک کنید و حتی اگر کاربران سر کاراکترشان را خیلی سریع بچرخانند تقلب شدیدی نمی توانند بکنند، حتی اگر هم بخواهید چک کنید، یک چک حدودی برای نپذیرفتن تغییرات شدید ناگهانی کافی است. در بازی های MMO حتی گاهی برخورد کاراکتر با اشیای کوچک نیز در سرور چک نمی شود و فقط برخورد با دیوار ها و اجزای بزرگ دنیا چک می شود زیرا این بازی ها باید هزاران کاربر را به شکل هم زمان در یک دنیا پشتیبانی کنند و هزینه تشخیص برخورد بسیار بالا می باشد.

با افزوده شدن قابلیت Scripting به آپادانا شما به زودی قادر خواهید بود منطق بازی خود را در سرور اجرا کنید و برای زمان مصرف شده نیز پولی به ما پرداخت نخواهید کرد.

5 دلیل واقعبینانه که شما نیاز ندارید بخش سرور رو خودتون توسعه بدین.

 

این روزا بخش سرور یکی از اجزا اصلی یک بازی جذاب و کاربر پسند بشمار می آید که میشه با اون گیمرهای زیادی رو ساعت ها با ویژگی های آنلاین و اجتماعی سرگرم کرد.  همین موضوع کافیه تا برنامه نویسای بازی به این فکر بيافتند که برای خودشون یک بخش سرور مجزا داشته باشن تا بازی هاشون از ویژگی های اون استفاده کنه و هر دفعه مجبور نباشن این بخش از پروژه رو دوباره بنویسن. اما خب همون طور که نمیشه همه موتور بازی سازی سه بعدی خودشون رو داشته باشن و حتماً نياز به اينه كه يه تيم حرفه اى مدت زمان و بودجه زياديو هزينه كنن  ، بخش سرور مستقل هم نياز به دانش ، زمان و هزينه بالا داره.    

برای توسعه دادن یک بخش سرور مستقل باید مسیر دشواری طی بشه ، در این مطلب 5 دلیل واقعبینانه وجود داره که چرا  بهتره به جای این کار از یک سرویس دهنده بخش سرور استفاده کنیم.  

۱ – شما تیم توسعه دهنده بخش سرور ندارین. 

فعالین این روز های بازیسازى در ایران به این موضوع کاملا واقف هستند که حتی پیدا کردن یک فرد برنامه نویس حرفه ای مسلط به مفاهیم شبکه بسیار سخته ، بنابراین جمع کردن یک تيم با انگیزه که توسعه بخش سرور اولویت اولشون باشه و بصورت تمام وقت روی اون کار کنن بسيار سخته، 

اولین دليل واقعبینانه براى استفاده از سرويس دهنده هاى بخش سرور توجه به اين موضوع وتصميم گيرى مناسبه، بخش سرور را به یک سرویس دهنده بسپارید و از بوجودآمدن مشکل های متعدد توسعه بخش سرور جلوگیری کنید تا وقت بیشتری برای پیش بردن ایده بازيتون داشته باشین .   

 ۲– شما تصویر دقیقی از میزان موفقیت يا شكست بازيتون ندارين. 

در مراحل ساخت يك بازى بخشهاى متفاوتى مثل بخش فنى ، هنرى و توليد وجود دارند كه هر كدام جداگانه چالش هايي بوجود مياورند. 

همونطورى كه ميدونيم پس از ساخت بازى و رعايت كردن تمامى نيازهاى يك بازى موفق از نظر توليد شما نياز به فروختن بازى دارين در مرحله فروش بازي از مهمترين و مؤثرين بخش ها رفع سريع مشكل ها و بروز رسانى به موقع  مي باشد ، اما ساختار درآمدى صنعتهاى خلاق مانند فيلم ،موسيقى و همچنين بازى بسيار وابسته به همگير شدن محصوله ،بنابراين با فرض اينكه تمامى مراحل ساخت وحتى بعد از انتشار بازى به درستى انجام بشه اين امكان وجود داره كه بازى در آمد مورد انتظار شمارو بر أورده نكنه. 

دومين دليل واقعبينانه در شرايط عدم وجود تضمين براى موفقيت پروژه پايين آوردن ميزان ريسكه،بى گدار به  

آب نزدن و از بين نبردن تمام انرژى و هزينه براى يك پروژه يه تصميم منطقى بحساب مياد.  

۳ – مدیریت زیرساخت خودتون میتونه حسابی سخت باشه. 

يكى از بزرگترين چالشهاى مديريت يك سرور ميزبان بازيكنان مقياسپذير بودن اونه ،به زبان ساده شما بايد به اندازه بيشترين تصور خودتون از تعداد بازيكنان منابع از پيش رزرو شده رو اختصاص بدين هر چند باز هم ممكنه هر لحظه ميزان در خواست بازيكنان از ميزان منابع شما بالاتر بزنه و با از كار افتادن سرور ديگه هيچ بازيكنى امكان استفاده از قابليت هاى آنلاين بازي شمارو نداشته باشه.اين مشكل بدون در نظر گرفتن هزينه ماهانه استفاده از يك سرور بدون تفاوت در ميزان استفاده شما از اونه. 

استفاده از يك سرويس دهنده مقياس پذير و پرداخت هزينه هاى اون بر أساس ميزان استفاده شما سومين دليل واقعبينانه انتخاب سرويس دهنده در بخش سرور خواهد بود.   

٤ – ايده بازى خوب شما بايد به سرعت وارد بازار بشه.  

رشد تعداد زياد بازى هايي كه فارسى سازى و يا بازسازى ضعيف نمونه هاى خارجي خودشون هستن ميتونه اين پیامو به ما بده که بخش قابل توجه ای از بازیکنان طرفدار ایده های نو و به روز هستند . با توجه وجود طيف گسترده از گيمر هاى تفننى و همچنين سلائق متغير در بازار بازى كشور ما انتشار به موقع يك ايده خوب تا حد قابل توجهي ميتونه در همه گير شدن بازى مؤثر باشه  بعلاوه این که افزایش زمان تولید باعث افزایش هزینه و کاهش انرژی افراد تیم میشه . 

دلیل واقعبینانه چهارم استفاده از SDK یک سرویس دهنده بخش سرور که بیشترین زمان درگیری شما تا پیاده سازی قابلیت های بازی آنلاین رو بتونه به چند ساعت کاهش بده.  

۵- بخش سرور شما باید به بهترین شکل ممکن پیاده سازی بشه. 

هنگام پياده سازى بخش سرور مستقل يكى از مهمترين بخشها چگونگى ارسال و دريافت داده ها ميان سرور و كلاينت ميباشد. 

حجم بسته ها ، كدگزارى  و طريقه انتقال دادها تأثير مستقيم بر روى کیفیت و ميزان بازدهى يك سرور خواهد داشت به اين شكل كه يك تقدم و تأخر به ظاهر ساده و يا نوشتن داده اضافه در بسته ها ميتونه باعث از بين رفتن بسته و انتقال حجم زيادى داده بدون استفاده بشه. به علاوه ساخت نرم افزار سمت سرور به گونه ای که با زیاد شدن ماشین های سمت سرور توانایی پاسخگویی به تعداد بسیار بیشتری از کاربران را داشته باشه و در پاسخ گویی کند هم نشه اصلا کار آسانی نیست و با تکنولوژی های معمول نوشتن سرویس های وب که بیشتر افراد با آن ها آشنا هستند امکان پذیر نیست و یا بسیار چالش برانگیز خواهد بود. 

به عنوان آخرين دليل واقعبينانه تمركز برروى ايده بازى و در گير نكردن تيم با يك بخش از بازى كه نياز به دانش و تجربه بالا داره باعث ميشه از بوجود اومدن مشكل هاى متعدد در زمانى كه بازى درحال جذب كاربر زياد هستش جلوگيرى بشه.       

 

 

آن چه در سال جدید به آپادانا گذشت

.در سال جدید آپادانا میزبان چند بازی مختلف بود که در پست های قبل به آن ها اشاره کردیم. همچنین چند بازی کوچک نیز بر روی آپادانا منتشر شده اند و ما با توجه به بازخورد مشتریان سعی در بهبود سیستم داریم.

در مدتی که گذشت تمرکز ما بر روی قیمت گذاری عادلانه و همچنین پیاده سازی سیستم های مربوط به حساب رسی و پرداخت توسط کاربران بوده است و همچنین بر روی نسخه ای جدید و زیباتر از پنل کاربری کار کرده ایم. به جز این ها ما در حال کار روی سیستم اسکریپت نویسی و همچنین آیتم های مورد استفاده در بازی ها هستیم که پس از آماده شدن در اختیار شما کاربران گرامی قرار خواهند گرفت. ما سعی کردیم در این مدت مستندات را نیز بهبود بخشیده و بر آن ها بیافزاییم که هنوز جای کار فراوان دارد و در این زمینه بیشتر خواهیم کوشید.

این پست را با توضیح مسایل ریز مربوط به این ویژگی ها طولانی نمی کنم، قصد از نوشتن آن فقط این بود که شما را از آن چه بر ما می گذرد مطلع سازیم. همچنین از توجه و لطف شما نسبت به آپادانا و از این که ما را به اشتراک می گذارید کمال تشکر را دارم.

اعتقاد ما به قدرت اشتراک گذاری اطلاعات و نرم افزار های متن باز

پایه آپادانا از نرم افزارهای متن باز تشکیل شده است. و اعضای تیم ما همه اطلاعات خود را به این دلیل به دست آورده اند که افرادی اطلاعات خود را با دیگران به اشتراک گذاشته اند. کتابی نوشته اند، بلاگی روی اینترنت قرار داده اند و یا در گروه های چت به ما یا دیگران کمک کرده اند.

ما نیز به این موضوع اعتقاد فراوانی داریم و همواره سعی می کنیم بخشی از آن چه را که جامعه به ما داده است را باز پس داده تا به رشد جامعه که خود بخشی از آن هستیم کمک کنیم. در این راستا ما همواره سعی کرده ایم بخش های قابل اشتراک برنامه هایی که تولید می کنیم را به اشتراک گذاریم. ریپو های شخصی من در گیت هاب نیز شامل کد مربوط به برخی از کتابخانه هایی هستند که در سالیان برای کارهای مختلف نوشته ام و یا fork کد دیگران که برای کار خود بهبود داده ام.

http://github.com/ashkan-saeedi-mazdeh

 

همچنین کد مربوط به ارتباط Orleans با پایگاه داده couchbase توسط ما در ریپو های کاربران Orleans قرار گرفته است که البته خود دیگر از آن استفاده نمی کنیم. اکنون ما از کد مربوط به ارتباط با پایگاه داده ArangoDB استفاده می کنیم که به بهبود آن کمک کرده ایم و بیش از این نیز خواهیم کرد (دلیل تغییر پایگاه داده ما لزوما برتری صد درصدی ArangoDB به Couchbase نیست). در خود Orleans هم به بهبود مستندات و طراحی اندکی کمک کرده ایم. کد مربوط به کلاینت آپادانا نیز به شکل کاملا متن باز بوده هر چند هنوز در گیت هاب قرار داده نشده است.

به جز این ها ما به زودی روش کار با Orleans و برتری های استفاده از آن نسبت به سیستم های دیگر نوشتن برنامه سمت سرور را در کنفرانس TGC توضیح خواههیم داد و باور داریم که این کار نه تنها باعث ضعف ما و از بین رفتن قابلیت رقابتمان نمی شود بلکه به ما کمک می کند در جامعه ای داناتر و با اطلاعات بیشتر نسبت به تکنولوژی های روز دنیا، پیشرفت بهتری داشته باشیم و هم از نظر مادی و هم از نظر معنوی رو به جلو حرکت کنیم.

به تازگی حرکتی دیگر را نیز آغاز کرده ایم که در آن هر چند وقت یک بار مطالب آموزشی کلی مربوط به ساخت بازی و به ویژه ساخت بازی در یونیتی را با همکاران خود به اشتراک خواهیم گذاشت. همکاران دیگر بنده نیز در زمینه های کاری خود کارهای متن بازی را انجام داده اند که احتمالا با شما به اشتراک خواهیم گذاشت. امیدوارم که همه همکاران ایرانی ما نیز بیش از پیش در راه به اشتراک گذاشتن دانش، تجربه، کد و آثاری هنری خود گام بردارند.

دلایل وجود خدمات سمت سرور

این روز ها ارایه دهندگان خدماتی مشابه خدمات آپادانا در داخل و خارج از کشور در حال پاسخگویی به آن دسته از مشتریان خود که ترجیح می دهند به جای تولید سرویس های موردنیاز در استودیو خود از اینگونه سرویس ها بهرهمند باشند. 

در این پست نگاهی می اندازیم به این خدمات تا هم به شما مخاطبین همکاران دلیل به وجود آمدن آپادانا را توضیح دهیم و همچنین شما را با این خدمات بیشتر آشنا کنیم.    

ساخت بازی های شبکه ای بسیار سختتر از بازی هایی است که توسط یک نفر بازی می شوند. حتی ساخت ویژگی های اجتماعی و آنلاین بازی های تک نفره مثل ذخیره داده روی سرور برای کاربر، لیدربرد و لاگین هم کار ساده ای نیست و معمولا بدین معنا است که شما باید با تکنولوژی هایی کار کنید که به عنوان برنامه نویس بازی با آن ها آشنایی چندانی ندارید. 

جدا از این حتی اگر شما تجربه و علم ساخت چنین سرویس هایی را داشته باشید، نگهداری و تولید آن ها به زمان نیاز دارد و شما باید ترجیحا زمان خود را صرف موفقیت بازی خود کنید. همچنین نوشتن ابتدایی این سرویس ها ساده است اما اگر بازی شما رشد کند و کاربران زیادی به آن بیایند، داشتن سرویس های آنلاینی که بدون وقفه و با سرعت مناسب درخواست ها را پاسخ دهند آسان نیست و به تجربه و دانش خاص خود نیاز دارد. 

به همین دلیل شرکت های مختلفی در دنیا به دلایل مختلف انواع مختلفی از سرویس های مورد نیاز برای بازی های تحت شبکه و چند نفره و ویژگی های اجتماعی بازی ها را ارایه می کنند. ویژگی های اجتماعی یا همان social features توسط شرکت های پلتفرم های موبایل نیز ارایه می شود و ویژگی های بازی های شبکه ای نیز تا حدی توسط آن ها هم پوشش داده می شود. شرکت های دیگری هم هستند که ویژگی های مورد نظر را با کیفیت بهتر و قابلیت سفارشی سازی بیشتر به تولید کنندگان بازی ها و نرم افزار ها ارایه داده و در مقابل هزینه ارایه خدمات دریافت می کنند. 

در ایران به طور خاص استفاده از سرویس های خارجی با مسایل مربوط به لزوم انتشار در فروشگاه های خارجی برای استفاده از برخی سرویس ها و یا تحریم رو به رو می باشد و استفاده از شرکت های داخلی می تواند این نگرانی ها را برطرف کند. 

ما نیز در تیم آپادانا سعی می کنیم با ساخت سرویسی سریع و با کیفیت و با ویژگی های فنی و جانبی مناسب مثل پشتیبانی و سهولت در ارتباط و ... خود را به عنوان بهترین گزینه برای بازیسازان مطرح کنیم. 

 

 

صفحه5 از6

تمامی حقوق مادی و معنوی این سایت متعلق به گروه آپادانا می باشد.
 info@apadana-platform.ir