Mosquitto'nun web soketlerini kullanmalı mıyım veya müşterileri doğrudan mı bağlamalıyım?


11

Bu bloga göre , Mosquitto (MQTT brokeri) artık istemcilere web soketleri üzerinden bağlanmayı destekliyor. Blog makale web tarayıcıları (henüz) uygun TCP soketleri desteklemediğinden web soket protokolü rağmen web yuvaları, tarayıcı uygulamaları için daha yararlı olduğunu ima görünüyor edilir modern tarayıcılar çoğunluğu tarafından desteklenen.

Bir ağda sadece çeşitli istemcilerim varsa (örneğin, Raspberry Pis gibi mikrodenetleyicilere dayalı sensörler ve aktüatörler), doğrudan TCP bağlantıları üzerinden web soketleri kullanmanın herhangi bir avantajı olur mu? Web soketi protokolünün ek yükü yalnızca bir tarayıcıyla iletişim kurduğunuzda buna değer mi?


1
Tüm ağı kodlayıp kodlamadığınızı söyler misiniz? Yani tüm düğümler veya hem istemci hem de sunucu? Ya da bir başkasının yazılımı ile etkileşime girmek zorundaysanız? Bu sadece müşterileri
kodlıyormuş

1
@Mawg sunucusu Mosquitto MQTT aracısı olacak, ancak tüm istemciler için hangi protokolü kullanacağımı seçebilirim (ve Mosquitto hem web soketleri hem de doğrudan TCP bağlantıları sunuyor, bu yüzden sordum).
Aurora0001

1
Bence burada bir karışıklık var. @ Auroa0001 "doğrudan TCP" ile ne anlama geldiğini MQTT Websockets yerine MQTT (... TCP üzerinden) kullandığını varsayalım. Her iki durumda da kullanılabilir kütüphaneler vardır, bu nedenle soketler için herhangi bir kod yazmaya gerek yoktur.
ralight

@ralight evet, gerçekten soruyu sorduğumda niyetim buydu. Cevaplar biraz sapmış gibi görünüyor.
Aurora0001

Yanıtlar:


7

Buradaki soru "TCP üzerinden MQTT kullanmalı mıyım, yoksa websockets üzerinden MQTT kullanmalı mıyım? Başka bir deyişle, "websockets protokolünde MQTT'yi kapsüllemek iyi bir fikir midir?"

Bu (neredeyse) tamamen uygulamanıza ve web tarayıcı desteğine ihtiyacınız olup olmadığına bağlıdır - muhtemelen bir tarayıcıda mesaj tüketmek veya güvenlik duvarı nedenleriyle. Sunucunuzun saf MQTT için bağlantı noktası 1883 veya daha iyisi 8883'te erişememesi durumunda, websockets en iyi seçeneğiniz olabilir.

Websockets ek bant genişliği gerektirir, ancak bunun sizin için önemli olup olmadığı yalnızca yanıtlayabileceğiniz bir şeydir.

Ayrıca, Mosquitto'nun mevcut sürümlerinde, websockets'in olabildiğince iyi çalışmadığından, websockets mesajları gönderirken / alırken ekstra gecikme olabileceğini de belirtmek gerekir. Gelecekteki sürümlerde sorun olmayacak bir şey bu.


7

Yalnızca iç iletişim zaman sizin ağ ( intranet ), saf TCP kullanarak iyi olacak. Ancak başka bir sunucuya bağlanmak zorunda kalırsanız, sorunlar ortaya çıkacaktır.

Çünkü modern sunucuların çoğu istemcilerin rasgele bağlantı noktaları üzerinden bağlanmasına izin vermez. Yalnızca bazı özel bağlantı noktalarının bağlanmasına izin verirler. Bu kadar. Bu nedenle, başka bir sunucuya bağlanmak zorundaysanız, saf TCP bağlantısı yerine web soketini kullanmak daha iyidir.

Eğer yükü düşünüyorsanız, o kadar büyük değil . Web soketinin ek yükü hakkında daha fazla bilgi edinmek istiyorsanız bu makaleye başvurabilirsiniz .

Kişisel görüşüme göre, bazı ciddi endişeleriniz dışında websocket'i her zaman kullanmak daha iyidir.


2
Err, TCP ve websockets protokollerdir: tools.ietf.org/html/rfc6455 , ayrıca TCP düşük seviyede bir soket IS.
Goufalite

@ThisaruGuruge Cevabınız için teşekkür ederim - sorudaki senaryomda, cevabınızı değerlendirerek web soketleri üzerinden TCP seçeceğinizi varsayıyorum? Özellikle web soketleri temel olarak tarayıcılar tarafından destekleniyor gibi göründüğünden, TCP soketleri üzerinde web soketlerini kullanmanız gereken kod yükü vardır.
Aurora0001

1
"modern sunucuların çoğu istemcilerin rasgele bağlantı noktaları üzerinden bağlanmasına izin vermez" - sunucu hangi bağlantı noktasının bağlanacağını seçebilir ( man7.org/linux/man-pages/man2/bind.2.html ), ayrıca bir güvenlik duvarı daha da kısıtlayın. ANCAK, "başka bir sunucuya bağlanmak zorunda kalırsanız, sorunlar ortaya çıkacaktır " derken aynı fikirde değilim . Bunu " ortaya çıkabilir" olarak yeniden yazın. O zaman bile, bu web soketlerinin muhtemelen ham soketlerden daha kolay hale getireceği bir yapılandırma meselesidir.
Mawg, Monica

6

tl; dr - kendiniz kodlamak için her zaman ücretsiz kütüphaneleri tercih edin (aşırı gereksinimleriniz yoksa)


Mosquitto'nun web soketlerini kullanmalı mıyım veya müşterileri doğrudan mı bağlamalıyım?

Bir ip parçası ne kadardır? (YMMV)

Sadece genel olarak konuşabiliyorum, ama sarıcı kütüphaneleri her zaman ham soketlere (ya da gerçekten, bir kütüphaneden ücretsiz olarak alabileceğim herhangi bir şeyi kodlamaya) tercih ediyorum.

Kodlamayı daha basit ve daha az hataya eğilimli yaparlar. Bir sürü ev tutma ve hata işleme ile ilgileniyorlar, bu da kendinizi yazmak ve hata ayıklamak zorunda kalacağınız, bir kütüphane olarak genel olarak iyi incelenmiş ve test edilmiş ve binlerce kişi tarafından kullanılıyor. hataları bildirir / sizin için düzeltir.

Ayrıca, uygulamanızı geliştirmek (ve muhtemelen bağlantı noktası) için daha az kod anlamına gelir, bu da uygulamanızı geliştirmek, test etmek ve cilalamak veya bir sonrakine geçmek için daha fazla zaman anlamına gelir.

Tüm bu kütüphaneci iyiliğin (hata işleme, hortum tutma ve benzeri) iyi, istikrarlı bir yazılım elde etmek için kendinizi kodlamanız gereken bir şey olduğunu kabul ederseniz, tek ek yük muhtemelen bir işlev çağrısıdır.

Performans konusunda endişeleriniz varsa sadece profil oluşturun. Ancak, soket saniyede yüzlerce kez aktif olmadıkça, rahatsız bile etmem.


TCP bağlantıları ve (web) soket bağlantıları için ücretsiz kütüphaneler vardır ve her ikisi de bir "alınan mesaj" olayı gerektirir.
Goufalite

2
OP, verimlilik için TCP veya web soketlerini kullanmanın daha iyi olup olmadığını bilmek ister ve "rahatsız etmemek için bir soyutlama kitaplığı kullanın" diyorsunuz. Tabii, hangisi? C # System.Net.Sockets (iyi, iyi ...) içinde bir TcpClient kütüphanesi ve bir nuget paketinde (WebSocketSharp) bir websocket kütüphanesi var. Tüm diller için genel bir MQTT kütüphanesi olduğunu kabul ediyorum, ancak OP hangi protokolü kullanması gerektiğini seçmek için üzerinde kontrol sahibi olmak istiyor.
Goufalite
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.