মাল্টিপ্লেয়ার গেমের জন্য কীভাবে একটি সাধারণ গেম সার্ভার গঠন করবেন?


9

আমি একটি সাধারণ গেমের জন্য একটি সাধারণ মাল্টিপ্লেয়ার গেম সার্ভার তৈরি করতে চাই:

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

গেম সার্ভারটি কীভাবে গঠন করব এবং ক্লায়েন্টে কী করা উচিত?

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

সার্ভারে কী করা উচিত এবং আমি মনে করি এটির জন্য একটি প্রোটোকল ডিশ করতে হবে। আমি মনে করি সার্ভারকে গেমের অবস্থা এবং সময় সম্পর্কে নজর রাখতে হবে। কেউ কীভাবে এটি করবেন সে সম্পর্কে পরামর্শ রয়েছে? বা কিছু পড়ার সুপারিশ করতে পারে?

উত্তর:


12

সাধারণভাবে এটি একটি খুব জটিল বিষয়। আপনার দুটি বিবাদী লক্ষ্য রয়েছে (কমপক্ষে যদি আপনি একটি ডেডিকেটেড সার্ভারে প্রতিটি গেম চালানোর পরিকল্পনা না করেন):

  1. প্রতারণা রোধ করতে এবং সমস্ত ক্লায়েন্টরা একই জিনিস দেখতে পেয়েছে তা নিশ্চিত করার জন্য আপনি সার্ভারে যতটা সম্ভব সম্পন্ন করতে চাইবেন।
  2. তবে আপনি চাইছেন জিনিসগুলি ন্যায্য হোক, যার অর্থ যদি একজনের সার্ভারে 0-বার পিং থাকে তবে অন্যদের নেটওয়ার্ক ল্যাগ থাকে, যখন উভয়ই একই সাথে তাদের ইউনিটগুলিতে একটি আদেশ দেয়, "সার্ভার" প্লেয়ারটির একটি সুবিধা রয়েছে ।

আরটিএসের জন্য কীভাবে এটি সমাধান করা যায় তা আমি ঠিক বলতে পারি না। আমরা আমাদের এফপিএস ফায়ারিংয়ের জন্য যা করি তা হ'ল সার্ভারটি কিছুক্ষণ আগে একটি সম্পূর্ণ বিশ্বরাষ্ট্র সংরক্ষণ করে এবং ক্লায়েন্টকে প্রতিটি শটকে টাইমস্ট্যাম্প দেয়। "আমি বরখাস্ত!" এর জন্য নেটওয়ার্ক বার্তা যখন! সার্ভারে পৌঁছে যায়, সার্ভার বিশ্বকে আবার রোল করতে পারে এবং পৃথিবীতে সংঘর্ষের পরীক্ষা ইত্যাদি করতে পারে "যখন শটটি চালিত হয়েছিল তখন ক্লায়েন্টটির জন্য এটি দেখেছিল"।

যদি আপনি প্রচুর ইউনিট রাখার পরিকল্পনা করে থাকেন তবে সার্ভারটি পরিচালনা করার জন্য আপনার খুব বেশি প্রসেসিং হওয়ার সমস্যাও রয়েছে। আপনি যদি হ্যাকিং বা প্রতারণা সম্পর্কে ভীতিজনক চিন্তিত না হন তবে আমি ক্লায়েন্টদের উপর প্যাথফাইন্ডিং করার পরামর্শ দিচ্ছি এবং এর ফলাফলগুলি সার্ভারে প্রেরণ করব।

তবুও অন্য বিকল্পটি হতে পারে এর পরিবর্তে পিয়ারপিপি করা, প্রতিটি ক্লায়েন্টকে স্থানীয় দলগুলির জন্য আপডেটগুলি সরবরাহ করার সুযোগ দেওয়া, তবে তারপরে কী কী আঘাত করবে এবং কীভাবে হিট করবে তা কীভাবে নির্ধারণ করা যায় তা নিয়ে প্রশ্ন উঠে যায়।

এই প্রকল্পটি কতটা জটিল এবং আপনি এতে কতটা ব্যয় করতে ইচ্ছুক তার উপর নির্ভর করে আমার সেরা পরামর্শটি হ'ল প্রাথমিক কিছু সিদ্ধান্ত নেওয়া এবং এটি পরীক্ষা করার জন্য এটিতে কাজ শুরু করা।


1
আসলে তিনটি (বা আরও বেশি) বিবাদী লক্ষ্য রয়েছে। তৃতীয়টি হ'ল পারফরম্যান্স, সার্ভারে পুরোপুরি রিয়েলটাইম গেমের স্থিতি রাখা এবং আপডেট করা প্রচুর সংস্থান ব্যবহার করে।
বার্ট ভ্যান হিউকেলোম

2
ওহ, এবং অন্যান্য খেলোয়াড়ের ল্যাগের গড়ের সমান যা কৃত্রিম ল্যাগটি চালু করে আপনি খুব সহজেই 2 টি সমাধান করতে পারেন। ঠিক আছে, যদি আপনি "এটি সবার পক্ষে খারাপ করা" একটি সমাধান বলতে পারেন তবে তা।
বার্ট ভ্যান হিউকেলোম

@ বার্ট: আংশিক সত্য, তবে অবশ্যই আপনি কৃত্রিমভাবে কতটা পিছিয়ে পড়ছেন তার একটি ক্যাপ থাকা উচিত, বা ধীর সংযোগগুলি ক্রমাগত দ্রুত সংযোগগুলিকে খুব বেশি পিছনে যেতে বাধ্য করতে পারে, যা এখন আপনি যা চান তা অবশ্যই।
o0 '

ক্লায়েন্টের সাথে করা হলে সর্বোত্তম পথ সন্ধান করা কোনও সমস্যা নয়, যতক্ষণ না সে এটি খুঁজে পেয়ে সমাধানটি সার্ভারে প্রেরণ করে, যা - সমস্ত গতিবিধির সাথে - এটি সঠিক কিনা তা পরীক্ষা করে।
o0 '

2

মূলত দুটি পন্থা রয়েছে:

  1. বিশ্বস্ত ক্লায়েন্ট
  2. অবিশ্বস্ত ক্লায়েন্ট

বিশ্বস্ত ক্লায়েন্টটি কিছুটা জটিল, তবে এর সুবিধা রয়েছে যে আপনি সার্ভার থেকে আপনার প্রচুর গণনা অফলোড করতে পারেন। মাল্টিপ্লেয়ার গেমসের জন্য সার্ভার অপারেশন ব্যয় একটি বৃহত্তম সমস্যা এবং আপনার স্কেলিবিলিটি গুরুতরভাবে হ্রাস করবে।

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

যদি আপনি কোনও ধরণের লবি বা চ্যাট করার পরিকল্পনা করেন তবে এই বিষয়গুলির প্রত্যেকটি একটি অতিরিক্ত সার্ভারে পরিচালনা করুন। এটি রাস্তায় জিনিসগুলিকে অনেক সহজ করে তুলবে।


ধন্যবাদ, তথ্যপূর্ণ ছিল। আমি মনে করি আমি অবিশ্বস্ত ক্লায়েন্টদের জন্য যাব এবং সার্ভারে কাজটি অবশ্যই করা উচিত। আমার প্রথম দিকে অনেক খেলোয়াড় থাকবে না।
জোনাস

1
"আমার অনেক খেলোয়াড় থাকবে না ..." আমি যে বিকাশকারী আমাকে সেই লাইন দিচ্ছে এবং ছয় সপ্তাহ পরে ফিরে আসার সাথে আমি তা গণনা করতে পারি না: "আমার এই 5000 খেলোয়াড় আমার খেলাটি খেলতে চাইছে, কিন্তু আমি স্কেল করতে পারছি না :( "। কেবল এটি মাথায় রাখুন!
Andreas

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