সি / সি ++ মাল্টিপ্লেয়ার গেমের জন্য নেটওয়ার্ক বার্তাগুলি সিরিয়ালকরণ এবং আনসিরিয়ালাইজ করার সর্বোত্তম উপায়গুলি কী?


11

আমরা এখনই JSON ব্যবহার করছি এবং ক্লায়েন্ট এবং সার্ভারের মধ্যে কিছু ধরণের বার্তাগুলির জন্য বাইনারি বিন্যাসে যেতে চাই।

আমি কি কেবল সকেটের স্ট্রাক্ট পড়ি? প্রোটিকল বাফার / বিকাশ ব্যবহার করবেন?

আমি কীভাবে ডেটা অ্যারে উপস্থাপন করব?

প্যাকিং / আনপ্যাকিং ডেটার জন্য ইন্টারফেসটি দেখতে কেমন হবে?

উত্তর:


12

ধরে নেওয়া যাক ...

  1. আপনি বাইটের বাফারে রূপান্তর করার কথা বলছেন
  2. আপনি ইউডিপি ব্যবহার করছেন এবং পারফরম্যান্স একটি উদ্বেগের বিষয়

কাঠামো সংজ্ঞায়িত করার জন্য আপনার প্যাকেটে স্থান অপচয় না করার চেষ্টা করুন। IE প্যাকেটের প্রকারটি বোঝাতে সর্বনিম্ন একটি বাইট প্রেরণ করে, তারপরে ধরে নিন প্রতিটি প্যাকেট প্রাপ্ত প্যাকেটের সেই ধরণের পূর্বনির্ধারিত কাঠামো অনুসরণ করে

আমি কি কেবল সকেটের স্ট্রাক্ট পড়ি? প্রোটিকল বাফার / বিকাশ ব্যবহার করবেন?

  • হ্যাঁ, আপনি যদি পুরো কাঠামোর প্রয়োজন হয় তবে পুরো কাঠামোটি পড়ুন
  • না, প্যাকেটের কাঠামোটি নিজেই তৈরি করুন, এই পদ্ধতিগুলি ব্যবহার করে এটি অবশ্যই সিরিয়ালাইজেশনের চেয়ে ছোট হবে; প্যাকেটের ঠিক কী ডেটা অন্তর্ভুক্ত করা উচিত তা আপনার জানা উচিত

আমি কীভাবে ডেটা অ্যারে উপস্থাপন করব?

  • ডেটা অ্যারে হিসাবে। অ্যারের উপাদানগুলির একটি গণনা পাঠানো এড়াতে ডেটা শেষ না হওয়া পর্যন্ত বাফার পড়া চালিয়ে যান

প্যাকিং / আনপ্যাকিং ডেটার জন্য ইন্টারফেসটি দেখতে কেমন হবে?

  • মৌলিক প্রকারগুলি বাইটে রূপান্তর করতে আপনি সহজেই সেটআপ করতে পারেন, সেখান থেকে কাস্টম ধরণের রূপান্তর করতে এই পদ্ধতিগুলি তৈরি করুন। এটি কীভাবে করবেন সে সম্পর্কে বিশদ বিবরণগুলি আমি নিশ্চিত যে কোনও জায়গায় খুঁজে পেতে পারি (আমি ব্যক্তিগতভাবে সি # ব্যবহার করি)

একটি শেষ কথা, প্যাকেটের আকার হ'ল উদ্বেগ, বিশেষত একটি স্ন্যাপশটের জন্য: আকার = প্যাকেট সাইজ এক্স সত্তা এক্স কানেক্টেড প্লেয়ার্স; সুতরাং আপনার প্যাকেট প্রতি 60 x 10 x 16 = 9,600 বাইট থাকতে পারে তারপরে এটি দ্বিতীয় বার 20 বার প্রেরণ করুন: = 192,000 বিপিএস = 187 কেবিপিএস। এটি সম্ভবত একটি উচ্চ ব্যান্ডউইড আপলোডের গতি। সুতরাং প্যাকেট আকারে যেখানে সম্ভব সেখানে অবদান রাখার প্রতিটি কারণকে হ্রাস করতে হবে।

এই নিবন্ধটি আমাকে প্রচুর পরিমাণে সহায়তা করেছে: ভালভ মাল্টিপ্লেয়ার নেটওয়ার্কিং


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

1
আপনার অ্যারে পদ্ধতিটি সাধারণ ক্ষেত্রে কাজ করে না - 'তথ্য শেষ' কোথায়? এমনকি যদি আপনার বার্তাগুলি সীমিত করে দেওয়া হয় তবে এর অর্থ হ'ল আপনার স্ট্রাক্টে 1 টির বেশি অ্যারে থাকতে পারে না। এটি ঠিক করার জন্য, মূল পোস্টারটি হয় নির্ধারিত দৈর্ঘ্যের অ্যারেগুলিতে আটকে থাকতে পারে বা স্ট্রাক্টের প্রতি মাত্র 1 টি অ্যারে (কাঠামোর শেষে) নিশ্চিত করতে পারে বা অ্যারের শুরুতে একটি গণনা মান প্রেরণ করতে পারে।
কাইলোটন

আরও একটি টিপ: অন্তর্নিহিততার চিকিত্সা করতে ভুলবেন না, যদি আপনি জানেন না যে এই জাতীয় জিনিসটির অস্তিত্ব রয়েছে this

কাইলোটান ভাল কথা, একমত হন যে কিছু ক্ষেত্রে এই অতিরিক্ত ডেটা এড়ানো যায় না; তবে যদি আমি নিজেকে একটি প্যাকেটে একাধিক অ্যারে যুক্ত করে দেখি তবে আমি তার পরিবর্তে একাধিক প্যাকেট পাঠানোর বিষয়টি বিবেচনা করব
প্রকৃতপক্ষে 00

1

এই সমস্যাটি গুগল এবং ফেসবুক সমাধান করেছে:

  1. গুগলের প্রোটোকল বাফারস - গুগল সি ++ এর একটি বড় ব্যবহারকারী:

    প্রোটোকল বাফারগুলি কার্যকর কিন্তু এক্সটেনসিবল ফর্ম্যাটে কাঠামোগত ডেটা এনকোড করার একটি উপায়। গুগল তার অভ্যন্তরীণ আরপিসির প্রায় সব প্রোটোকল এবং ফাইল ফর্ম্যাটের জন্য প্রোটোকল বাফার ব্যবহার করে।

  2. অ্যাপাচি থ্রাইফ্ট (পূর্বে ফেসবুক দ্বারা):

    থ্রাইফ্ট স্কেলযোগ্য ক্রস-ল্যাঙ্গুয়েজ পরিষেবাদির উন্নয়নের জন্য একটি সফ্টওয়্যার কাঠামো। এটি সিড ++, জাভা, পাইথন, পিএইচপি, রুবি, এরলং, পার্ল, হাস্কেল, সি #, কোকো, জাভাস্ক্রিপ্ট, নোড.জেএস, স্মলটালক এবং ওসিএএমএল এর মধ্যে দক্ষতা এবং নির্বিঘ্নে কাজ করে এমন পরিষেবাগুলি তৈরি করতে কোড জেনারেশন ইঞ্জিনের সাথে একটি সফ্টওয়্যার স্ট্যাক যুক্ত করেছে।


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

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

গুগলের রিয়েল টাইম পারফরম্যান্সের প্রয়োজন নেই। গুগলের নির্ভরযোগ্যতা এবং আপ-টাইম প্রয়োজন, উভয়ই প্রোটোকল বাফার দ্বারা ভাল পরিবেশিত। এই ফ্যালব্যাক সংস্করণ এবং বয়লারপ্লেট কোড জেনারেশনের জটিলতা ওভারহেড যুক্ত করে এবং আপনি যখন 50-100 মিমি ব্যবধানে 1000 আপডেট প্রেরণ এবং গ্রহণ করছেন তখন এটি যুক্ত হয় adds হাতে থাকা ডেটা নির্দিষ্ট করে কোডেড সিরিয়ালাইজারের বিরুদ্ধে পুরানো একটি প্রোটোকল বাফারকে প্রোফাইল করুন Profile @ প্রকৃতপক্ষে এটির সংক্ষিপ্তসার রয়েছে।
প্যাট্রিক হিউজেস

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