دوره ساخت بازی آنلاین ( فصل یک - درس دو ) TCP vs UDP


تفاوت TCP و UDP

TCP : این دو پروتکل برای ارسال و دریافت انواع داده استفاده می شوند کامپیوتر های متصل به اینترنت , برای ارسال و دریافت داده از TCP استفاده میکنند همچنین پروتکل TCP قابل اتکا بوده به نوعی که گفته میشود هیچ موقع بسته ای موقع ارسال و دریافت گم نمیشود ( از دست نمی رود ) . در موقع ارسال داده از کامپیوتر 1 به کامپیوتر 2 این دو دستگاه ابتدا با هم اتصال پیدا می کنند و سپس داده ها ارسال و دریافت میشود , این نوع ارسال دریافت بسیار مطمئن‌تر از روش UDP است.

با اینحال فشار زیادی به سیستم وارد میکند چون هر دو سیستم باید داده های ارسالی را مرتب چک کنند و اگر داده ای به مقصد نرسیده بود دوباره ارسال می شود , همین امر باعث کندی این روش نسبت به UDP میشود.

نرم افزار های پیام رسان یک نمونه عالی برای توضیح کارکرد این روش هستند.

UDP : برعکس پروتکل  TCP این پروتکل داده های ارسالی را ردیابی نمیکند و این کار باعث میشود تا حدودی احتمال از دست دادن داده موقع ارسال و دریافت اطلاعات بین دو کامپیوتر وجود داشته باشد , اما همین امر باعث سبک تر و تا چندین برابر سریعتر بودن این روش نسبت به TCP میشود.

همچنین سایز بسته های ( بافرها ) ارسالی با UDP کوچکتر از TCP است , معمولا سرور بازی ها را از نوع UDP انتخاب میکنند به چند دلیل :

  • UDP بسیار سریعتر است
  • هزینه های سرور را در بلند مدت مخصوصا در صورتی که تعداد کاربران زیاد باشند بسیار کاهش میدهد.
  • درصد از دست دادن اطلاعات خیلی کم بوده و با ترفندهایی کاملا قابل حل می باشد.

چه موقع داده های ارسالی از دست میروند ؟

اگر کامپیوتر ارسال کننده و کامپیوتر دریافت کننده در شرایط عادی باشند , هیچ داده ای از دست نمی رود . شرایط از دست دادن داده رو پایین تر توضیح میدم خدمتتون :

  • اگر به هر دلیلی کامپیوتر دریافت کننده قابلیت پردازش اطلاعات دریافت شده رو نداشته باشد ( رم پر , cpu ضعیف , کدنویسی درهم و نامرتب , بهینه نبودن داده و ... )
  • اتصال ضعیف و دارای قطع و وصلی
  • اشتباهات رایج کدنویسی ( شاید بگید که برای من شامل نمیشه  ولی اتفاقا برای همه شامل میشه )

گم شدن یا از دست دادن داده های ارسالی چه موقع مهم است و چه موقع مهم نیست ؟

فرض کنید میخواهیم حرکت یک گیم آبجکت را از راست به چپ برای تمام کاربرهای آنلاین نمایش دهیم ما هر 0.5 ثانیه یکبار transform این ابجکت را برای همه ی کاربرها ارسال میکنیم حالا اگر از 100 بسته ارسالی 90 تا دریافت شود و 10 بسته تحویل گرفته نشود مشکل خاصی ایجاد نمی کند , این دقیقا زمانیست که از دست دادن داده های ارسالی برای ما مهم نیست ,

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


برای مشاهده سایر آموزش ها به ادرس زیر مراجعه نمایید , با تشکر.

rosedev.ir