টিসিপি প্রোটোকল কি রিয়েল-টাইম মাল্টিপ্লেয়ার গেমসের জন্য যথেষ্ট ভাল?


57

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

গড় ব্যবহারকারীকে এখন দ্রুত নেটওয়ার্ক সংযোগ রয়েছে, তা কি কোনও এফপিএসের মতো কোনও রিয়েল টাইম গেম টিসিপি সংযোগের মাধ্যমে ভাল পারফরম্যান্স দিতে পারে?


উত্তর:


36

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

তবে, টিসিপি হ'ল মাল্টিপ্লেয়ার আলোচনা, চ্যাট বার্তাগুলি, স্কোর আপডেট ইত্যাদির মতো রিয়েলটাইম জিনিসগুলির জন্য পুরোপুরি গ্রহণযোগ্য is


7
শন অর্থের উপর অনেক বেশি। যদি, সুযোগক্রমে, আপনি সি # /। নেট এ একটি গেমটি বিকাশ করছেন (আপনি জানেন যে আপনি চান!), আমি লিডগ্রেন নেটওয়ার্ক লাইব্রেরি (কোড. google.com/p/lidgren-library-network ) একটি সুন্দর হিসাবে খুঁজে পেয়েছি ভাল পছন্দ. এমনকি এটি ইউডিপির মাধ্যমে অর্ডার করা, নির্ভরযোগ্য মেসেজিং সরবরাহ করে, আপনার এটির প্রয়োজন হওয়া উচিত।
মাইক স্ট্রোবেল

2
টিসিপি এবং ইউডিপি উভয়কেই মেশানো বুদ্ধিমানের নয়; টিসিপি যেভাবে প্রবাহ নিয়ন্ত্রণ সম্পাদন করে তার ফলস্বরূপ, এটি প্যাকেট হ্রাস প্ররোচিত করতে পারে। (উত্স: isoc.org/INET97/proceedings/F3/F3_1.HTM )
জেসন কোজাক

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

ইউডির জন্য অন্য + পয়েন্টটি হ'ল এটির প্রাকৃতিক প্যাকেটটি ওরিয়েন্টেড, আপনাকে প্রয়োজন হলে এটি টিসিপিতে অনুকরণ করতে হবে (বোলেডারপ্লেটকোড), দুর্ভাগ্যক্রমে আরও আধুনিক প্রোটোকলগুলি উইন্ডোজ দ্বারা সমর্থিত নয় (এই sucks)
Quonux

11

ফ্ল্যাশ যেমন ইউডিপি সমর্থন করে না, তাই মাল্টিপ্লেয়ার ফ্ল্যাশ গেম দেখে আপনি টিসিপি / আইপি দিয়ে কী কী সম্ভব এবং কী কী তা সম্পর্কে একটি ভাল ধারণা পেতে পারেন। মূলত আপনি রিয়েল টাইম গেম তৈরি করতে পারবেন, যতক্ষণ না তারা বাজ-দ্রুত প্রতিক্রিয়ার সময়গুলিতে নির্ভর করে না। উদাহরণ দুটি:

http://www.xgenstudios.com/play/stickarena

http://everybodyedits.com/

আপনার যদি ইউডিপি ব্যবহারের বিকল্প থাকে তবে আপনার সত্যই হওয়া উচিত, তবে ফ্ল্যাশ সহ আপনি দুঃখের সাথে সেই বিকল্পটি পান না।


8

এটা নির্ভর করে.

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


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

6

যদি আপনার ক্লায়েন্ট / সার্ভার আর্কিটেকচারটি পরিষ্কার থাকে তবে পরিবহন স্তরটি (প্রায়) কিছু যায় আসে না।

টিসিপিতে কিছু ত্রুটি রয়েছে তবে এগুলি সহজেই সংক্রামিত হয়।

হ্যাঁ, টিসিপি এবং একটি মস্তিষ্ক আপনার প্রয়োজন কেবল।

সাধারণ নেটওয়ার্ক সেটআপগুলির সাথে (প্রক্সি, ফায়ারওয়ালস, ইত্যাদি) আজ ইউডিপি স্থানীয় (পড়ুন: ল্যান) গেমগুলি ব্যতীত সকলের পক্ষে যথেষ্ট অকেজো।


7
আপনি যদি ডাউনটিভোট করেন তবে দয়া করে কেন একটি মন্তব্য করুন। আমরা টিসিপি ব্যবহার করি এবং এটির সাথে কখনও একটি সমস্যা হয়নি।
আন্দ্রেয়াস

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

1
আপনার নাগলেসের কথা উল্লেখ করা দরকার । আমি সর্বদা ভুলে যাই যে কেন টিসিপিটি মন্দ, এর মূল কারণ (নাগলের বাফার প্যাকেটগুলি ক্লায়েন্ট / সার্ভারে, মূলত সেগুলি আপনার খেলা থেকে "রোধ" এবং অতিরিক্ত বিলম্ব প্রবর্তন)।
bobobobo

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

6

এটি ইউডিপির পরিবর্তে টিসিপি ব্যবহারের জন্য পুরোপুরি গ্রহণযোগ্য - যদি আপনি নাগলের অ্যালগরিদম বন্ধ করে দেন ।

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

http://2dspacemmo.wildbunny.co.uk

আশা করি এইটি কাজ করবে!


আপনার লিঙ্কে অপারেশনাল অ্যাপ্লিকেশন, স্যার।
ইঞ্জিনিয়ার

লিঙ্কটি পুরো পচে গেছে, স্যার। আমি অ্যাপাচি সার্ভার পরীক্ষা পাই।
গুস্তাভো ম্যাকিয়েল

4

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


4

এটি নির্ভর করে খেলার ধরণের উপর।

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

টিসিপিতে আসল সমস্যাটি হ'ল যদি আপনি প্যাকেট হ্রাস পান - এমনকি অল্প পরিমাণেও - তবে পুনঃস্থাপন না হওয়া পর্যন্ত সংযোগটি "স্টল" করে। ওএস অ্যাপ্লিকেশনে আউট-অফ-অর্ডার ডেটা সরবরাহ করতে পারে না (এটি টিসিপির গ্যারান্টি ভঙ্গ করে, তবে, টিসিপি অ্যাপ্লিকেশন ফ্রেমের সীমানা প্রদর্শন করে না)। সংযোগ স্টল মানে দেরীতে ডেটা পরে আসে। তবে একটি (উদাঃ) এফপিএস গেমটিতে, পুরানো ডেটা অকেজো।

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


নোট করুন যে আপনার বাস্তবায়নে বিলম্বিত প্যাকেটগুলি ছাড়ার দিকটি পরিচালনা করতে হবে, কারণ ইউডিপি এটি কোনও ডেটাগ্রাম প্রাপ্ত হিসাবে বিবেচনা করবে।
গুভান্তে

3

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

এখানের অন্য উত্তরগুলির মধ্যে কোনওটিই এটি প্রমাণ করার সুস্পষ্ট উপায়টি উল্লেখ করে না।

কিছু সাধারণ ঘটনা নিন

  • কোনও আইপি শিরোনাম 20 বাইট হয় আপনি কোনও প্রোটোকল ব্যবহার করেন না কেন।
  • ইউডিপি শিরোনাম 4 বাইট
  • টিসিপি শিরোনামগুলি 20 বাইট

সুতরাং প্রতিবার আপনি যখন লাইনটি 1 বাইটের বার্তা প্রেরণ করেন তখন আপনি কোনও আইপি শিরোলেখ ধরে নিচ্ছেন যে প্রোটোকলের উপর নির্ভর করে 25 বা 41 বাইট পাঠিয়েছেন।

উত্স:

আমার উপদেশ

আপনার ক্লায়েন্ট সার্ভারের ইন্টারঅ্যাকশন প্রয়োজন যেখানে আপনার পরিস্থিতি নিন, ক্লায়েন্টগুলির সংখ্যা নির্ধারণ করুন তারপরে আপনি 2 এর মধ্যে পাঠানো ডেটার ভিত্তিতে গণিত করুন do

একটি উদাহরণ

আমি বলি যে আমি আমার গেমের প্রতি আপডেটে 1 বাইটযুক্ত 10 টি বার্তা প্রেরণ করছি এবং আমি প্রায় 60 fps আপডেট করছি তাই আমাকে আসল বার্তা ডেটা + প্রাসঙ্গিক শিরোনামের প্রতি সেকেন্ডে 60 * 10 = 600 বাইট প্রেরণ করতে হবে।

গেমের উপর নির্ভর করে আমি এগুলি সবই একক বার্তা হিসাবে প্রেরণ করতে পারি তাই টিসিপি স্তর থেকে আমার ওভারহেডটি কেবল 40 বাইট (কার্যকরভাবে প্রতি সেকেন্ডে 20 বাইটের ইউডিপির চেয়ে বেশি ব্যয়), ওভারহেড না হওয়া 600০০ বাইটের সম্ভাব্য ব্যয় ( কারণ আমার পুরো বার্তা প্রবাহটি আবার পাঠাতে হতে পারে)।

তবে যদি প্রতিটি বার্তা পাঠানো যায় তার তাত্ক্ষণিকভাবে এটি নিজেই প্রেরণ করা অত্যন্ত জরুরী, আমার কাছে 600 টি বার্তা রয়েছে (এছাড়াও 600 বাইট) + 40 * 600 = 24 কেস মূল্যবান টিসিপি ওভারহেড বা প্রতি সেকেন্ডে ইউডিপি 14 ডলার + বার্তা ডেটা 600 বাইট।

আবার, আমরা প্রশ্নগুলি জিজ্ঞাসা করি, এই বার্তাগুলি কতটা গুরুত্বপূর্ণ, সেগুলি কত ঘন ঘন এবং কীভাবে কোনও উপায়ে ওভারহেডগুলি হ্রাস করতে পারে?

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

সুতরাং, এটি কাজ করবে?

ঠিক আছে, আপনার যদি একটি সাধারণ fps থাকে, এবং অবস্থানটি গুরুত্বপূর্ণ (প্রতারণা বা ভুল সিদ্ধান্ত এড়াতে), আপনার জানতে হবে যে আপনার নেটওয়ার্ক স্ট্রিমটি বাস্তবযোগ্য, তবে ২২ খেলোয়াড় প্রতিটি স্ট্রিমিং যে 24 কে + বার্তা পিছনে পিছনে যায় (তাই 768 কেবি / s + বার্তা) ... এটি সার্ভারের মাধ্যমে প্রতিটি ক্লায়েন্ট থেকে অন্যান্য ক্লায়েন্টের প্রতি প্রতিটি ক্লায়েন্ট থেকে কমপক্ষে 1 বার্তা প্রেরণের উপর ভিত্তি করে পৃথক হেডারের জন্য 10 মিমি / গুলি ব্রডব্যান্ড লাইন প্রায় about

আপনি অবশ্যই আপনার সার্ভার এবং ক্লায়েন্টকে সেভাবে কাজ করার জন্য কোড করবেন না এবং বার্তার আকারগুলি অনেক বড় হতে পারে এবং বেশিরভাগ পরিস্থিতিতে ফ্রেম প্রতি 1 বাইটের চেয়ে কিছুটা কম ঘন ঘন থাকে তাই আসল বিশ্ব না দেখলে বলা শক্ত so "এটি আমার পাঠাতে হবে এমন ডেটা" উদাহরণ।

আমার ক্ষেত্রে

আমি আমার ক্ষেত্রে কলটি করেছি যে এটি একটি যুক্তিসঙ্গত ওভারহেড তবে এটি নির্ভর করে যে আমি কীভাবে আমার বার্তা প্রবাহগুলি তৈরি করি যাতে কিছু ডিজাইনের তুলনায় আমার কাছে বিশাল ওভারহেড না থাকে।

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

অন্যদের জন্য: টিসিপি কেবল তা করবে না, এবং তারা কেবল ইউডিপি ব্যবহার করতে পারে তবে তাদের গ্রহণযোগ্যতা (অর্ডার / আগমনের গ্যারান্টি) দেওয়ার বিষয়ে তাদের কোনও আশ্বাস দেওয়া হবে না তা মেনে নিতে হবে।

অন্যান্য বিবেচ্য বিষয়

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

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

আপনি যে ডেটা প্রেরণ করতে চান তার প্রযুক্তিগত ভিত্তিতে প্রথমে কিছু তৈরি করুন এবং এটি পরীক্ষা করার জন্য গণিতটি করুন, সবচেয়ে খারাপ ক্ষেত্রে এটি মেঘে স্থাপন করে লোড পরীক্ষা করুন এবং 50 টি কম্পিউটার এটি পরীক্ষা করতে পারে কিনা তা পরীক্ষা করার জন্য একটি ক্লায়েন্ট চালান প্রতি খেলায় আপনার 32 খেলোয়াড়ের সীমা (বা আপনার যে সীমাবদ্ধতা থাকতে পারে)।


2

আমি এটি মনে করি না ... গেম যেখানে ডেটা ট্রান্সফার খুব ঘন ঘন হয় (মাউস মুভ বা কী-ডাউন), ইউডিপি ব্যবহার করা উচিত। টিসিপি ব্যবহার করা হলেও এটি ল্যানেও পিছিয়ে যাবে।

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