ইউডিপি ব্যবহার করে স্বীকৃতি নির্ভরযোগ্যতা


16

ইউডিপি সম্পর্কে আমার একটি প্রশ্ন আছে। প্রসঙ্গে, আমি একটি রিয়েল-টাইম অ্যাকশন গেমটিতে কাজ করছি।

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

স্বীকৃতি বাদ দিলে কী ঘটে?

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

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

আমি অনুভব করি যে এখানে আমার মৌলিক যুক্তিটি সঠিক, যা আমাকে দুটি বিকল্প দিয়ে ফেলেছে।

  1. একটি একক স্বীকৃতি প্যাকেট প্রেরণ এবং সেরা আশা করি।
  2. মুষ্টিমেয় স্বীকৃতি প্যাকেটগুলি প্রেরণ করুন (সম্ভবত 3-4) এবং সর্বোপরি আশা করি, ধরে নিলেন যে এগুলি সমস্তই বাদ যাবে না।

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


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

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

10
কোনও গ্যারান্টি নেই। ঠিক। আপনার অ্যালগোরিদমে কখনও "আশা" অন্তর্ভুক্ত করবেন না। তাদের অবশ্যই কোনও দুর্ভাগ্যজনক সমন্বয় পরিচালনা করতে হবে। পিএস আমরা কেবল আমাদের আরটিএসে টিসিপিতে সরিয়েছি, যেখানে ইবারিটিংয়ের যত্ন নেওয়া হয়, যেহেতু আমাদের নির্ভরযোগ্য যোগাযোগের প্রয়োজন (লকস্টেপ সিমুলেশন জন্য)।
ক্রোমস্টার বলেছেন মনিকা

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

এটি আপনার প্রশ্নের সরাসরি উত্তর নয়, তবে আমি দৃ strongly়ভাবে সুপারিশ করব যখন তারা একেবারে প্রয়োজনীয় হয় (যেমন, প্রাথমিক সংযোগের ক্ষেত্রে) তখনই রিয়েল টাইম গেমটিতে একটি স্বীকৃতি প্রয়োজন। ক্লায়েন্ট এবং সার্ভার উভয়কেই ডিজাইন করা অনেক সহজ (এবং দৃust়) যাতে তারা না পারলে স্টেটলেস সিস্টেমে নতুন প্যাকেট না পাওয়া পর্যন্ত তারা "তাদের যা আছে তার সাথে কাজ করে"। ভূমিকম্প 3 একটি স্ন্যাপশট-ভিত্তিক সিস্টেমের মাধ্যমে এটি অবিশ্বাস্যভাবে ভাল করেছে । এছাড়াও Enet মত লাইব্রেরি সেই ক্ষেত্রে জন্য নির্ভরযোগ্যভাবে শুধুমাত্র নির্দিষ্ট প্যাকেট পাঠাতে পারেন, যখন আপনার সত্যি প্রয়োজন
jrh

উত্তর:


32

এটি দুটি জেনারেল সমস্যার একটি রূপ , এবং আপনি ঠিক বলেছেন - নিখুঁতভাবে প্রাপ্তির গ্যারান্টি দেওয়ার জন্য কোনও সংখ্যা পুনরায় চেষ্টা করা যথেষ্ট নয়।

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

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

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

অতীতের সমস্যাগুলিকে কীভাবে উপেক্ষা করে বর্তমান মুহুর্তে বেঁচে থাকার চেষ্টা করার জন্য আমি হঠাৎ এই "সিম্বার প্রতিলিপি" বলা শুরু করতে চাই। ;)

সেই জীবন দর্শনে রফিক কিছু বিড়ম্বনার বিজ্ঞাপন রেখেছিল

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

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


1
+1, ভাল লেখা। আমি কেবল হাইলাইট করব, এটি ক্রিয়া / রিয়েল-টাইম গেমগুলির সাথে আরও প্রাসঙ্গিক। টিবিএস এবং আরটিএস গেমস (এবং কিছু অ্যাকশন গেমের ইভেন্টগুলি) "সময় দিগন্তের বাইরে যা তথ্যগুলি সত্যই গুরুত্ব দেয় না" সম্পর্কে আলাদা ধারণা রয়েছে।
ক্রোমস্টার বলেছেন মনিকা

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

এটি অত্যন্ত সহায়ক এবং একধরণের আমার প্রাথমিক উদ্বেগকে বৈধতা দেয়। আপনাকে অনেক ধন্যবাদ.
গ্রিমেলিওস

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

@ এসএমএলটাররা আমি বলব যে এটির জন্য নিজেরাই প্রস্তুত থাকলে এটির নিজের জবাবটি ব্যাখ্যা করার মতো। আমি এটা upvote। :)
ডিএমগ্রিগরি

9

টিসিপি যে পদ্ধতির ব্যবহার করে তা হ'ল প্রেরক প্যাকেটটি কোনও স্বীকৃতি না পাওয়া পর্যন্ত পুনরায় বিক্রয় করতে থাকবে। গ্রহীতা সদৃশ প্যাকেটগুলি অগ্রাহ্য করবে, তবে এখনও তাদের জন্য স্বীকৃতি প্রেরণ করবে। প্রেরক সদৃশ স্বীকৃতি অগ্রাহ্য করবে।

যদি কোনও প্যাকেট হারিয়ে যায় তবে প্রেরক এটিকে পুনরায় পাঠায়, আপনি ইতিমধ্যে জানেন know
যদি কোনও স্বীকৃতি হারিয়ে যায় তবে প্রেরক আসল প্যাকেটটি পুনরায় পাঠায়, যার ফলে রিসিভারটি স্বীকৃতিটি পুনরায় পাঠিয়ে দেয়।

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


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

1
@ সুপের্যাট আমি বলব না যে এটি অত্যাবশ্যক; আরও একটি অপ্টিমাইজেশন মত।
ব্যবহারকারী 253751

প্রথম বন্ধনীতে জিনিসটি সম্পর্কে (প্যাকেটের জন্য ACK প্রেরণ আপনি ইতিমধ্যে পেয়েছেন), আমি মনে করি আপনার এটিকে প্রথম বন্ধনীর পরিবর্তে জোর দেওয়া উচিত। এটি অপের বোঝাপড়া (বা কমপক্ষে এর বিবরণ) থেকে অনুপস্থিত বলে মনে হচ্ছে।
অ্যাঞ্জিউ আর

@ এখনই সম্পন্ন হয়েছে।
ব্যবহারকারী 253751

6

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

2 টি চ্যানেল, একটি টিসিপি চ্যানেল (নির্ভরযোগ্য যোগাযোগের জন্য) পাশাপাশি একটি ইউডিপি (কম বিলম্বিত যোগাযোগের জন্য) চ্যানেলগুলি ব্যবহার করা অস্বাভাবিক নয়।

কিছু সমাধান সনাক্ত করে যখন কোনও ক্লায়েন্ট খুব দীর্ঘ সময়ের জন্য কিছু তথ্য অনুপস্থিত থাকে এবং পুনরায় সংশ্লেষন শুরু করে, যা ইউডিপি বা টিসিপি ব্যবহার করতে পারে।

আর একটি সাধারণ পদ্ধতির মধ্যে যোগাযোগের ডিজাইন করা এটি কোনওভাবেই স্বীকৃতির উপর নির্ভর করে না, তবে এটি প্রশ্নের ক্ষেত্রের বাইরে।


3

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

পরিবর্তে, আপনি প্রোটোকলটি ডিজাইন করেন যাতে মিস প্যাকেটগুলি খুব বেশি গুরুত্বপূর্ণ না।

সংক্ষিপ্ত সংস্করণ যে আপনি কি দেখেন না যেখানে অন্যান্য খেলোয়াড়দের যতদিন গত ফ্রেম ছিল আপনি জানেন তারা কোথায় হয় এখন । দীর্ঘ সংস্করণটি আরও জটিল।

প্রশ্নটি তখনই হয়ে যায়, যখন কোনও প্যাকেট হারিয়ে না যায় আপনি কী করবেন? এবং উত্তরটি ... আপনি অনুমান করেন। প্লেয়ার সম্ভবত একটি সরল রেখায় চলেছে, তাই না? কেবল সেই লাইন ধরে তাদের এক ধাপ এগিয়ে যান move ... আরটিএস প্লেয়ার ব্যতীত আর কখনও সরলরেখায় চলে না। এবং তারপরে সংঘর্ষ সনাক্তকরণ রয়েছে।

এটা কঠিন. অনেক গেম এটি ভুল করে। এটি যুক্তিযুক্ত হতে পারে যে এর সঠিক কোনও উত্তর নেই , কেবলমাত্র বিভিন্ন ভুল যা ব্যবসায়িকভাবে বিক্রয় করা যায়।

এই গেমগুলি বেশ ভালভাবে কাজ করার কারণটি কেবল এই নয় যে তারা এই সমস্যাগুলি সম্পর্কে দীর্ঘ এবং কঠোর চিন্তা করেছেন, তবে এটি ইন্টারনেটও যথেষ্ট নির্ভরযোগ্য হয়ে উঠেছে। প্রায় সমস্ত ইউডিপি প্যাকেটগুলি সময়োপযোগীভাবে তাদের গন্তব্যে পৌঁছে যায়। (ফায়ারওয়ালের মতো স্থায়ী সমস্যা না থাকলে)


ওয়ারক্রাফ্ট 3 টিসিপি ব্যবহার করে।
fsp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.