TCP, UDP ve MQTT ile ilgili deneyimlerimin yanı sıra gözden geçirilecek bazı ek kaynaklar hakkında birkaç düşünce.
UDP ile, bir ağ düğümü, istemci üzerindeki bir uygulamanın gönderilen UDP mesajlarının yalnızca bazılarını gördüğü sessiz hata sorunuyla karşılaştım. Ağ trafiğinin ters gitmesinin çok fazla nedeni vardır. UDP'nin sorunu, paket üreticisi ve paket tüketicisi arasındaki ağ yolundaki düğümlerden herhangi biri olduğunda paketlerin hemen hemen atılabilmesidir. Wikipedia konusuna bakın Paket kaybı .
Soru, mevcut ağ bağlamında ne olursa olsun kayıp oranınızdır. Bu bir LAN veya alt ağ içindeki iletişim ise kayıp oranınız düşük olabilir. WAN'da veya internette kayıp oranınız oldukça yüksek olabilir. UDP paketleri birkaç nedenden dolayı atılır ve yönlendirilir, ancak ağ koşulları bu atlama sayısının azaltılmasına izin verir. Hesap verebilirlik olmadan paketleri büyük boşluğa göndermek sessiz arıza olasılığını açık bırakır.
Durumunuzda, bir ack almadan zaman aşımından sonra yeniden iletim ile basit bir ack yeterli olacaktır.
Bakımlı bir TCP bağlantısı üzerinden XML mesajları yaptım ve harika çalıştı. Ben işlemek için uygulama katmanına her arabellek tam iletileri teslim bir katman vardı. İletinin başlangıcında XML başlangıç etiketi ve iletinin tamamının ne zaman alındığını bilmek için bir XML bitiş etiketi ile paketlemek için XML kullandım.
TCP'nin sıralı paket sırası, tekrarsızlık ve bağlı bir aktarım mekanizması olması gibi birkaç özelliği vardır, diğer ucun kaybolup kaybolmadığını bilmeniz biraz zaman alabilir. Bağlanmak ve bağlantıyı kesmek gecikmelere neden olabilir, ancak normal koşullar altında külfetli olmaz, ancak ağ koşulları TCP veriminin yavaşlamasına neden olabilir.
MQTT, normalde TCP olan bir ağ aktarım katmanı tarafından aktarılan bir protokoldür. MQTT bir yayınlama / abone olma modeli kullanır, bu nedenle mesaj depolaması olmaz. Dolayısıyla, bir yayıncı abone bağlı değilse o zaman bağlandığında bir mesaj yayınladığında, mesajı görmez. MQTT neredeyse gerçek zamanlı, sanırım kısaltmanın telemetri kısmı bu kadar. Ben küçük mesajlar için MQTT gibi ve Mosquitto kullanarak MQTT üzerinden JSON yük ile bazı deneyler yapıyorum. Bu makaleye , MQTT ve hizmet kalitesi hakkında genel bilgi veren Mosquitto (MQTT) ile güvenilir mesaj teslimi . Ve örnek bir uygulama olan IoT - MQTT Yayınlama ve Abone C Kodu da dahil olmak üzere kaynaklara bağlantılar içeren bu kısa makaleye bakın .
Mesajları saklamak için abone içinde JSON metni ve bir SQLite3 veritabanı kullanarak MQTT ile yaptığım deneyimler https://github.com/RichardChambers/raspberrypi/tree/master/mqtt adresinde kaynak C'de ve oldukça dağınık olsa da.
İşte 13 dakikalık bir video # 144 İnternet Protokolü: CoAP vs MQTT, Ağ Koklama ve IKEA Tradfri Hacking için hazırlık . Bu, CoAP, Kısıtlı Uygulama Protokolü hakkında ilginç bir makale : CoAP, IoT'nin 'modern' protokolüdür . CoAP'ın bu toplamı var:
Erken benimseyenler, Kısıtlı Uygulama Protokolünün kısıtlı ağlar ve cihazlar için son derece iyi çalıştığını kabul eder. Bilinmeyen bir şey: "Çok sıkışık bir kablosuz ağda - Wi-Fi veya hücresel - CoAP, MQTT gibi bir İletim Kontrol Protokolü tabanlı (TCP) protokolünün bir el sıkışma işlemini bile başaramadığı durumlarda çalışmaya devam edebilir, "Vermillard dedi.
Bunun nedeni, diğer IoT protokollerinin çoğunun aksine, CoAP'nin UDP üzerine inşa edilmiş olmasıdır. Başka bir deyişle, TCP ile karşılaşıldığı şekliyle protokol el sıkışması veya hata düzeltme anlamına gelmez. "CoAP, HTTP kadar güvenilir olmayabilir veya MQTT gibi iletilerin teslim edilmesini garanti etmez, ancak son derece hızlıdır." "Bazı mesajların alınamaması sorununu yaşıyorsa, aynı zaman aralığında daha fazla mesaj gönderebilirsiniz."
Bakabileceğiniz AMQP, STOMP ve CBOR gibi birkaç tane daha var. Bkz CBOR standart bir web sitesi gibi bu tez, CBOR protokolü Uygulanmasına ve değerlendirilmesi . Mesajlaşma Protokolünüzü Seçme: AMQP, MQTT ve STOMP'yi karşılaştıran ve kontrast oluşturan ve RabitMQ aracısı hakkında bir notla biten AMQP, MQTT veya STOMP makalesine bakın :
Umarım bu, birçok kullanım vakanız için orada protokol çorbasında gezinmeye başlamanıza yardımcı olabilir. Şirketlerin farklı ihtiyaçları olan birçok uygulamaya sahip olması yaygın olduğundan, farklı uygulamalarda üç brokerın hepsine de ihtiyaç duyabilirsiniz. Burası, RabbitMQ gibi katı bir çok protokollü, çok dilli brokerın devreye girdiği yerdir - çünkü STOMP, MQTT veya AMQP'yi içeri gönderebilir ve diğerlerinden birini çıkarabilir. Bu protokollerden biri tarafından kilitlenmenize gerek yoktur - her üçü de RabbitMQ aracısı tarafından desteklenir ve bu da onu uygulamalar arasında birlikte çalışabilirlik için ideal bir seçenek haline getirir. Eklenti mimarisi ayrıca RabbitMQ'nun gelecekte bu protokollerin ek veya güncellenmiş sürümlerini desteklemek için gelişmesini sağlar.
Yaklaşık 60 slayttan oluşan bu slayt paylaşım paketi, güvenilirlik ve sağlamlık için farklı ihtiyaçlara sahip olan iki farklı IoT grubunun (Tüketiciler ve Endüstriyel) gereksinimlerine bakan dört farklı IoT protokolü arasında bir karşılaştırma ve kontrast yapar. IoT için Doğru Mesajlaşma Standardı nedir? .
Ack
ing gerekli değildir. Bence UDP üzerinde güvenilirlik üzerinde çalışmak çok mantıklı değil, TCP'nin amacı bu.