সার্ভারে গেম যুক্তি! ভাল অথবা খারাপ?


25

আমি বর্তমানে একটি সাধারণ অনলাইন মাল্টিপ্লেয়ার গেমের পরিকল্পনা করছি। এবং এখানে প্রশ্ন। সার্ভারে পুরো গেমটি লজিক তৈরি করা এবং ক্লায়েন্টের কাছ থেকে সার্ভারে কেবল ইনপুটটি পাঠানো কী বোঝায়? কোনটি উপকারিতা এবং দু'পক্ষ বা আমার এমনটি করা উচিত নয় এমন কোনও কারণ আছে?

উত্তর:


37

আপনি সার্ভারে প্লেয়ার ইনপুট প্রেরণ করতে চান না। আপনি সম্ভবত যা করতে চান তা হ'ল প্লেয়ারটি সার্ভারে কী করতে চায় তার একটি বিমূর্ত প্রতিনিধিত্ব পাঠান এবং তারপরে সেখানে যুক্তি চালান।

তেমনি ক্লায়েন্টের যা করা দরকার তা আপনি অবশ্যই প্রেরণ করতে চান না। উদাহরণস্বরূপ, আপনি "এনপিসি এক্স মারা গিয়েছিলেন" বলে কোনও ধরণের বার্তা প্রেরণ করতে পারেন এবং ক্লায়েন্টটি কোন অ্যানিমেশন / শব্দটি বাজবে তা নির্ধারণ করে। ওটার মতো জিনিস.

কৌশলটি হ'ল লাইনটি খুঁজে বের করা যেখানে ব্যান্ডউইথ এবং প্রক্রিয়াকরণ শক্তি (সার্ভারে) লোকদের প্রতারণার হাত থেকে বাঁচিয়ে ট্রাম্প করা হয়। সাধারণত আপনি কেবল সার্ভারে কোনও ধরণের গেম-পরিবর্তনকারী অনুমোদনের সিদ্ধান্ত নেন এবং সমস্ত আনুষঙ্গিক ভিজ্যুয়াল স্টাফ ক্লায়েন্টের কাছে রেখে যান।

এই সাইটটিতে আরও বেশ কয়েকটি নির্দিষ্ট প্রশ্ন রয়েছে পুরো সাইটে। উদাহরণ স্বরূপ:

সংঘর্ষ সনাক্তকরণ সার্ভার-সাইড বা ক্লায়েন্ট / সার্ভারের মধ্যে সহযোগিতামূলকভাবে করা উচিত?

কে এমএমওতে এআই গণনা করে?

গেম হোস্টের কর্তৃত্ব হওয়া উচিত, না অন্য বোবা ক্লায়েন্ট?


4
আমাকে এতে মারধর করুন এছাড়াও, গেমের স্টাইলের উপর নির্ভর করে আপনি কিছু ক্লায়েন্ট-সাইড প্রেডিকশন করতে / প্রয়োজন করতে পারেন।
জন ম্যাকডোনাল্ড

14

ঠিক আছে, আপনি উত্তর পেয়েছেন তবে আপনার আসল উত্তরটি "নিজেকে চেষ্টা করুন" এ। খেলা গেম থেকে জিনিস আলাদা হয়।

আমি কয়েকটি বিতরিত নেটওয়ার্ক গেম ডিজাইন কোর্সের জন্য বেশ কয়েকটি মাল্টিপ্লেয়ার গেমস করেছি। সবচেয়ে চ্যালেঞ্জিং ছিল রিয়েলটাইম অ্যাকশন গেম করা যেখানে অনেক খেলোয়াড় জড়িত ছিল এবং জাহান্নামের মতো ইনপুট প্রেরণ করছিল। এটি যখন এ আসে, সবকিছু সমস্যা হয়ে ওঠে। আপনি যেমনটি ত্ররতকে প্রেরিত প্রথম লিঙ্কটি দেখেছেন, এমনকি কোনও জোটবদ্ধতা নির্ধারণ করাও সমস্যা হয়ে দাঁড়ায়। এবং আপনি পঠন-শোনার মত শর্তাদি পিছিয়ে পড়ুন, অন্তরঙ্গকরণ, এক্সট্রা পোপ্লেশন, পূর্বাভাস ... তবে আপনি যদি কখনও নিজেকে স্ক্র্যাচ থেকে কোডিংয়ের চেষ্টা না করেন তবে আপনি কেবল এই শব্দগুলি গ্রহণ করবেন এবং তাদের সত্যিকারের অর্থ কী তা আপনি জানতে পারবেন না।

আমার সুপারিশটি হ'ল:

পদক্ষেপ 1
এখনই পুরোপুরি অনুমোদিত সার্ভার ভিত্তিক নকশা দিয়ে শুরু করুন। যেমনটি আপনি বলেছেন, কেবল সার্ভারে ব্যবহারকারীর ইনপুটগুলি প্রেরণ করুন এবং সার্ভারকে সবকিছু করতে দিন এবং ক্লায়েন্টদের ফলাফল পেতে দিন। আপনার খেলা পুরোপুরি ধারাবাহিকভাবে কাজ করবে। তবে আপনি যখন আপনার ক্লায়েন্টদের দিকে নজর রাখবেন, আপনি কিছু ল্যাগ, কিছু টেলিপোর্ট সমস্যা, মসৃণ চলাচল নয় ... লক্ষ্য করবেন।

পদক্ষেপ 2
ক্লায়েন্ট পক্ষ থেকে সমস্যাগুলি ঠিক করা শুরু করুন। উদাহরণস্বরূপ টেলিপোর্টিং সমস্যা। আপনার চরিত্রটি (0,0) এ ছিল এবং সার্ভারটি জানিয়েছে যে আপনি এখন (100,100) এ আছেন। আপনার চরিত্রটি কেবলমাত্র (100,100) টেলিপোর্ট করবে যা দুর্দান্ত নয়। বিরক্তি আসে। আপনার ক্লায়েন্টের পাশের একটি কোড থাকা উচিত যা চরিত্রটি (0,0) থেকে (100, 100) সাবলীল উপায়ে স্লাইড করবে। হ্যাঁ, আপনি আপনার চরিত্রটি (0,0) থেকে (100,100) এ স্থানান্তর করবেন তবে কত দ্রুত? আপাতত আপনি প্রতিটি সার্ভার আপডেটের মধ্যে সময়ের পার্থক্যটি ব্যবহার করতে পারেন। যদি আপনার সার্ভারটি একটি সেকেন্ডে 10 প্যাকেট প্রেরণ করে যার অর্থ প্রতিটি প্যাকেটের মধ্যে 100 এমএস দেরি।

ধাপ 3
এখন আপনার গেমটি দ্রুত নেটওয়ার্কগুলির জন্য ইতিমধ্যে ভাল যেখানে সেখানে (1-50) এমএসের বিলম্ব হয়। তবে কোনও প্যাকেটের ক্ষতি হলে, উচ্চ বিলম্বিত বা গণনাটি সার্ভারে দীর্ঘ সময় নেয় যদি এটি ডুমড হয় ct ect। এই পরিস্থিতিতে আপনি যখন বাম তীর টিপবেন তখন খেয়াল করবেন, আপনি 200 এমএসের বিলম্বের সাথে আপনার চরিত্রটি বাম দিকে সরে যেতে দেখবেন। আপনার প্যাকেটের মধ্যে বিলম্ব সার্ভারে চলে যায়, গণনার সময় এবং আপনার শেষ অবস্থান নিয়ে ফিরে আসে। এটি সার্ভার অনুমোদিত ডিজাইনের সবচেয়ে খারাপ অসুবিধা। প্লেয়ার চাইছেন যে তিনি চলে যাওয়ার সাথে সাথেই তার চরিত্রটি সরানো উচিত, আপনি তাকে অপেক্ষা করতে পারবেন না। ভাগ্যক্রমে ক্লায়েন্টেরও সার্ভারের মতো একই কোড রয়েছে, তবে তা কেন তাড়াতাড়ি ক্লায়েন্টের উপর চালাবেন না এবং সার্ভারের উত্তর দিয়ে চূড়ান্ত ফলাফলটি ঠিক করবেন না? মূলত ইনপুট পূর্বাভাস কি তা স্থায়ী করে। ক্লায়েন্ট প্রেসগুলি বামে রয়েছে, তার পাশের কোডটি তাকে বাম দিকে নিয়ে যাবে, কিছু সময় পরে 200 এমএস বলতে দেয়, আসল অবস্থানটি সার্ভার থেকে আসে এবং ক্লায়েন্ট এটির সাথে তার অবস্থান সংশোধন করে। যদি সবকিছু ঠিকঠাক হয়ে যায়, ক্লায়েন্ট কোনও কিছুই খেয়াল করবেন না, "পদক্ষেপ 2" আমাদের এটির জন্যও সহায়তা করবে।

ঠিক আছে, নেট এই বিষয় সম্পর্কে অনেক টিউটোরিয়াল এবং জিনিস আছে। তবে আমি এখানে 2 টি পছন্দ করি:

সত্যিই ভাল, অন্ধকার দাগগুলি জুড়ে: ভালভ-উত্স ইঞ্জিন মাল্টিপ্লেয়ার নেটওয়ার্কিং
ইতিহাসের ধরণ , পড়ার মজা এবং এর মূল্য: 2800 উপর 1500 আর্চারস ,


3

পেশাদাররা:

  • এই পদ্ধতির আরও জলদস্যু প্রমাণ
  • আপনি আরও সহজে আপডেটগুলি প্রয়োগ করতে পারেন
  • কেন্দ্রীভূত সম্প্রদায়

কনস:

  • বিশাল ব্যান্ডউইথ প্রয়োজনীয়তা
  • কিছু ব্যবহারকারী এই পদ্ধতির (গোপনীয়তা এবং স্টাফ) ঘৃণা করতে পারে
  • স্থানীয় গেমপ্লে (ল্যান পার্টি), একক প্লেয়ার নিয়ে সমস্যা

ল্যান গেমপ্লে নিয়ে সমস্যাগুলি একটি উত্সর্গীকৃত সার্ভার বাইনারি সরবরাহ করে বা ক্লায়েন্টদের মধ্যে একটিরকে সার্ভার হিসাবে কাজ করার অনুমতি দিয়ে এড়ানো যায়। একটি সমাধান যা একক প্লেয়ার এবং ল্যান উভয় সমস্যার সমাধান করে তা হ'ল স্বচ্ছভাবে ক্লায়েন্ট কম্পিউটারে একটি সার্ভার হোস্ট করা (যদি এটি কেবলমাত্র একক প্লেয়ার গেম হয় তবে এই পদ্ধতির এবং traditionalতিহ্যবাহী বাইনারিগুলির মধ্যে কম্পিউটিং পাওয়ারে কোনও উল্লেখযোগ্য পার্থক্য হওয়া উচিত নয়)। এটি সমস্ত গেমের ধরণের জন্য কাজ নাও করতে পারে
3

2

সার্ভার সাইড লজিক স্কেলিবিলিটি সমস্যাগুলিও তৈরি করে - আপনাকে আপনার সার্ভারের সমস্ত ক্লায়েন্টের জন্য সমস্ত কাজ করতে হবে - প্রতিটি ক্লায়েন্টকে মোট কাজটির নিজের ভাগ করে দেওয়ার জন্য আয়াতগুলি।


মজার বিষয় যখন আমি এখানে ২০১ similar সালে অনুরূপ প্রশ্ন জিজ্ঞাসা করেছি, সবাই আমাকে কেবল "ক্লায়েন্টকে বিশ্বাস করবেন না" বলেছিল।
newguy

এটি গেমের উপর নির্ভর করে, তবে ক্লায়েন্টরা নিজেরাই প্রতারণা করা গুরুতর উদ্বেগ নয়, এবং ক্লায়েন্টরা অন্য, সৎ, ক্লায়েন্টদের বিরুদ্ধে প্রতারণা করছে; ক্লায়েন্টকে বিশ্বাস না করার জন্য সার্ভার যা-ই করুক না কেন, এর পরিবর্তে সৎ ক্লায়েন্টরা তা করতে পারে।
dyer

2

আপনি কোন গেমটি তৈরি করতে চান এবং গেমের কোন অংশটি নির্ভর করে। যদি আরটিএস (বা লকস্কেপড মডেল সহ কোনও গেম) বিকাশ করা হয় তবে অবশ্যই আপনার কেবল ইনপুটটি পাঠানো উচিত এবং কোন সিমুলেশন পদক্ষেপটি ইনপুটটি পুনরুদ্ধার করা হয়েছিল।

আপনি যদি একটি শ্যুটার করতে চান তবে আপনি ইনপুট এবং বিমূর্ত ফাংশন উভয়ই ব্যবহার করতে পারেন। যদি আপনি অবাস্তব টুর্নামেন্ট 3 কে কেস হিসাবে গ্রহণ করেন তবে তারা মূলত প্রতিলিপিযুক্ত ফাংশন কলগুলির মাধ্যমে মাল্টিপ্লেয়ার তৈরি করেছে।
চলাচলের জন্য তারা প্লেয়ার ইনপুট নেয় (প্রতিটি ক্রিয়াকলাপের জন্য একক বিটকে সংকুচিত করে) ডেল্টা ঘূর্ণন, ত্বরণ এবং টাইমস্ট্যাম্প এবং এটি সার্ভারে প্রেরণ করে।
অস্ত্রের মতো অন্যান্য উদ্দেশ্যে আপনি গুলি করার সময় তারা সিঙ্ক্রোনাইজ হন (এএফএআইকে, এখনও এই অংশটি গভীরতার দিকে তাকাতে হয়নি)।
স্বাস্থ্যের মতো আরও স্থির / কম প্রায়ই পরিবর্তিত মানগুলির জন্য তারা প্রোগ্রামার নির্দিষ্ট করে তার উপর নির্ভর করে ক্লায়েন্ট বা সার্ভারে পরিবর্তনশীল প্রেরণ করে।

আর আরটিএসবিহীন গেমের জন্য ক্লায়েন্টের ভবিষ্যদ্বাণী মনে রাখবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.