এক্সএমএলটি ভার্বোজ, এটি যথাযথভাবে বলা হলেও, এই সচেতনতার সাথে আরও সচেতন হওয়া উচিত যে এই শব্দভাণ্ডারের বিষয়বস্তু সম্পর্কিত সমস্ত "ওভারহেড" নয়, কারণ এটি শব্দার্থকে আবদ্ধ করে; এটি ওভারহেড যা স্থির কাঠামোর বিপরীতে ডায়নামিককে জোর দেয় এমন কোনও প্রোটোকলের লক্ষণাত্মক। উদাহরণস্বরূপ, এইচটিএমএল আসলে এক্সএমএল এর একটি স্বাচ্ছন্দ্যময় রূপ যা গতিশীল কাঠামো, কাঠামোর সাথে সামগ্রীকে সরবরাহ করে যা সামগ্রীর একটি দিক হিসাবে বিবেচনা করা যেতে পারে। আপনি টেবিলের টেবিল থেকে নিজেই আলাদা করতে পারেন, তবে বিষয়বস্তুটি নির্দিষ্ট সম্পর্কের সাথে টেবুলার ডেটা বিষয়বস্তুর সাথে অবিচ্ছেদ্য; যদি আমি কেবল প্রতিটি কক্ষটি নিয়েছি এবং এটি সমস্তকে একটি দীর্ঘ স্ট্রিং হিসাবে সঞ্চারিত করি, সেই কাঠামো এবং সেই সম্পর্কগুলি চলে গেছে, এবং তাই আমি তথ্য হারিয়ে ফেলেছি এবং সেই সামগ্রীটি না?
আসুন একটি 8 বাইট বার্তা বিবেচনা করুন যা কিছু ট্যাবলুয়ার ডেটা গঠন করতে পারে। যদি আমি খুব স্থিতিশীল প্রোটোকল ব্যবহার করি তবে আমি এ জাতীয় প্রোটোকলটি কেবল সংজ্ঞায়িত করে অতিরিক্ত কোনও ওভারহেড ছাড়াই ন্যূনতমভাবে প্রেরণ করতে পারতাম:
- প্রতিটি বার্তা হ'ল 8 বাইট, সুতরাং আমাদের দৈর্ঘ্য নির্দেশ করতে বা কোনও সমাপ্তি ক্রম অন্তর্ভুক্ত করার দরকার নেই।
- আটটি বাইট সর্বদা 2 x 2 গ্রিডের জন্য নেওয়া হয় যেখানে প্রতিটি ঘরে একটি 16-বিট মান থাকে।
আমার সমস্ত বার্তাগুলি যদি ঠিক এর মতো হয় তবে এক্সএমএল, এইচটিএমএল বা এক্সএমপিপি ব্যবহার করা নিরীহ হিসাবে বিবেচনা করা যেতে পারে - আমি স্ট্রাকচারাল উপাদানগুলির ব্যান্ডউইথকে নষ্ট করছি যা সর্বদা একই এবং পূর্ব নির্ধারিত হয় এবং এটি তৈরি এবং বিশ্লেষণ উভয় প্রান্তে সংশ্লিষ্ট গণনার সময় নষ্ট করে যাচ্ছি। একটি ন্যূনতম, যথাযথ এইচটিএমএল পৃষ্ঠা যা প্রতিটি কক্ষে কয়েকটি অক্ষরের সাথে মাত্র একটি 2 x 2 টেবিল ধারণ করে সম্ভবত ফর্ম্যাটিং এবং প্রোটোকল ওভারহেড সামঞ্জস্য করতে কমপক্ষে 100 বাইট হতে চলেছে।
তবে, যদি আমার সমস্ত বার্তাগুলি হুবহু না হয় তবে কী ধরণের বার্তা তা নির্দিষ্ট করে বলা যেতে পারে "পে-লোড" এর আক্ষরিক অংশ না হলেও এটি প্রয়োজনীয় উপাদান, বিষয়বস্তু অনুসারে wise আমি এটি কেবল দুটি অতিরিক্ত বাইট দিয়ে করতে পারি এবং আরও অনেক গতিশীলতার পরিচয় দিতে পারি:
- বার্তাগুলি এখন পরিবর্তনশীল দৈর্ঘ্য, 0-255 বাইট এবং প্রথম বাইট দৈর্ঘ্য নির্দেশ করে।
- বিভিন্ন পূর্বনির্ধারিত বার্তার প্রকারের জন্য (অবধি) 256 টি কোড রয়েছে যার মধ্যে একটি "2 x 2 টেবিল", এটি দ্বিতীয় বাইট।
এখন আমার 8 বাইটের টেবিলের সামগ্রীতে 2 বাইট ওভারহেডের প্রয়োজন, তবে এই কাস্টম প্রোটোকলের মাধ্যমে কী ধরণের বার্তা প্রেরণ করা যায় তার ক্ষেত্রে সম্ভাবনার অনেক বিস্তৃত পরিসর রয়েছে।
এটি এখনও কোনও HTML পৃষ্ঠা বা এক্সএমএল নেমস্পেসের স্পেসিফিকেশন (বা এটির সেট, যা এক্সএমপিটি মূলত যা তা হ'ল ) এর সম্ভাবনার খুব কাছাকাছি নেই।
সুতরাং, এর ভিত্তিতে, বেশিরভাগ যদি আপনি যা করছেন তা সাধারণ 8 বাইট বার্তা প্রেরণ করছে, এক্সএমপিপি সম্ভবত ওভারকিল। যাইহোক, অগত্যা এতটা নয়। দাবিটি যে "আইওটি সংযুক্ত ডিভাইস থেকে সার্ভারের কাছে এক বাইট ডেটা প্রেরণের জন্য একটি একক অনুরোধ / প্রতিক্রিয়া বিনিময়টি 0.5 কেবি এরও বেশি" আমার কাছে প্রাসঙ্গিক আরএফসির দিকে ঝলকানি দেওয়া , একটি সম্ভাব্য অতিরঞ্জিত বলে মনে হয় (তবে এনবি, সমস্ত আমি এটিকে এক নজরে দেখি, আমি কখনই এক্সএমপিপি প্রয়োগ করি নি বা ব্যবহার করি না)। আপনি সন্দেহ নেই যে আপনি এর উদাহরণ তৈরি করতে পারেন, তবে এটি সম্ভবত কোনও ন্যূনতম উদাহরণ নয়।
যেহেতু প্রোটোকল টিসিপি ভিত্তিক, তাই "জ্যাবার: ক্লায়েন্ট 'নেমস্পেস দ্বারা যোগ্য একটি এক্সএমএল স্ট্রিম স্থাপন করা কেবলমাত্র বার্তাটির অংশ হিসাবে বিবেচনা করা দরকার যদি আমরা কোনও কাজ বন্ধ করে দিই - ডিভাইসটি একটি সার্ভারকে 8 বাইট প্রেরণ, প্রেরণে যোগাযোগ করে তথ্য, সংযোগ বিচ্ছিন্ন। যদি সম্পর্কটি আরও স্থির থাকে, যা এটি প্রায়শই আইওটি প্রসঙ্গে থাকে, তবে আমরা ধরে নিতে পারি যে ডিভাইসটির গন্তব্যের সাথে ইতিমধ্যে একটি সংযোগ রয়েছে। এই ক্ষেত্রে, যদি বার্তার চূড়ান্ত গন্তব্যটি সার্ভার হয় (অন্য ক্লায়েন্টের বিপরীতে সার্ভার বার্তাটি প্রেরণ করতে চলেছে), তবে প্রোটোকল ওভারহেড সম্ভাব্য পরিমাণে ন্যূনতম।
<message><body>8 bytes.</body></message>
"ওভারহেড" এর একটি পরিমিত 33 বাইট। এটি এখানে উল্লেখ করার মতো যে এক্সএমএলটি পাঠ্য, এবং তাই যদি আপনার বার্তাগুলি প্রায়শই বাইনারি হয়, তবে এটি অনেক কম উপযুক্ত হয়ে উঠবে, কারণ সেই ডেটা এনকোড করা দরকার (যেমন, বেস 64 ), যা আরও ওভারহেড এবং গণনা যুক্ত করে প্রয়োজনীয়তা।
সুতরাং, শেষ পর্যন্ত:
আইএমটি ডিভাইসগুলির সংক্ষিপ্ত, ঘন ঘন বার্তা প্রেরণের জন্য কি এক্সএমপিপির একটি বড় ওভারহেড রয়েছে?
যদি অবিচ্ছিন্ন সংযোগ থাকে এবং বার্তাগুলি বেশিরভাগই কাঠামোগত না থাকে তবে আমার মনে হয় না। যাইহোক, যদি আপনার এটি কী সরবরাহ করে তার প্রয়োজন না হয় (কাঠামোর ক্ষেত্রে গতিশীলতা), তবে সম্ভবত আরও উপযুক্ত পদ্ধতি রয়েছে।
সেই অনুসারে, যদি আমাদের এমন একটি প্রসঙ্গ থাকে যেখানে একক কেন্দ্রীয় সার্ভার বিভিন্ন ডিভাইসের মধ্যে বার্তা প্রক্রিয়াকরণ করে এবং / অথবা বার্তা নির্ভর করে, তবুও devices ডিভাইসগুলির মধ্যে যে কোনও একটি যা করছেন তা সর্বদা সহজ এবং সোজা হতে পারে, এমন একটি প্রোটোকল যা একটি এনক্যাপুলেট করতে পারে বিভিন্ন বার্তা এখনও দরকারী হবে। যদি কোনও ক্লায়েন্ট ডিভাইসের সীমিত সংস্থান থাকে, আমরা প্রোটোকলটির অনেকগুলি হার্ডকোড করতে পারি এবং প্রতিটি বার্তাটি সেই প্রান্ত থেকে মোড়ানো একটি খুব সহজ কাজ হয়ে যায়; আমি বিশ্বাস করি যে অনেক আইওটি ডিভাইস যা এইচটিটিপি সার্ভার স্থাপন করে (যা "সাধারণ ক্লায়েন্ট, জটিল সার্ভার" এর বিপরীত)। এই সার্ভারগুলি কোনও প্রকারের এইচটিটিপি অনুরোধ পরিচালনা করতে পারে না (প্রিফর্মেটেড প্রত্যাখ্যানের বাদে) এবং তারা খুব ভালভাবে সংজ্ঞায়িত, বিষয়যুক্ত জিনিসগুলির সেট করবে এবং তারা যে প্রতিক্রিয়া প্রেরণ করবে সেগুলি সেট করে, তবে যেহেতু তারা এইচটিটিপি সার্ভার হিসাবে সঠিকভাবে কাজ করে না,