একই প্রক্রিয়াটির মধ্যে সার্ভার এবং ক্লায়েন্ট উভয়ই চলছে


9

প্রশ্ন

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

এই অভ্যাসটি কি কোনও কারণে নিরুৎসাহিত?

প্রসঙ্গ

আমি জিজ্ঞাসার কারণটি হ'ল কারণ আমি তাত্ত্বিক বলেছি যে এই ধারণাটি আমাকে একক প্লেয়ার এবং মাল্টিপ্লেয়ার উভয় মোডকে একই এবং একই হিসাবে ব্যবহার করতে দেয় যা খুব সহায়ক হবে।

আমার চিন্তার রেখাটি অনুসরণ করে, এটি আমার বিতরণটি মনে রেখেছিল:

  • একক প্লেয়ার - একই প্রক্রিয়াতে 1 সার্ভার + 1 ক্লায়েন্ট। যোগাযোগগুলি কীভাবে দ্রুত?
  • মাল্টিপ্লেয়ার - হোস্ট +1 একে অপরের খেলোয়াড়ের জন্য অ্যাডিশনাল ক্লায়েন্টের একক প্লেয়ার হিসাবে একই ।

কার্যকর করা প্রবাহটি আমি চিত্রিত করছি ক্লায়েন্টদের ব্যবহারকারীর ইনপুট গ্রহণ করতে এবং সার্ভারে একটি বিজ্ঞপ্তি প্রেরণ করা। তারপরে সার্ভার এটিকে বৈধতা দেয় এবং সমস্ত ক্লায়েন্টদের দ্বারা কার্যকর করার জন্য একটি ক্রিয়া সম্প্রচার করে। কেবলমাত্র একটি ক্লায়েন্ট (যেমন একক প্লেয়ার) বা একাধিক ক্লায়েন্ট (অর্থাত্ মাল্টিপ্লেয়ার) রয়েছে তা বিবেচনা করা উচিত নয়।

উত্তর:


7

এটি মূলত থ্রেড প্রশ্নের বিপরীতে একটি প্রক্রিয়া, উভয়ই খুব আলাদা নয়, কখনও কখনও থ্রেডগুলিকে লাইটওয়েট প্রক্রিয়া বলে। সবচেয়ে বড় পার্থক্যটি হল একটি পৃথক প্রক্রিয়ার নিজস্ব ঠিকানা স্থান রয়েছে তবে অন্যান্য পার্থক্য রয়েছে (1):

প্রক্রিয়া প্রতি

  • ঠিকানার স্থান
  • গ্লোবাল ভেরিয়েবল
  • ফাইল খুলুন
  • শিশু প্রক্রিয়া
  • মুলতুবি অ্যালার্ম, বাধা এবং সংকেত হ্যান্ডলার

প্রতি থ্রেড

  • প্রোগ্রাম কাউন্টার
  • খাতাপত্র
  • গাদা
  • রাষ্ট্র

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

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

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

ক্রস থ্রেড যোগাযোগের জন্য এই কৌশলগুলির অনেকগুলি বৈধ। তবে আপনি যে কৌশলগুলি ব্যবহার করছেন তার উপর এটি আরও বেশি নির্ভর করে। আপনি আবার টিসিপি-র সাথে যেতে পারেন, তবে সম্ভবত একটি আরও সহজ সিস্টেম ঘটনা এবং কিছু মার্শেলিং হতে পারে, যদিও এটি আপনার গেম লুপটিকে অ-সংঘবদ্ধ (2) করতে পারে।

সোর্স

  1. অপারেটিং সিস্টেমের নকশা এবং বাস্তবায়ন (এমআইএনআইএক্স বই), অ্যান্ড্রু এস টেনেনবাউমের তৃতীয় সংস্করণ
  2. গ্লেন ফিডলারের দ্বারা আপনার টাইমস্টেপটি ঠিক করুন: http://gafferongames.com/game-physics/fix-your-timestep/

1
আমার কেবল সংযোজনটি হ'ল যদি আপনি নির্বিঘ্নে স্থানীয় ক্লায়েন্টকে দূরবর্তী ক্লায়েন্টগুলির মতো একই কোডটি ব্যবহার করে স্থানীয় সার্ভারের সাথে কাজ করতে চান এবং আপনি চান যে এই ক্লায়েন্টটি আবার একই কোডটি ব্যবহার করতে চাইলে কোনও রিমোট সার্ভারের সাথে সংযোগ করতে আপনি যাচ্ছেন 1) সার্ভারের জন্য একটি প্রক্রিয়া ব্যবহার করুন, এবং 2) নেটওয়ার্কিং ব্যবহার করুন কারণ এটি সাধারণ ডিনামিনেটর। আপনার পরিবহন কোডের দুটি সংস্করণ লেখার মতো মনে না হলে, যাইহোক =)
প্যাট্রিক হিউজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.