অবিরাম অনলাইন গেমগুলিতে প্লেয়ারের অবস্থা কতবার সংরক্ষণ করতে হয়?


9

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

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


আমি প্রতি 10 সেকেন্ডে গেমের অবস্থাটি সংরক্ষণ করি। আমি মনে করি এটি যথেষ্ট, এটি লক্ষ্য করা যায় না (এবং আমি আমার এমএমওআরপিজি সার্ভারটি আমার নেটবুকটিতে চালাচ্ছি যার মধ্যে 512 এমবি র‌্যাম রয়েছে)।
jcora

উত্তর:


10

আমার মনে আছে ওয়ার্ল্ড অফ ওয়ারক্রাফ্টের মতো একটি traditionalতিহ্যবাহী এমএমওআরপিজি।

প্রতিটি প্লেয়ার এবং স্বায়ত্তশাসিত জিনিস থেকে প্রতিটি কমান্ডের পরে সংরক্ষণ করুন (যেমন এনপিসি)

  • ধ্রুব ব্যাকআপ। সার্ভারটি যে কোনও মুহুর্তে নামতে পারে এবং গেমের অবস্থা সেই মুহুর্তে (বা যত তাড়াতাড়ি সম্ভব, যেভাবেই হোক) সংরক্ষণ করা হয়।
  • সার্ভার কর্মক্ষমতা প্রভাব; এমনকি এটি অ-ব্লক করা (যেমন অন্য থ্রেডে), এমনকি ডাটাবেস অন্য সার্ভারে থাকলেও, এটি প্রক্রিয়া করছে যে আপনি অন্যথায় না করেন। এটি যদি আপনি বলার মতো অবরুদ্ধ করে থাকে তবে অন্য থ্রেডটি এটি পরিচালনা করতে হবে এবং এটি এমন একটি থ্রেড যা অন্য কোনও কিছুর সাথে দখল করা যেতে পারে।
  • I / O বর্ধমান ডিস্ক, ফলে ঝুঁকি / ব্যর্থতার হার বাড়ছে। আপনি যদি এসএসডিগুলি স্টোরেজের জন্য ব্যবহার করেন, তাদের নিম্ন জীবনকে দেওয়া হয় তবে এটি বিশেষত উদ্বেগজনক।
  • আপনি যদি অন্য সার্ভারে ডাটাবেসটি অফলোড করেন, তবে ব্যান্ডউইথ বৃদ্ধি করেছেন; আপনি যদি ব্যান্ডউইথের জন্য অর্থ প্রদান করছেন এবং এটি যদি কোনও পৃথক নেটওয়ার্ক কার্ডে না থাকে তবে এটি এমন সংস্থান গ্রহণ করছে যা প্লেয়ার ট্র্যাফিক পরিচালনার ক্ষেত্রে আরও ভাল ব্যবহার করা যেতে পারে a
  • সার্ভার যদি এই কমান্ডগুলির স্থিতি সংরক্ষণে আরও এবং আরও পিছনে থেকে যায় তবে কি হবে? অর্থাৎ যদি আরও কমান্ডগুলি সেভ করা যায় তার চেয়ে বেশি আসে, তবে তারা কি সারিতে দাঁড়িয়ে আছে? এই সারিটি কি উপচে পড়েছে এবং ত্রুটির সৃষ্টি করে? আপনি কি সবকিছু থামিয়ে দেন যাতে সারিটি ধরতে পারে?
  • আমার কাছে মনে হচ্ছে যে এই পদ্ধতির বিষয়টি সহজ বলে মনে হচ্ছে, সাবধানে পরিকল্পনা করা দরকার planned উদাহরণস্বরূপ, পরস্পরের উপর নির্ভরশীল ক্রমাগত আদেশগুলি একসাথে সংরক্ষণ করা প্রয়োজন; অন্যথায় কমান্ডগুলির মাঝখানে একটি ব্যর্থতা দেখা দিতে পারে এবং কেবলমাত্র একটি সংরক্ষণ করা হবে তবে অন্যটি নয়। দুটি খেলোয়াড় যদি কোনও বাণিজ্য সম্পাদন করে এবং দুটি কমান্ড ডিস্কে সংরক্ষণ করা হয় তা বিবেচনা করুন: "প্রাপকের কাছে আইটেমটির 1 যুক্ত করুন" এবং "প্রেরকের কাছ থেকে আইটেমটির 1 বিয়োগ করুন"। যদি প্রথম কমান্ডের পরে ব্যর্থতা ঘটে তবে দ্বিতীয় কমান্ডটি সংরক্ষণের আগে আপনার আইটেমের সদৃশ হয়। (যদি অর্ডারটি বিপরীত হয়, তবে আপনার কাছে একটি হারিয়ে আইটেম রয়েছে)

পর্যায়ক্রমে সবকিছু সংরক্ষণ করুন

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

লগআউটে একটি অক্ষর সংরক্ষণ করুন (অন্য কিছু সংরক্ষণ করবেন না)

  • খেলোয়াড়ের কাছে সর্বাধিক গুরুত্বপূর্ণ বিষয় হ'ল তাদের চরিত্র, যার মধ্যে রয়েছে তাদের থাকা আইটেমগুলি, তারা যে দক্ষতা অর্জন করেছে, তাদের বন্ধুদের তালিকা ইত্যাদি। যদি তারা কোনও দানবকে হত্যা করে এবং লুটগুলি তাদের সামনে মাটিতে থাকে এবং তারপরে সার্ভার ব্যর্থ হয় তবে তারা তাদের লুটপাট বাছাইয়ের সুযোগ না পেয়ে কিছুটা হৃদয়গ্রাহী হতে চলেছে, তবে তারা এটি পেয়ে যাবে। সুতরাং কেবল গুরুত্বপূর্ণ জিনিসগুলি সংরক্ষণ করুন এবং ছোট জিনিসটি ঘামবেন না। উদাহরণস্বরূপ, এনপিসিগুলির অবস্থানগুলি সংরক্ষণ করবেন না; যদি সার্ভারটি ডাউন হয়ে যায়, যখন এটি আবার ফিরে আসবে, তারা সাধারণ অঞ্চলে তাদের উচিত যা তারা হওয়া উচিত sp ব্যতিক্রম অবশ্যই, কোনও "স্মার্ট" এনপিসিগুলির জন্য যে কোনও কারণে তারা সেই স্থানে থাকা দরকার they সার্ভার ডাউন ছিল যখন ছিল।
  • তদুপরি, কোনও খেলোয়াড়কে একসাথে অনেক বেশি ঘন্টা লগইন করা উচিত নয় (দ্রষ্টব্য যে এখানে আমি লগ আউট হিসাবে "একটি লবিতে ফিরে যেতে" বিবেচনা করছি)। তাদের শেষ পর্যন্ত বাথরুমে বিরতি নেওয়া বা খাবার নেওয়া বা তাদের পিতামাতা / বন্ধু / যাই হোক না কেন বা ঘুমের মধ্যে বাধা দেওয়া দরকার। সুতরাং তাদের সত্যিকার অর্থেই বাস্তবিকভাবে ননস্টপে লগ করা উচিত নয়, বলুন, এমনকি সবচেয়ে শক্তিশালী গেমারের জন্য 8 ঘন্টা। যদি কোনও "প্লেয়ার" সত্যই দীর্ঘ সময়ের জন্য লগইন হয়, তবে এটির একাধিক সম্ভাবনা রয়েছে যে এটি হয় একাধিক ব্যক্তি বা বট, এবং উভয়ই পছন্দসই বা স্বাভাবিক নয়।
  • এছাড়াও, আপনার লগআউট প্রক্রিয়াটি ইতিমধ্যে উপরে বর্ণিত ধারাবাহিক কমান্ডগুলির মতো জিনিসগুলি পরীক্ষা করা উচিত checking এটি ইতিমধ্যে অক্ষরটি প্যাক করে নেওয়া উচিত, সুতরাং ডিস্কে ফেলে দেওয়ার স্পষ্টতই এটি প্রথম সময়।

সমাপ্তি চিন্তা

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

সবশেষে, এই পরামর্শটিকে নিখুঁত সত্য হিসাবে গ্রহণ করবেন না। আমি কোনও মাল্টিপ্লেয়ার ব্যাকআপ সিস্টেম লিখিনি। আমি একটি অনলাইন "গেম" এ কাজ করছি , যে কারণে আমি এটি নিয়ে চিন্তা করেছি এবং উপরে আমার চিন্তাভাবনাগুলি লিখেছি, তবে আমি এখনও এটি বাস্তবায়নের পর্যায়ে পৌঁছতে পারি নি। সুতরাং এটি বাস্তব অভিজ্ঞতা ছাড়াই রচনা করা হয়েছে, তবে প্রচুর পড়া এবং বিষয় সম্পর্কে জ্ঞান সংগ্রহের পরে।


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

@ এনটিএসকোবাল্ট - "এসকিউএল স্টাইল ডাটাবেস" না হওয়া পর্যন্ত আমি আপনার সাথে ছিলাম। এসকিউএল কি আসলেই প্রয়োজন? নোএসকিউএল সম্পর্কে কী?
বেটগ্যামিট

@ টিজেমসন আচ্ছা আমার মন্তব্যটি নোএসকিউএল স্পর্শ করার আগে লেখা হয়েছিল। আমি কেবল এটাই বলার চেষ্টা করছিলাম যে আপনার নিজের ফর্ম্যাটটি রোল করা উচিত নয় তবে যাইহোক আমি এসকিউএল এর সুপারিশ করবো কারণ আপনার হাতের আগে স্কিমাটি জানা উচিত (বা অলস হতে হবে এবং সত্তা-কী-মানটি ব্যবহার করুন) এবং ধারাবাহিকতা তার চেয়ে গুরুত্বপূর্ণ ডেটা বিভাজন করার ক্ষমতা। আরও তথ্যের জন্য stackoverflow.com/questions/7339374/… দেখুন ।
এনটিএসকোবাল্ট

1

আমি মনে করি এটি খেলোয়াড় এবং সার্ভারের মধ্যে যে পরিমাণ ট্র্যাফিক রয়েছে তার উপর নির্ভর করে।

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

পালা-ভিত্তিক খেলায়, প্রতিপক্ষের খেলোয়াড়ের প্রতিবারের পাশাপাশি প্রতিপক্ষের খেলোয়াড়ের পালা শেষে (স্বাস্থ্যের ক্ষতি, বানানের প্রভাবগুলি বাঁচান) বাছাইয়ের পরে প্লেয়ারের অবস্থা সংরক্ষণ করা নিশ্চিতভাবেই বোধগম্য হবে।

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


1

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

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


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

দীর্ঘ সময় ধরে চলমান ব্রাউজার গেমটিতে হুবহু কোনও খেলোয়াড় লগ আউট করার সময় বলার সমস্যাটি আসলে তুচ্ছ কিছু নয়।
ল্যান্বো

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