কোনও সকেট সার্ভার এবং গেম সার্ভারের আলাদা প্রক্রিয়া হওয়া উচিত?


14

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

অন্য বিকল্পটি হ'ল উভয় জিনিস একক প্রক্রিয়াতে সম্পন্ন করা। আগত বার্তাগুলি সন্ধান করা এবং সঠিক ক্রমে এগুলি কার্যকর করা কোনও থামার সমস্যা হওয়া উচিত নয়।

আমি ভাবছি দুটি "ক্রিয়াকলাপ" আলাদা করার জন্য অতিরিক্ত সংস্থানগুলি আসলেই মূল্যবান কিনা। আমি কীভাবে সিদ্ধান্ত নেব? আমি কোনও উপকার / কনস শুনতে চাই।


1
উভয় অংশই কীভাবে যোগাযোগ করে? সকেট?
vz0

আপনি কি নিজেকে আলাদাভাবে যোগাযোগের কৌশল ব্যবহার করতে "শ্রোতা" পরিবর্তন করতে, বা একাধিক ধরণের ক্লায়েন্ট-সার্ভার যোগাযোগের জন্য বিকল্প যুক্ত করার কল্পনা করেন (যেমন মোবাইল ক্লায়েন্টদের যদি অন্যভাবে যোগাযোগ করতে হয়)? যদি তা হয় তবে এটি আলাদা করার উপযুক্ত হতে পারে যাতে আপনি প্রয়োজনীয় হিসাবে মডিউলগুলি ইন / আউট বদল করতে পারেন।
জন গল্প

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

উত্তর:


17

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

যদি তারা না পারে , এটি নিয়ে ভাবার মতো নয়। স্পষ্টতই তারা এত বেশি সংযুক্ত যে তারা সত্যই পৃথক প্রক্রিয়া নয়।

যদি তারা তা করতে পারে এবং ভবিষ্যতে তাদের প্রতিস্থাপনের জন্য আপনি নিজেকে বিভিন্ন উপাদানগুলিতে ফেলে যেতে চাইছেন তবে ওএস-সরবরাহিত প্রক্রিয়া বিমূর্তি সাহায্য করতে পারে।

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


11

পৃথক প্রক্রিয়া যা ক্লায়েন্টদের কাছ থেকে সংযোগ এবং বার্তাগুলি শুনে এবং স্থানীয় সকেটগুলির মাধ্যমে ডেটা প্রেরণ করে বা স্ট্যান্ডিনের মাধ্যমে অন্য প্রসেসে প্রেরণ করে যা প্রকৃত গেম সার্ভার চালায়?

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

আসুন কয়েকটি কারণগুলি বহু-স্তরের আর্কিটেকচার ব্যবহার করার কয়েকটি কারণ দেখুন:

  1. লোড ব্যালেন্সিং - যদি আপনি একাধিক কর্মী মেশিনে আপনার কাজের চাপ ছড়িয়ে দিতে চান তবে ভারসাম্য বজায় রাখুন sense যদি আপনার প্রোগ্রামটিতে একই রকম বাধা রয়েছে যা আপনি একই মেশিনে একাধিক সমবর্তী কর্মী প্রক্রিয়াটি সমাধান করে সমাধান করতে চান, তবে বাস্তবে বাধাটি সমাধান করা দীর্ঘমেয়াদে সেরা, তবে একটি স্বল্প মেয়াদী কর্মক্ষেত্র হিসাবে, কর্মী প্রক্রিয়াগুলি স্প্যানিং হতে পারে।
  2. প্রিভিলেজ পৃথকীকরণ - সম্ভবত আপনি নিজের গেম সার্ভারের বিপরীতে বা তার বিপরীতে স্বয়ংক্রিয়ভাবে অ্যাক্সেস পেতে আপনার চ্যাট সার্ভারে কোনও সুরক্ষা লঙ্ঘন করতে চান না। যদি আপনার গেম সার্ভারটি আপনার ইন-গেম চ্যাট সার্ভার থেকে পৃথক থাকে, আপনি আলাদা সুরক্ষা ডোমেনে থাকতে আপনার গেম সার্ভার এবং চ্যাট সার্ভারটি কনফিগার করতে পারেন (যেমন পৃথক ব্যবহারকারী হিসাবে চালানো, বিভিন্ন অ্যাক্সেসের সুযোগসুবিধ, পৃথক প্রক্রিয়া সীমা ইত্যাদি)।
  3. জিরো ডাউনটাইম আপগ্রেড - আপনি যদি শূন্য ডাউনটাইম আপগ্রেড অর্জন করতে চান তবে আপনার একাধিক স্তর থাকতে হবে এবং সিস্টেমটি এমনভাবে কনফিগার করতে হবে যখন আপনি সার্ভিসিংয়ের জন্য কোনও সার্ভার নামান, তার অনুরোধগুলি ক্রমাগত নিশ্চিত করার জন্য একই স্তরের অন্যান্য সার্ভারগুলিতে পুনঃনির্দেশিত করা হবে সেবা।
  4. ব্রেকিং সীমা - যদি আপনি সকেটের সীমা, ফাইল বর্ণনাকারী সীমা, একটি গ্লোবাল ইন্টারপ্রেটার লক ইত্যাদিতে পৌঁছে থাকেন তবে আপনি একাধিক প্রক্রিয়া চালিয়ে সেই সীমাটি ঘিরে কাজ করতে সক্ষম হতে পারেন। এটি সমাধানের আরেকটি উপায় হ'ল সীমা পরিবর্তন করা, তবে এটি সর্বদা সহজ নয় কারণ আপনাকে কার্নেলটি পুনরায় কম্পাইল করতে হতে পারে, বা সুরক্ষা বা কর্মক্ষমতা সম্পর্কিত প্রভাব থাকতে পারে।
  5. রিসোর্সেস লিকেজ সীমাবদ্ধ করা - আপনি এমন সফ্টওয়্যার লিখতে চান যা সংস্থানগুলি ফাঁস করে না, তবে পুরোপুরি আবর্জনা পরিচালিত ভাষাগুলিতেও এটি দীর্ঘকালীন প্রক্রিয়াতে অত্যন্ত কঠিন, এবং আরও খারাপ এটি বিকাশের পরিবেশে প্রতিলিপি তৈরির পক্ষে শক্ত। কোনও মাল্টিটিয়ার আর্কিটেকচার আপনাকে পরিষেবা ব্যাহত না করে, নির্দিষ্ট সময় বা সংখ্যার অনুরোধের পরে গেম সার্ভারগুলিকে মেরে ফেলা এবং পুনরায় সার্জন করতে দেয় service

5

আমি রাচেট ফ্রিকের সাথে একমত যতক্ষণ না আপনার কাছে একটি একক গেমস্ভার রয়েছে, ততই ঝামেলার মতো নয়।

যাইহোক, যখন আপনার অনুভূমিকভাবে স্কেল করা প্রয়োজন তখন এই আর্কিটেকচারটি কার্যকর প্রমাণিত হতে পারে। যখন কোনও গেমসভারটি আর পর্যাপ্ত থাকে না এবং পারফরম্যান্সের কারণে আপনার গেমটি একাধিক গেমসভারসে বিতরণ করতে হয়, তখন "সকেট সার্ভার" আর্কিটেকচারটি সকেট সার্ভারকে একটি লোড ব্যালেন্সারে রূপান্তর করতে খুব সহজেই রূপান্তরিত হতে পারে যা স্বয়ংক্রিয়ভাবে অনেকগুলি ব্যাকএন্ডের একটিতে সংযোগ রুট করে could সার্ভার।

তবে আপনি যখন নিশ্চিত হন না যে আপনার কখনই এটির প্রয়োজন হবে, সম্ভবত এই সময়ে দুটি পৃথক সার্ভার অ্যাপ্লিকেশন বিকাশ করা খুব সম্ভবত ove


4

এটি সম্ভবত নয়, বেশিরভাগ ভাষায় অ্যাসিনক্রোনাস সকেট রয়েছে যা আপনাকে ডেটা অপেক্ষা করার সময় অবরুদ্ধ ছাড়াই একসাথে একাধিক সংযোগ ব্যবহারের অনুমতি দেয়। এটি "সকেট সার্ভার" অংশটি ওএস / কার্নেলের কাছে স্থানান্তর করে।

স্পষ্টত সকেট সার্ভারের সাহায্যে আপনি স্থানীয় সকেটের মাধ্যমে ডেটা পাস করার সাথে সাথে কয়েকটি অতিরিক্ত অনুলিপি ব্যয় করতে হবে; একটি জিনিস যা স্কেলাবিলিটিটি মেরে ফেলবে তা হ'ল অতিরিক্ত কপি যেখানে আপনার প্রয়োজন নেই।


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