MQTT ve Web Sockets arasındaki fark nedir ve ne zaman kullanmalıyım?


17

MQTT ve Web Yuvaları arasındaki en büyük farklar nelerdir?

Ev otomasyonu için IoT kullanırken - Rest API tabanlı ve tarayıcı tabanlı erişilebilirlik gerektiğinde bunlardan biri kullanılması gereken farklı cihazlar üzerinde kontrol ve izleme erişimi.

Raspberry Pi 2 B + üzerinde Java (Pi4J Kütüphanesi) kullanıyorum.

Işık ve karanlık, nem, PID vb.Gibi birkaç sensör kurulumum var.

Ayrıca gerekirse verileri gönderebileceğim bir bulut sunucum var.


1
Hangisini kullanacağınıza, mevcut ve olası gelecekteki tüm gereksinimlerinizi açıkça tanımlayarak karar verirsiniz. Ardından hangi teknolojinin gereksinimlerinizi en iyi karşıladığını gösteren bir çapraz matris oluşturursunuz. Daha sonra gereksinimlerinizi karşılamak için bir veya daha fazla teknoloji kullanmayı tercih edersiniz.

Yanıtlar:


23

Buradaki soru ayarı biraz yanıltıcıdır, çünkü aslında bu protokoller hiç bir şekilde karşılaştırılamaz. TCP ve IP gibidir, üst üste katmanlar. [1]

Websockets, aynı seviyede olan 'rakip' RESTful http'nin sağlamadığı şeyleri sağlamak için düşük seviyeli bir protokoldür: her istekte açık ve kapalı olmasına gerek kalmadan daima açık bir kanal. [2]

MQTT, verileri yayınlamak veya abone olmak için hafif bir yol sağlar. Karışıklık, bu aboneliğin bir çeşit kanal olması olabilir, ancak bu farklı bir kanal türüdür. MQTT'de sürekli açık bir bağlantı yapmak için Websockets AND MQTT'ye aynı anda ihtiyacınız vardır.

IoT'de ve herhangi bir tasarımda bir akıma ihtiyacınız olup olmadığını seçmeniz (WebSockets vs RESTful) ve MQTT hakkında, uygulamanızda bir abonelik ve yayınlama mekanizması isteyip istemediğinizi düşünmeniz gerekebilir.

Bazı durumlarda, ortak bir şey varsa, WebSockets üzerinden MQTT'yi düşünebilirsiniz. [3]

Sorunun cevabı:

Bir Rasperry Pi ve yerin etrafında birkaç sensör kurulumunuz olduğunu söylüyorsunuz. Sensörler kendi denetleyicileriyle Rasperry'den uzaksa, verileri toplamak için MQTT'yi kullanabilirsiniz. Verileri buluta depolamak için verileri HTTP olarak gönderin. Bulutta dinlenme yoluyla veri sağlayın. [4]

Websockets için gerek yoktur, ancak yararlı bulursanız kullanın.

Kaynaklar:

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

[2] https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-exptanding-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
Ayrıca son nokta ilgili: Bu cevap Roger Işık, MQTT web prizlere ham soketlerinin kullanım durumları karşılaştırılarak mosquitto MQTT broker geliştiricisi tarafından.
Aurora0001

Teşekkür ederim mico bu harika bir açıklama. ama yine de ne kullanacağımı net değilim .. senaryom için ne önerirsiniz?
Shakti Phartiyal

3
Harika yanıt, ancak: "open and close" WRT WS: // vs. HTTP: // kullanmak yanıltıcı olabilir; ilk olarak, HTTP 1.1 istekleri ardışık düzenlenebilir, bu nedenle gerçek bir soket düzeyinde bir bağlantı, bu anlamda açılıp kapanmadan sınırsız sayıda istek içerebilir. Web soketlerinin avantajının, eşzamanlı bir "talep ve yanıt" döngüsüne bağlılık olmadığını söylemek daha iyi olur ; değişim için asgari kurallara sahip açık, çift yönlü bir kanalınız var.
goldilocks

"MQTT'de sürekli açık bir bağlantı kurmak için Websockets AND MQTT'ye aynı anda ihtiyacınız var." Bundan emin misin? İstemci PINGRESP paketlerini sunucuya geri yayınlamaya devam edebiliyorsa lütfen MQTT'nin neden "sürekli açık bağlantı" tutmak için webSockets kullanması gerektiğini açıklayın? MQTT uygulayan bir istemci, bağlantıyı canlı tutmak için bir PINGRESP paketi gönderir ve webSockets'i rahatsız eden bir istemci, bağlantıyı canlı tutmak için sunucuya boş bir paket webSocket.send ('') göndermek için keepAlive () kullanır.
John

Hmm .. Bu paketle bağlantıyı canlı tutabilirsiniz . Orada MQTT TCP / IP (HTTP değil) üzerinde çalışır öğrendim. Bu durumda bağlantıyı açık bırakabilirsiniz.
mico

9

Her ikisinin de tam dubleks iletişim kurmanıza izin vermesi, böylece sunucunun istemciyi sorgulamadan (HTTP'de olduğu gibi) hemen istemciye iletebilmesi için karşılaştırılabilir.

Ancak, Websockets bir istemci ile bir sunucu arasında basit bir noktadan noktaya bağlantı için tasarlanmıştır. MQTT, çok sayıda ilgili tarafın ilgisini çekebilecek mesajlara abone olabilmesi için temel mesaj gönderme üzerine ekstra soyutlamalar katmanlar. Bu nedenle, iletiler 'ileti konusu' ile yönlendirilebilir, böylece birçok istemci, bir sunucunun tüm istemcilerden gelen tüm iletileri duymayı seçebileceği, ancak konuya göre filtreleyebileceği kavramsal bir kuyruğu paylaşabilir.

MQTT, abonelerin hemen mesajı alması için tutulan mesajlar gibi çeşitli diğer faydalı özelliklere ve istemcinin anormal bağlantısı kesildiğinde otomatik olarak gönderilebilen bir mesaj olan LWT'ye (Son İrade ve Ahit) sahiptir. Özetle, MQTT basit bir Web Soketinin yapmadığı özellikler ve soyutlamalar sunan 'yığının üstündedir'.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.