ความแตกต่างระหว่าง MQTT และ Web Sockets คืออะไรและเมื่อใดที่ฉันควรใช้


17

อะไรคือความแตกต่างที่สำคัญระหว่าง MQTT และ Web Sockets

เมื่อใช้ IoT สำหรับระบบอัตโนมัติในบ้าน - ควบคุมและตรวจสอบการเข้าถึงอุปกรณ์ต่าง ๆ ซึ่งหนึ่งในนั้นควรใช้เมื่อ Rest API ที่ใช้และจำเป็นต้องเข้าถึงเบราว์เซอร์

ฉันใช้ Java (Pi4J Library) กับ Raspberry Pi 2 B +

ฉันมีเซ็นเซอร์หลายตัวเช่นแสงและความมืดความชื้น PID ฯลฯ

ฉันยังมีคลาวด์เซิร์ฟเวอร์ที่ฉันสามารถส่งข้อมูลได้หากต้องการ


1
คุณตัดสินใจว่าจะใช้อันไหนโดยการกำหนดข้อกำหนดปัจจุบันและแนวโน้มในอนาคตของคุณอย่างชัดเจน จากนั้นคุณจะสร้าง cross-matrix ที่แสดงว่าเทคโนโลยีใดตรงกับความต้องการของคุณมากที่สุด จากนั้นคุณเลือกที่จะใช้เทคโนโลยีอย่างน้อยหนึ่งอย่างเพื่อตอบสนองความต้องการของคุณ

คำตอบ:


23

การตั้งค่าคำถามที่นี่เป็นการทำให้เข้าใจผิดเล็กน้อยเนื่องจากจริงๆแล้วโปรโตคอลเหล่านี้ไม่สามารถนำมาเปรียบเทียบกันได้ มันเป็นเหมือน TCP และ IP เลเยอร์เหนือซึ่งกันและกัน [1]

Websockets เป็นโปรโตคอลระดับต่ำเพื่อให้สิ่งที่ 'คู่แข่ง' http สงบที่อยู่ในระดับเดียวกันไม่ได้ให้: ช่องเปิดเสมอโดยไม่ต้องเปิดและปิดในทุกคำขอ [2]

MQTT ให้วิธีการที่มีน้ำหนักเบาในการเผยแพร่หรือสมัครสมาชิกข้อมูล ความสับสนอาจเป็นไปได้ว่าการสมัครสมาชิกเหล่านั้นเป็นช่องทางบางประเภท แต่นั่นเป็นช่องทางที่แตกต่างกัน ในการทำการเชื่อมต่อแบบคงที่ใน MQTT คุณต้องมี Websockets และ MQTT ในเวลาเดียวกัน

ใน IoT รวมถึงการออกแบบใด ๆ คุณต้องเลือกว่าคุณต้องการสตรีมหรือไม่ (WebSockets vs RESTful) และเกี่ยวกับ MQTT คุณอาจต้องคิดว่าคุณต้องการกลไกการสมัครและการเผยแพร่บนแอปของคุณหรือไม่

ในบางกรณีคุณอาจพิจารณา MQTT ผ่าน WebSockets หากมีสิ่งใดที่ใกล้เคียงกัน [3]

ตอบคำถาม:

คุณบอกว่าคุณมีการติดตั้ง Rasperry Pi และเซ็นเซอร์หลายตัวรอบ ๆ สถานที่ หากเซ็นเซอร์อยู่ไกลจาก Rasperry กับตัวควบคุมของคุณเองคุณสามารถใช้ MQTT เพื่อรวบรวมข้อมูล ในการจัดเก็บข้อมูลไปยังคลาวด์ให้ส่งข้อมูลใน HTTP ในคลาวด์ให้ข้อมูลผ่านส่วนที่เหลือ [4]

สำหรับเว็บซ็อกเก็ตไม่จำเป็น แต่ถ้าคุณพบว่ามันมีประโยชน์ให้ใช้มัน

แหล่งที่มา:

[1] https://www.quora.com/What-are-the-pros-and-cons-of-WebSockets-versus-MQTT-as-real-time-web-infrastructure-for-the-Internet-of -Things

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/

[3] /programming/30624897/direct-mqtt-vs-mqtt-over-websocket

[4] http://www.theinternetofthings.eu/antonio-grasso-mqtt-vs-http-what-best-protocol-iot


3
ประเด็นที่เกี่ยวข้องกับประเด็นสุดท้ายของคุณ: คำตอบนี้โดย Roger Light ผู้พัฒนาโบรกเกอร์ Mosquitto MQTT เปรียบเทียบการใช้ซ็อกเก็ตดิบกับซ็อกเก็ตเว็บกับ MQTT
Aurora0001

ขอบคุณ mico ที่เป็นคำอธิบายที่ยอดเยี่ยม แต่ฉันยังไม่ชัดเจนว่าจะใช้อะไร .. คุณอยากแนะนำอะไรกับสถานการณ์ของฉัน?
Shakti Phartiyal

3
คำตอบที่ดี แต่: การใช้"เปิดและปิด" WRT WS: // vs. HTTP: // อาจทำให้เข้าใจผิด อันดับแรกคำขอ HTTP 1.1 สามารถถูกไพพ์ไลน์ดังนั้นในระดับซ็อกเก็ตที่แท้จริงการเชื่อมต่อหนึ่งระดับอาจมีจำนวนคำขอไม่ จำกัด โดยไม่ต้องเปิดและปิดในกรณีดังกล่าว มันจะดีกว่าที่จะบอกว่าประโยชน์จาก WebSockets คือว่ามีความมุ่งมั่นที่จะซิงโครไม่มี"คำขอและการตอบสนอง"รอบ; คุณมีช่องทางเปิดสองทิศทางที่มีกฎน้อยที่สุดสำหรับการแลกเปลี่ยน
goldilocks

"ในการทำการเชื่อมต่อแบบคงที่ใน MQTT คุณต้องใช้ Websockets และ MQTT ในเวลาเดียวกัน" คุณแน่ใจเกี่ยวกับเรื่องนี้หรือไม่? โปรดอธิบายว่าทำไม MQTT จึงต้องใช้ webSockets เพื่อรักษา "การเชื่อมต่อเปิดคงที่" หากลูกค้าสามารถเผยแพร่แพคเก็ต PINGRESP ต่อไปยังเซิร์ฟเวอร์ได้ ไคลเอนต์ที่ใช้งาน MQTT จะส่งแพ็กเก็ต PINGRESP เพื่อให้การเชื่อมต่อมีชีวิตชีวาและไคลเอนต์ webSockets ที่ใช้งานจะใช้ keepAlive () เพื่อส่งแพ็กเก็ตที่ว่างเปล่า webSocket.send ('') ไปยังเซิร์ฟเวอร์เพื่อให้การเชื่อมต่อมีชีวิตชีวา
จอห์น

อืม .. คุณสามารถรักษาการเชื่อมต่อให้มีชีวิตรอดด้วยแพ็กเก็ตนั้น ฉันพบว่ามี MQTT ทำงานผ่าน TCP / IP (ไม่ใช่ HTTP) ในกรณีนี้คุณสามารถเปิดการเชื่อมต่อทิ้งไว้
mico

9

พวกมันเปรียบได้กับการที่ทั้งสองช่วยให้คุณมีการสื่อสารแบบ full-duplex ซึ่งเซิร์ฟเวอร์สามารถส่งผ่านข้อมูลไปยังลูกค้าได้ทันทีโดยไม่ต้องมีการสอบถามลูกค้า

อย่างไรก็ตาม Websockets ได้รับการออกแบบสำหรับการเชื่อมต่อแบบจุดต่อจุดอย่างง่ายระหว่างไคลเอนต์และเซิร์ฟเวอร์ MQTT เพิ่มเลเยอร์ abstractions ด้านบนของการส่งข้อความพื้นฐานเพื่อให้ผู้ที่สนใจหลายคนสามารถสมัครรับข้อความที่อาจสนใจ ข้อความจึงสามารถกำหนดเส้นทางโดย 'หัวข้อข้อความ' เพื่อให้ลูกค้าจำนวนมากสามารถแบ่งปันคิว notional ซึ่งเซิร์ฟเวอร์สามารถเลือกที่จะฟังข้อความทั้งหมดจากลูกค้าทั้งหมด แต่อาจกรองตามหัวข้อ

MQTT มีคุณสมบัติที่มีประโยชน์อื่น ๆ อีกมากมายเช่นข้อความที่เก็บไว้ซึ่งสมาชิกจะได้รับข้อความทันทีและ LWT (ความประสงค์สุดท้ายและพันธสัญญา) ซึ่งเป็นข้อความที่สามารถส่งได้โดยอัตโนมัติหากลูกค้ายกเลิกการเชื่อมต่ออย่างผิดปกติ โดยสรุป MQTT คือ 'คุณสมบัติที่สูงขึ้นของสแต็ค' และบทคัดย่อที่ Websocket ธรรมดาไม่สามารถทำได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.