ความคิดบางอย่างเกี่ยวกับประสบการณ์ของฉันกับ TCP, UDP และ MQTT รวมถึงแหล่งข้อมูลเพิ่มเติมเพื่อตรวจสอบ
ด้วย UDP ฉันได้พบกับปัญหาความล้มเหลวเงียบที่แอปพลิเคชันบนโหนดเครือข่ายหนึ่งไคลเอ็นต์จะเห็นข้อความ UDP เพียงบางส่วนที่ถูกส่ง มีหลายเหตุผลเกินไปที่ทราฟฟิกเครือข่ายอาจทำงานผิดพลาด ปัญหาเกี่ยวกับ UDP คือแพ็คเก็ตสามารถถูกทิ้งได้ค่อนข้างมากเมื่อใดก็ตามที่โหนดใด ๆ ในเส้นทางเครือข่ายระหว่างผู้ผลิตแพ็คเก็ตและผู้บริโภคของใบสำคัญแพ็คเก็ต ดูการสูญเสียวิกิพีเดียหัวข้อแพ็คเก็ต
คำถามคืออัตราการสูญเสียของคุณคือเท่าใดภายใต้บริบทเครือข่ายปัจจุบัน ดังนั้นหากเป็นการสื่อสารภายใน LAN หรือเครือข่ายย่อยอัตราการสูญเสียของคุณอาจต่ำ ใน WAN หรือทั่วอินเทอร์เน็ตอัตราการสูญเสียของคุณอาจค่อนข้างสูง แพ็กเก็ต UDP จะถูกยกเลิกด้วยเหตุผลหลายประการและกำหนดเส้นทางอย่างไรก็ตามเงื่อนไขเครือข่ายอนุญาตให้ลดจำนวนการนับ hop นั้น การส่งแพ็กเก็ตออกไปเป็นโมฆะที่ยอดเยี่ยมโดยไม่มีความรับผิดชอบทำให้เปิดโอกาสของความล้มเหลวเงียบ
ดูเหมือนว่าในกรณีของคุณเพียงแค่ ack ที่เรียบง่ายด้วยการส่งสัญญาณอีกครั้งหลังจากหมดเวลาโดยไม่ได้รับ ack ก็เพียงพอแล้ว
ฉันทำข้อความ XML ผ่านการเชื่อมต่อ TCP ที่ได้รับการดูแลรักษาและใช้งานได้ดี ฉันมีเลเยอร์ที่ส่งข้อความทั้งหมดในบัฟเฟอร์ไปยังชั้นแอปพลิเคชันเพื่อจัดการ ฉันใช้ XML เพื่อทำแพคเกจข้อความด้วยแท็กเริ่มต้น XML สำหรับการเริ่มต้นของข้อความและแท็กสิ้นสุด XML เพื่อทราบเมื่อได้รับข้อความทั้งหมด
TCP มีคุณสมบัติบางอย่างเช่นลำดับของแพ็คเก็ตไม่ซ้ำและการเป็นกลไกการเชื่อมต่อที่เชื่อมต่อหมายความว่าคุณรู้ว่าอีกปลายหนึ่งหายไปหรือไม่แม้ว่ามันอาจใช้เวลาสักครู่ในการค้นหา การเชื่อมต่อและยกเลิกการเชื่อมต่ออาจทำให้เกิดความล่าช้า แต่ไม่เป็นภาระภายใต้เงื่อนไขปกติแม้ว่าสภาพเครือข่ายอาจทำให้ปริมาณงาน TCP ช้าลง
MQTT เป็นโปรโตคอลที่ขนส่งโดยเลเยอร์เครือข่ายการขนส่งโดยปกติ TCP MQTT ใช้รูปแบบการเผยแพร่ / สมัครสมาชิกดังนั้นจึงไม่มีการจัดเก็บข้อความ ดังนั้นเมื่อผู้เผยแพร่เผยแพร่ข้อความหากสมาชิกไม่ได้เชื่อมต่อในเวลานั้นเมื่อมันเชื่อมต่อมันจะไม่เห็นข้อความ MQTT เป็นแบบเรียลไทม์ฉันคิดว่านั่นเป็นส่วนหนึ่งของคำย่อเกี่ยวกับระบบโทรมาตร ฉันชอบ MQTT สำหรับข้อความเล็ก ๆ และทำการทดลองกับ JSON payload ผ่าน MQTT โดยใช้ Mosquitto ดูบทความนี้การส่งข้อความที่เชื่อถือได้ด้วย Mosquitto (MQTT)พร้อมภาพรวมของ MQTT และคุณภาพของบริการ และดูบทความสั้น ๆ นี้มีการเชื่อมโยงไปยังแหล่งข้อมูลรวมทั้งโปรแกรมตัวอย่างIOT - MQTT เผยแพร่และสมาชิกรหัส
การทดลองของฉันกับ MQTT ใช้ข้อความ JSON และฐานข้อมูล SQLite3 ในสมาชิกที่จะเก็บข้อความที่https://github.com/RichardChambers/raspberrypi/tree/master/mqttแม้ว่าแหล่งที่มาคือใน C และเป็นที่ค่อนข้างยุ่ง
นี่คือวิดีโอ 13 นาที# 144 โปรโตคอลอินเทอร์เน็ต: CoAP VS MQTT, เครือข่ายดมกลิ่นและการเตรียมการสำหรับ IKEA Tradfri แฮ็ก นี้เป็นบทความที่น่าสนใจเกี่ยวกับ CoAP, ข้อ จำกัด Application Protocol: CoAP เป็น IOT ของ 'ทันสมัยโปรโตคอล มีการสรุปของ CoAP นี้:
ผู้ใช้ในช่วงต้นยอมรับว่า Constrained Application Protocol ทำงานได้ดีมากสำหรับเครือข่ายและอุปกรณ์ที่ถูก จำกัด บางสิ่งที่ไม่เป็นที่รู้จัก: "บนเครือข่ายไร้สายที่แออัดมาก - Wi-Fi หรือเซลลูลาร์ - CoAP สามารถทำงานต่อไปได้ซึ่งโปรโตคอลที่ใช้โปรโตคอลการควบคุมการส่งผ่านโปรโตคอล (TCP) เช่น MQTT ไม่สามารถแม้แต่จัดการจับมือให้เสร็จสมบูรณ์ "Vermillard กล่าว
นี่เป็นเพราะไม่เหมือนกับโปรโตคอล IoT อื่น ๆ ส่วนใหญ่ CoAP ถูกสร้างขึ้นบน UDP กล่าวอีกนัยหนึ่งก็หมายความว่าไม่มีการจับมือโปรโตคอลหรือการแก้ไขข้อผิดพลาดเมื่อพบกับ TCP "CoAP อาจไม่น่าเชื่อถือเท่ากับ HTTP หรือรับประกันการส่งข้อความเช่น MQTT แต่มันรวดเร็วมาก" Matthieu กล่าว "ถ้าคุณโอเคกับข้อความที่ไม่ได้รับคุณสามารถส่งข้อความอีกมากมายภายในระยะเวลาเดียวกัน"
มีบางคนเช่น AMQP, STOMP และ CBOR ที่คุณอาจมองด้วย ดูเว็บไซต์มาตรฐาน CBORเช่นเดียวกับวิทยานิพนธ์นี้การดำเนินงานและการประเมินผลของโพรโทคอ CBOR ดูบทความนี้การเลือกโปรโตคอลการส่งข้อความของคุณ: AMQP, MQTT หรือ STOMPซึ่งเปรียบเทียบและตัดกัน AMQP, MQTT และ STOMP และตัดกับหมายเหตุเกี่ยวกับนายหน้า RabitMQ:
หวังว่านี่จะช่วยให้หลาย ๆ คนเริ่มนำทางซุปโพรโทคอลในแต่ละกรณีที่คุณใช้งาน เนื่องจากเป็นเรื่องปกติสำหรับ บริษัท ที่มีแอพพลิเคชั่นมากมายที่มีความต้องการที่แตกต่างกันจึงเป็นไปได้อย่างแน่นอนที่คุณอาจต้องใช้โบรกเกอร์ทั้งสามรายในแอพพลิเคชั่นต่าง นั่นคือจุดที่มีมัลติพล็อตที่มั่นคงนายหน้านายหน้าหลายคนอย่าง RabbitMQ เข้ามาเนื่องจากสามารถส่ง STOMP, MQTT หรือ AMQP เพื่อรับหนึ่งในนั้น คุณไม่จำเป็นต้องล็อคอินโดยหนึ่งในโปรโตคอลเหล่านี้ - ทั้งสามได้รับการสนับสนุนโดยนายหน้า RabbitMQ ทำให้เป็นตัวเลือกที่เหมาะสำหรับการทำงานร่วมกันระหว่างแอปพลิเคชัน สถาปัตยกรรมปลั๊กอินยังช่วยให้ RabbitMQ พัฒนาขึ้นเพื่อรองรับโปรโตคอลเหล่านี้เพิ่มเติมหรือที่ได้รับการปรับปรุงในอนาคต
แพคเกจแชร์สไลด์ของสไลด์ 60 แผ่นนี้เปรียบเทียบและเปรียบเทียบความแตกต่างระหว่างสี่โปรโตคอล IoT ที่แตกต่างกันเพื่อดูความต้องการของกลุ่ม IoT สองกลุ่มที่แตกต่างกันคือผู้บริโภคและอุตสาหกรรมซึ่งมีความต้องการความน่าเชื่อถือและความทนทานที่แตกต่างกัน มาตรฐานการส่งข้อความที่เหมาะสมสำหรับ IoT คืออะไร .
Ack
ไอเอ็นจีไม่จำเป็น ฉันคิดว่าการทำงานกับความน่าเชื่อถือด้านบนของ UDP นั้นไม่ได้สมเหตุสมผลมากนักนั่นเป็นสิ่งที่ TCP ใช้