প্রোটোকলের অনুগত পদ্ধতিতে কীভাবে আপনার প্রাসঙ্গিক ডেটা উপস্থাপন করতে হয় তা আপনার প্রথমে জানতে হবে। এটি গেমের সাথে সম্পর্কিত ডেটার উপর নির্ভর করে। আমি উদাহরণ হিসাবে একটি আরটিএস গেম ব্যবহার করব।
নেটওয়ার্কিংয়ের উদ্দেশ্যে, গেমের সমস্ত সত্ত্বা গণনা করা হয় (যেমন পিকআপস, ইউনিট, ভবন, প্রাকৃতিক সম্পদ, ধ্বংসাত্মক)।
খেলোয়াড়দের তাদের সাথে সম্পর্কিত ডেটা থাকতে হবে (উদাহরণস্বরূপ সমস্ত দৃশ্যমান ইউনিট):
- এরা কি জীবিত নাকি মৃত?
- এগুলি কি ধরণের?
- তারা কতটা স্বাস্থ্য রেখে গেছে?
- বর্তমান অবস্থান, আবর্তন, বেগ (গতি + দিক), অদূর ভবিষ্যতে পথ ...
- ক্রিয়াকলাপ: আক্রমণ, হাঁটা, বিল্ডিং, ফিক্সিং, নিরাময় ইত্যাদি ...
- বাফ / ডাব স্থিতি প্রভাব
- এবং সম্ভবত অন্যান্য পরিসংখ্যান যেমন মানা, ঝাল এবং কি না?
খেলায় প্রবেশের আগে প্রথমে প্লেয়ারকে অবশ্যই পুরো রাজ্যটি গ্রহণ করতে হবে (বা বিকল্পভাবে সেই খেলোয়াড়ের সাথে সম্পর্কিত সমস্ত তথ্য)।
প্রতিটি ইউনিটের একটি পূর্ণসংখ্যা আইডি থাকে। বৈশিষ্ট্যগুলি গণনা করা হয় এবং তাই অবিচ্ছেদ্য শনাক্তকারীও থাকে। ইউনিট আইডিগুলি 32 বিট দীর্ঘ হতে হবে না (এটি আমরা যদি সাগরের না হই তবে তা হতে পারে)। এটি খুব ভাল 20 বিট হতে পারে (বৈশিষ্ট্যের জন্য 10 বিট রেখে)। ইউনিটগুলির আইডি অনন্য হতে হবে, ইউনিটটি তাত্ক্ষণিকভাবে এবং / বা গেমের জগতে যুক্ত করা হলে এটি খুব ভালভাবে কাউন্টার দ্বারা নির্ধারিত হতে পারে (মানচিত্র যখন বিল্ডিং এবং সংস্থানগুলি একটি স্থায়ী ইউনিট হিসাবে বিবেচিত হয় এবং সংস্থানগুলি একটি আইডি নির্ধারণ করতে পারে বোঝাই হয়)।
সার্ভারটি বর্তমান বৈশ্বিক অবস্থা সঞ্চয় করে। প্রতিটি খেলোয়াড়ের অতি সাম্প্রতিক আপডেট হওয়া রাষ্ট্রটি list
সাম্প্রতিক পরিবর্তনগুলির একটি পয়েন্টার দ্বারা প্রতিনিধিত্ব করে (পয়েন্টারের পরে সমস্ত পরিবর্তনগুলি এখনও সেই খেলোয়াড়ের কাছে প্রেরণ করা হয়নি)। পরিবর্তনগুলি যুক্ত হওয়ার সাথে যুক্ত list
হয়। একবার সার্ভার শেষ আপডেটটি প্রেরণের সাথে শেষ হয়ে গেলে, তালিকার উপর দিয়ে এটি পুনরাবৃত্তি হতে শুরু করতে পারে: সার্ভার প্লেয়ারের পয়েন্টারটিকে তালিকার পাশের তালিকায় নিয়ে যায়, সমস্ত পরিবর্তন সংগ্রহ করে এবং একটি বাফারে রাখে যেটি প্রেরণ করা হবে প্লেয়ার (যেমন প্রোটোকলের ফর্ম্যাটটি এরকম কিছু হতে পারে: ইউনিট_আইডি; অ্যাট্রি_আইডি; নতুন_মূল্য) নতুন ইউনিটগুলিকেও পরিবর্তন হিসাবে বিবেচনা করা হয় এবং প্রাপ্ত খেলোয়াড়দের কাছে তাদের সমস্ত বৈশিষ্ট্যযুক্ত মান সহ প্রেরণ করা হয়।
যদি আপনি কোনও আবর্জনা সংগ্রাহকের সাথে কোন ভাষা ব্যবহার না করে থাকেন তবে আপনাকে অলস পয়েন্টারটি সেটআপ করতে হবে যা পিছনে থাকবে এবং তারপরে তালিকার সর্বাধিক পুরানো খেলোয়াড় পয়েন্টারটি ধরে, পথে অবজেক্টগুলিকে মুক্ত করবে। আপনি কোনও খেলোয়াড় অগ্রাধিকারের স্তূপের মধ্যে সর্বাধিক পুরানো বা অলস পয়েন্টার সমান না হওয়া অবধি পুনরায় পুনরুক্ত এবং মুক্ত তা মনে করতে পারেন (যেমন প্লেয়ার পয়েন্টারগুলির মধ্যে একই আইটেমটির দিকে পয়েন্টার)।
কিছু প্রশ্ন আপনি উত্থাপন করেন নি এবং আমি মনে করি আকর্ষণীয় হ'ল:
- ক্লায়েন্টদের প্রথমে সমস্ত ডেটা সহ একটি স্ন্যাপশট গ্রহণ করা উচিত? তাদের দৃষ্টিভঙ্গির বাইরে আইটেমগুলি সম্পর্কে কী? আরটিএস গেমগুলিতে যুদ্ধের কুয়াশা সম্পর্কে কী? আপনি যদি সমস্ত ডেটা প্রেরণ করেন তবে ক্লায়েন্টটিকে ডেটা প্রদর্শন করতে হ্যাক করা যেতে পারে যা প্লেয়ারের জন্য উপলব্ধ না হওয়া উচিত (আপনার নেওয়া অন্যান্য সুরক্ষা ব্যবস্থাগুলির উপর নির্ভর করে)। আপনি যদি কেবল প্রাসঙ্গিক ডেটা প্রেরণ করেন তবে সমস্যাটি সমাধান হয়ে যায়।
- কখন সমস্ত তথ্য প্রেরণের পরিবর্তে পরিবর্তনগুলি প্রেরণ করা জরুরি? আধুনিক মেশিনগুলিতে ব্যান্ডউইদথ উপলভ্য বিবেচনা করে, আমরা কি সমস্ত তথ্য প্রেরণের পরিবর্তে একটি "ব-দ্বীপ" প্রেরণ করে কিছু লাভ করি, তা যদি হয় তবে?