অন্যান্য উত্তরের সাথে যুক্ত নিবন্ধটি ছাড়াও, আমি আরিয়ান প্রকল্পের অভিজ্ঞতা সম্পর্কে কিছুটা বলতে পারি ।
কীভাবে জিনিসগুলিকে সিঙ্ক্রোনাইজ করা যায়?
ক্রিয়া এবং উপলব্ধি ধারণার চারপাশে আমাদের কাঠামো " ম্যারাওরোয়া " রয়েছে: ক্লায়েন্টের কাছ থেকে ক্রিয়াকলাপগুলি ব্যবহারকারী ইনপুট বহনকারী সার্ভারে প্রেরণ করা হয় (বাঁদিকে হাঁটুন, আক্রমণ দানব # 47, 'হ্যালো' বলুন)। এবং উপলব্ধিগুলি সার্ভার থেকে ক্লায়েন্টদের কাছে তাদের আশেপাশের বিশ্বের অবস্থা সম্পর্কে জানানো হয়। সেই অনুভূতিগুলি প্রতিটি মোড়কে পাঠানো হয়। গেমের উপর নির্ভর করে আমরা 30ms থেকে 300ms এর টার্ন টাইম ব্যবহার করি।
আমাদের দুটি ধরণের উপলব্ধি রয়েছে : লগইন করার সময় এবং খেলোয়াড় যখন কোনও নতুন অঞ্চল (অঞ্চল) প্রবেশ করে তখন একটি সম্পূর্ণ উপলব্ধি প্রেরণ করা হয়। এর পরে পরিবর্তিত বস্তুর পরিবর্তিত বৈশিষ্ট্য (যেমন পজিশন) এবং অবশ্যই নতুন এবং সরানো বস্তুগুলি সহ ডিফারেনশিয়াল উপলব্ধিগুলি প্রেরণ করা হয়।
বিলম্বিত সমস্যাগুলির চারপাশে কীভাবে কাজ করবেন?
আমরা "সার্ভার সর্বদা সঠিক" এ দৃ strongly় বিশ্বাস করি। ক্লায়েন্টটি কিছু পূর্বাভাস দেয় যেমন মসৃণ হাঁটাচলা, সংঘর্ষের চেক ইত্যাদি। তবে যদি কোনও ক্লায়েন্ট এবং সার্ভার কোনও বিষয়ে দ্বিমত পোষণ করে তবে সার্ভারটি জয়ী হয়। সাবপ্রজেক্ট স্টেনডাল (একটি 2D আরপিজি) 300 মিমিগুলির টার্ন টাইম ডিফল্টরূপে (অনেকগুলি স্মুথিং ক্লায়েন্ট পক্ষের সাথে) ব্যবহার করে। এটি স্টেনডালকে ল্যাগের বিরুদ্ধে খুব প্রতিরোধী করে তোলে।
দ্রষ্টব্য: কিছু অন্যান্য গেম নেটওয়ার্ক ল্যাগের প্রভাব কমাতে ক্লায়েন্টকে কিছুটা বাড়িয়ে দেয়। ওয়াহ মধ্যে এটি প্রায়শই "ওয়ারসং গুল্চ" নামক যুদ্ধক্ষেত্রে ব্যবহৃত হয়েছিল ited পতাকা সহ কোনও খেলোয়াড় দুটি উপায় বেছে নিতে পারে: মাঝখানে একটি টানেলের মধ্য দিয়ে এবং ডানদিকের একটি পাহাড়ের উপরে উঠে। সুতরাং কোনও প্রতারণামূলক খেলোয়াড় টানেলের দিকে ছুটে যায় এবং তারপরে নিজের জন্য পিছিয়ে যায়। সার্ভার এবং অন্যান্য ক্লায়েন্টরা তাকে তার দিকে চালিত হতে দেখবে। তবে কিছুক্ষণ পরে এই ক্লায়েন্ট সার্ভারকে বলতে পারবেন যে এটি পাহাড়ের দিকে গেছে। বাহ পরীক্ষা করে দেখবে যে সর্বশেষ স্থানান্তরিত স্থানাঙ্কগুলির সাথে বর্তমানের মধ্যবর্তী দূরত্বগুলি সময় বিভাগের মধ্যে ফিট করে এবং এটি স্বীকার করে।
ইউডিপি বনাম টিসিপি ব্যবহার
প্রারম্ভিক সংস্করণগুলিতে আমরা টিসিপির ওভারহেড হ্রাস করতে ইউডিপি ব্যবহার করেছি। আমরা নিজের হাতে হারিয়ে যাওয়া প্যাকেটগুলি পরিচালনা করেছি। প্রকল্পের প্রথম দিনগুলিতে এটি পুরোপুরি কাজ করেছিল। কিন্তু যখন বেশ কয়েক বছর আগে সার্ভারটি কিছু হোম ডিএসএল সংযোগ থেকে একটি বাস্তব ডেটা সেন্টারে স্থানান্তরিত হয়েছিল, তখন আমরা বিশাল সমস্যা পেয়েছি। ইউডিপি হ'ল (বা কমপক্ষে 5 বছর আগে) ফায়ারওয়াল হার্ডওয়্যার সিপিইউ পাওয়ারের জন্য অত্যন্ত দাবি: প্রতিটি ইউডিপি প্যাকেটে রুলসেট প্রয়োগ করতে হয়। টিসিপি-র ক্ষেত্রে, তবে নিয়মটি শুধুমাত্র প্রথম 3 টি প্যাকেটের জন্য প্রয়োগ করা হয়। এর পরে সংযোগ স্থাপন করা হয়। নিম্নলিখিত সমস্ত প্যাকেটগুলি সাধারণ নিয়মসেটকে বাইপাস করবে কারণ তারা সংযোগকারী ট্র্যাকিং টেবিলে রয়েছে বা তাদের কোনও এসওয়াইএন পতাকা নেই।
বিপরীত প্রকৌশল থেকে যোগাযোগ এবং ক্লায়েন্টকে কীভাবে রক্ষা করবেন?
আরিয়েন সম্পূর্ণ ওপেন সোর্স, এতে ক্লায়েন্ট, সার্ভার, গ্রাফিক্স, সঙ্গীত অন্তর্ভুক্ত রয়েছে। এবং অবশ্যই এতে আমাদের প্রোটোকল ডকুমেন্টেশন এবং এমনকি ডিবাগিংয়ের জন্য ব্যবহৃত একটি বিশ্লেষক অন্তর্ভুক্ত রয়েছে ।
এসএসএল ব্যবহার করে তৃতীয় পক্ষের অননুমোদিত স্নিগিংয়ের বিরুদ্ধে যোগাযোগ রক্ষা করা সহজ।
তবে এটি বিপরীত প্রকৌশল থেকে রক্ষা করা অসম্ভব। নিশ্চিত যে আপনি এটিকে অবরুদ্ধ করতে পারেন এবং অ্যান্টি-ডিবাগিং কৌশলগুলি ব্যবহার করতে পারেন। তবে শেষ পর্যন্ত আপনি সফ্টওয়্যারগুলির বিপরীত প্রকৌশলকে আটকাতে পারবেন না যা আপনি ব্যবহারকারীদেরকে দিয়ে যান। বিকাশকারীরা এন্টি ডিবাগিং কৌশলগুলিতে প্রচুর প্রচেষ্টা চালিয়ে গেলেও স্কাইপ কীভাবে ইঞ্জিনিয়ার হয়েছিল তা নিয়ে একটি আকর্ষণীয় উপস্থাপনা রয়েছে: http://recon.cx/en/f/vskype-part1.pdf
দ্রষ্টব্য: কিছু দেশ রয়েছে যেখানে বিপরীত প্রকৌশল অবৈধ বা লাইসেন্সে অনুচ্ছেদ স্থাপনের অনুমতি দেয় বা বিপরীত প্রকৌশল অস্বীকার করে টসকে অনুমতি দেয়। তবে অন্যান্য দেশ রয়েছে (আমি যেমন বাস করছি তার মতো) যা সুস্পষ্টভাবে ডেটা স্টোরেজ ফর্ম্যাট বা ট্রান্সমিশন প্রোটোকল, লাইসেন্সের অনুচ্ছেদে বা টোসকে বাতিল করার চেষ্টা করার প্রেক্ষাপটে বিপরীত প্রকৌশলকে অনুমতি দেয়। (এই বিভাগের সমস্ত কিছুই আমি যতদূর জানি, আমি আইনজীবী নই)
কোন জিনিসগুলি স্থানীয়ভাবে গণনা করা উচিত এবং কোনটি সার্ভারে থাকা উচিত?
আমরা সার্ভারে গেম যুক্তি সম্পর্কিত সমস্ত কিছু গণনা করি। গেমটি সুষ্ঠুভাবে খেলতে খেলতে ক্লায়েন্ট নির্দিষ্ট কিছু ইভেন্টের পূর্বাভাস দেবে। তবে শেষ পর্যন্ত সার্ভারটি সর্বদা সঠিক।
ভবিষ্যদ্বাণী করা ইভেন্টগুলি উদাহরণস্বরূপ, যখন কোনও সংঘর্ষে আঘাত হয় তখন চলাচল বন্ধ করা হয়। স্টেনডাল উপাদানগুলি অবস্থানের জন্য একটি গ্রিড ব্যবহার করে। এবং সার্ভারের দৃষ্টিকোণ থেকে, প্রতিটি সত্তার উপরের বাম কোণটি ঠিক এক স্কোয়ারে রয়েছে। তবে ক্লায়েন্ট তাদের টাইলগুলির মধ্যে সহজেই ঘুরিয়ে নেবে। এটি সিউডো 3 ডি প্রভাবও আঁকবে। সুতরাং 1x1 এর বেস রয়েছে এমন একটি সত্তা ক্লায়েন্টের চেয়ে বেশি হতে পারে।
ভারের সমস্যার ভারসাম্য কীভাবে রাখবেন?
এটি রক্ষণাবেক্ষণ সহজ করার জন্য যথাসম্ভব সহজ রাখার চেষ্টা করুন।
স্থায়ী সামগ্রীর লোড ব্যালেন্সিং HTTP সার্ভার ক্লাস্টার এবং সামগ্রী বিতরণ নেটওয়ার্কগুলির ক্ষেত্রে সুপরিচিত।
গেম পরিষেবাগুলির লোড ব্যালেন্সিংয়ের জন্য একটি বরং সাধারণ ধারণাটি অঞ্চল / অঞ্চলগুলিতে সার্ভারগুলি বিভক্ত করা। তাই জোন এসি একটি সার্ভারে রয়েছে এবং অন্য অঞ্চলে ডিএফ রয়েছে। এটি বিশেষত সহজ তবে যদি আপনি একটি সেটের জোন থেকে অন্য সেটে জোনে যেতে না পারেন। আপনাকে সেখানে কিছু চেক লাগাতে হবে যাতে কোনও ক্লায়েন্ট কেবল প্লেয়ারের মধ্যে থাকা জোনটির জন্য দায়বদ্ধ একটি জোন সার্ভারের সাথে সংযোগ করতে পারে।
এক সার্ভার থেকে অন্য সার্ভারে খেলোয়াড়দের স্থানান্তর করার সহজতম উপায় হ'ল এগুলি ডাটাবেসে লিখুন, ক্লায়েন্টকে অন্য জোন সার্ভারের সাথে সংযোগ স্থাপন করতে বলুন এবং বর্তমানের সাথে সংযোগ বিচ্ছিন্ন করুন। ক্লায়েন্টটি তখন নতুন জোন সার্ভারের সাথে সংযোগ স্থাপন করবে যা এটি ডাটাবেস থেকে লোড করবে। (যেহেতু আপনার / স্টোর থেকে ডেটাবেস কোডে লোডের প্রয়োজন হয়, হ্যান্ডওভারের জন্য সার্ভারগুলির মধ্যে সরাসরি যোগাযোগ পরে প্রয়োগ করা যেতে পারে)।
কিছু অতিরিক্ত বৈশ্বিক পরিষেবাগুলির মাধ্যমে এর প্রয়োজন হয়: লগইনে ক্লায়েন্টদের সঠিক জোন সার্ভারের সাথে সংযোগ করতে বলতে হয়। এবং আপনি একটি বিশ্বব্যাপী চ্যাট সিস্টেম চাইবেন।
এমএমওগুলিতে লোড ব্যালেন্সিং কীভাবে অর্জিত হয় আমি এই বিষয়টিতে বিস্তারিতভাবে গিয়েছিলাম ?