ในขณะที่มันยุติธรรมที่จะบอกว่า XML เป็น verbose ที่ควรจะอารมณ์กับการรับรู้ว่า verbosity นี้ไม่ได้ทั้งหมด "ค่าใช้จ่าย" ในความสัมพันธ์กับเนื้อหาเนื่องจากมันสรุปความหมาย; มันเป็นค่าใช้จ่ายที่มีอาการของโปรโตคอลใด ๆ ที่เน้นแบบไดนามิกซึ่งตรงข้ามกับโครงสร้างแบบคงที่ ตัวอย่างเช่น HTML เป็นรูปแบบที่ผ่อนคลายจริงๆของ XML ที่สื่อถึงเนื้อหาที่มีโครงสร้างแบบไดนามิกโครงสร้างที่อาจพิจารณาได้ว่าเป็นแง่มุมของเนื้อหา คุณสามารถแยกความแตกต่างเนื้อหาของตารางจากตารางเอง แต่ความจริงที่ว่าเนื้อหานั้นเป็นข้อมูลแบบตารางที่มีความสัมพันธ์เฉพาะนั้นเป็นส่วนประกอบสำคัญกับเนื้อหา ถ้าฉันใช้แต่ละเซลล์และส่งมันทั้งหมดเป็นสตริงยาวหนึ่งโครงสร้างนั้นและความสัมพันธ์เหล่านั้นหายไปและดังนั้นฉันจึงสูญเสียข้อมูลและไม่ใช่เนื้อหานั้น
ลองพิจารณาข้อความ 8 ไบต์ที่อาจเป็นข้อมูล tabluar บางส่วน ถ้าฉันใช้โปรโตคอลแบบสแตติกฉันสามารถส่งผ่านได้โดยไม่มีค่าใช้จ่ายเพิ่มเติมเพียงแค่กำหนดโปรโตคอลแบบนี้:
- แต่ละข้อความมีขนาด 8 ไบต์ดังนั้นเราไม่จำเป็นต้องระบุความยาวหรือรวมลำดับการยกเลิกใด ๆ
- แปดไบต์ถูกใช้เพื่ออ้างถึงกริด 2 x 2 ซึ่งแต่ละเซลล์มีค่า 16 บิต
หากข้อความทั้งหมดของฉันเป็นเช่นนั้นการใช้ XML, HTML หรือ XMPP อาจถือว่าไร้สาระ - ฉันกำลังสูญเสียแบนด์วิดท์บนส่วนประกอบโครงสร้างที่เหมือนกันเสมอและกำหนดไว้ล่วงหน้าแล้วและเสียเวลาคำนวณที่สอดคล้องกันทั้งสองด้าน หน้า HTML ขั้นต่ำที่เหมาะสมที่มีเพียงตาราง 2 x 2 ที่มีอักขระสองตัวในแต่ละเซลล์น่าจะเป็นอย่างน้อย 100 ไบต์เพื่อรองรับการจัดรูปแบบและค่าใช้จ่ายในโพรโทคอล
อย่างไรก็ตามหากข้อความของฉันไม่ตรงทั้งหมดดังนั้นให้ระบุว่าข้อความประเภทใดอาจไม่ใช่ส่วนที่แท้จริงของ "payload" แต่เป็นองค์ประกอบที่จำเป็นเนื้อหาที่ชาญฉลาด ฉันสามารถทำได้ด้วยการเพิ่มเพียงสองไบต์และแนะนำพลวัตมากขึ้น:
- ขณะนี้ข้อความมีความยาวผันแปรได้ 0-255 ไบต์และไบต์แรกระบุความยาว
- มี 256 รหัสสำหรับประเภทข้อความที่กำหนดไว้ล่วงหน้าที่ต่างกันซึ่งหนึ่งในนั้นคือ "2 x 2 ตาราง" นั่นคือไบต์ที่สอง
ตอนนี้เนื้อหาตาราง 8 ไบต์ของฉันต้องการโอเวอร์เฮด 2 ไบต์ แต่มีความเป็นไปได้ที่หลากหลายมากขึ้นในแง่ของประเภทข้อความที่สามารถส่งด้วยโปรโตคอลที่กำหนดเองนี้
มันยังคงใกล้เคียงกับความเป็นไปได้ของหน้า HTML หรือข้อกำหนด XML เนมสเปซ (หรือตั้งค่าดังกล่าวซึ่งเป็นสิ่งที่ XMPP เป็นหลัก )
ดังนั้นตามนั้นหากส่วนใหญ่สิ่งที่คุณกำลังทำคือการส่งข้อความ 8 ไบต์ง่ายๆ XMPP อาจเกินความจริง อย่างไรก็ตามไม่จำเป็นว่ามาก การอ้างสิทธิ์ว่า "การแลกเปลี่ยนคำขอ / ตอบกลับเพียงครั้งเดียวเพื่อส่งข้อมูลหนึ่งไบต์จากอุปกรณ์ที่เชื่อมต่อกับ IOT ไปยังเซิร์ฟเวอร์นั้นมีค่ามากกว่า 0.5 kB" ดูเหมือนว่าฉันจะจ้องมองที่RFC ที่เกี่ยวข้องเพื่อเป็นการพูดเกินจริง ฉันทำอย่างรวดเร็วฉันไม่เคยใช้หรือใช้ XMPP) ฉันไม่สงสัยเลยว่าคุณสามารถสร้างตัวอย่างเช่นนี้ได้ แต่นั่นอาจไม่ใช่ตัวอย่างที่น้อยที่สุด
เนื่องจากโปรโตคอลนั้นใช้ TCP เป็นตัวการสร้าง "สตรีม XML ที่ผ่านการรับรองโดย 'jabber: client' namespace" จะต้องได้รับการพิจารณาเป็นส่วนหนึ่งของข้อความถ้าเราทำสิ่งหนึ่งสิ่ง - อุปกรณ์ติดต่อกับเซิร์ฟเวอร์เพื่อส่ง 8 ไบต์ไปยังส่ง ข้อมูลตัดการเชื่อมต่อ หากความสัมพันธ์มีความคงทนมากขึ้นซึ่งมักจะอยู่ในบริบทของ IoT ดังนั้นเราสามารถสันนิษฐานได้ว่าอุปกรณ์มีการเชื่อมต่อกับปลายทางแล้ว ในกรณีนี้หากปลายทางสุดท้ายของข้อความคือเซิร์ฟเวอร์ (ตรงข้ามกับไคลเอนต์อื่นเซิร์ฟเวอร์จะส่งข้อความไปยัง), ดังนั้นโปรโตคอลค่าใช้จ่ายอาจน้อยที่สุด
<message><body>8 bytes.</body></message>
ค่า "โอเวอร์เฮด" 33 ไบต์ เป็นสิ่งที่ควรค่าแก่การชี้ให้เห็นว่า XML คือข้อความดังนั้นหากข้อความของคุณมักเป็นเลขฐานสองก็จะมีความเหมาะสมน้อยลงเพราะข้อมูลนั้นจำเป็นต้องเข้ารหัส (เช่นไปที่ฐาน64 ) ซึ่งจะเพิ่มค่าใช้จ่ายและการคำนวณ ความต้องการ
ดังนั้นในที่สุด:
XMPP มีค่าใช้จ่ายจำนวนมากสำหรับอุปกรณ์ IoT ที่ส่งข้อความสั้น ๆ บ่อยครั้งหรือไม่?
หากมีการเชื่อมต่ออย่างต่อเนื่องและข้อความส่วนใหญ่ไม่มีโครงสร้างฉันก็ไม่คิดเช่นนั้น อย่างไรก็ตามหากคุณไม่ต้องการสิ่งที่เสนอ (พลวัตเกี่ยวกับโครงสร้าง) แสดงว่ามีวิธีการที่เหมาะสมกว่า
หากเรามีบริบทที่เซิร์ฟเวอร์กลางเดียวกำลังประมวลผลและ / หรือใช้ข้อความระหว่างอุปกรณ์ต่าง ๆ แม้ว่าอุปกรณ์ใด ๆ ที่ทำนั้นอาจจะง่ายและตรงไปตรงมาโปรโตคอลที่สามารถ encapsulate ข้อความที่หลากหลายจะยังคงมีประโยชน์ หากอุปกรณ์ไคลเอนต์มีทรัพยากร จำกัด เราสามารถเข้ารหัสโปรโตคอลจำนวนมากและการห่อแต่ละข้อความจากปลายนั้นกลายเป็นงานที่ง่ายมาก ฉันเชื่อว่าอุปกรณ์ IoT จำนวนมากที่ปรับใช้เซิร์ฟเวอร์ HTTP ทำเช่นนั้น (ซึ่งเป็นสิ่งที่ตรงกันข้ามกับ "ไคลเอนต์ง่ายเซิร์ฟเวอร์ที่ซับซ้อน") เซิร์ฟเวอร์เหล่านั้นไม่สามารถจัดการกับคำขอ HTTP ใด ๆ (ยกเว้นผ่านการปฏิเสธการฟอร์แมตล่วงหน้า) และมีชุดของสิ่งต่าง ๆ ที่กำหนดไว้อย่างชัดเจนและมุ่งเน้นที่จะทำและการตอบสนองที่พวกเขาจะส่ง