Messenger MQTT kullanıyor mu
MQTT Protokolü – Facebook Messenger’ı IoT cihazlarına güçlendirmek
Özet:
Anlık mesajlaşma veya gerçek zamanlı iletişim: Sahnenin arkasında
Birçok insan için, özellikle düğümle çalışanlar.JS, gerçek zamanlı iletişim (RTC) tanıdık görünebilir. Düğüm kullanarak oluşturulan sohbet uygulamaları.JS, geliştiriciler için ortak bir başlangıç noktası haline geldi. Ancak, gerçek gerçek zamanlı iletişim elde etmek, göründüğü kadar kolay değildir. Bu makalede, RTC ile uğraşırken Facebook, Slack, Discord ve Telegram gibi büyük şirketlerin karşılaştığı pratik sorunlara genel bir bakış sunacağım.
Bu makalenin yalnızca RTC’ye odaklandığını ve veritabanı sistemi tasarımı veya kodlama gibi konuları kapsamadığını unutmayın.
Anahtar noktaları:
1. Gerçek zamanlı iletişim, kararsız ağ bağlantısı ve diğer sorunlar nedeniyle hala zorlu bir konudur.
2. RTC için 2 yönlü iletişim, WebSocket, Sunucu tarafından gönderilen etkinlikler, kısa/uzun anket ve MQTT gibi temel kavramları anlamak.
3. Büyük sohbet uygulamalarının tarayıcılar ve sunucuları arasında değiştirilen verilerin analiz edilmesi değerli bilgiler sağlayabilir.
4. Facebook Messenger, mesaj gönderme/alma, yazma ve diğer özellikler için WebSocket üzerinden MQTT kullanır.
5. Instagram ayrıca WebSocket üzerinden MQTT’yi kullanır, ancak ek API ile mesajları görüntüleme ve kullanıcı listeleri gibi özellikler çağrısında bulunur.
6. Telegram, tüm özellikleri için yalnızca WebSocket’e güvenir.
7. Slack and Discord WebSocket ve API farklı işlevsellikler çağrısında.
8. Zalo, mesajları ve diğer özellikleri almak için API ve HTTP uzun anketini kullanır.
9. Büyük şirketler gerçek zamanlı iletişim için ağırlıklı olarak WebSocket/TCP’ye güveniyor.
10. WebSocket’i API çağrılarıyla birleştirmek, sistemi ölçeklendirmeyi ve yönetmeyi kolaylaştırır.
Sorular:
1. Facebook Messenger ve Instagram gerçek zamanlı iletişim için hangi teknolojiler kullanıyor??
Hem Facebook Messenger hem de Instagram, gerçek zamanlı iletişim için WebSocket üzerinden MQTT kullanıyor.
2. Facebook Messenger’ın gerçek zamanlı iletişim sistemi tarafından desteklenen bazı özellikler nelerdir?
Facebook Messenger’ın gerçek zamanlı iletişim sistemi, mesaj gönderme/alma, yazma ve istekler gibi özellikleri destekler.
3. Instagram’ın Gerçek Zamanlı İletişim Sistemi Facebook Messenger’ın?
Instagram, gerçek zamanlı iletişim için WebSocket üzerinden MQTT kullanırken, ayrıca mesajları ve kullanıcı listelerini görüntüleme gibi işlevsellik çağrılarına dayanır.
4. Telegram gerçek zamanlı iletişim için hangi teknolojiyi kullanıyor?
Telegram, tüm gerçek zamanlı iletişim özellikleri için yalnızca WebSocket’e güvenir.
5. Slack’in gerçek zamanlı iletişim sistemi nasıl çalışır??
Slack, öğeleri listeleme ve mesaj gönderme gibi işlevlerle birlikte gerçek zamanlı mesaj almayı ve yazmayı etkinleştirmek için WebSocket ve API çağrılarını birleştirir.
6. Discord’un gerçek zamanlı iletişim sisteminin arkasındaki teknoloji nedir?
Discord’un gerçek zamanlı iletişim sistemi WebSocket ve API, mesaj almak, öğeleri listeleme, mesaj gönderme, yazma ve görülen işlevsellik çağrılarını kullanır.
7. Zalo gerçek zamanlı iletişimi nasıl ele alıyor?
Zalo, gerçek zamanlı iletişim için API ve HTTP uzun anketinin bir kombinasyonunu kullanır. Mesaj alma, öğeler listeleme, mesaj gönderme, yazma ve görülen işlevsellikler gibi özellikleri destekler.
8. Büyük şirketler gerçek zamanlı iletişim için neye güveniyor??
Büyük şirketler gerçek zamanlı iletişim için ağırlıklı olarak WebSocket/TCP’ye güveniyor.
9. WebSocket’i API çağrılarıyla birleştirmek ne gibi avantajlar sunuyor??
WebSocket’i API çağrılarıyla birleştirmek, gerçek zamanlı iletişim sistemini ölçeklendirmeyi ve yönetmeyi kolaylaştırır. API çağrıları, istemcilerden mesaj göndermek için kullanılabilir ve mevcut ara katman katmanlarını kimlik doğrulama, yetkilendirme ve hız sınırlama için kullanabilir.
10. Neden bazı şirketler WebSocket ve API çağrılarının bir kombinasyonunu kullanıyor??
Hem WebSocket hem de API çağrıları kullanma, şirketlerin belirli işlevler için HTTP API’lerinin ölçeklenebilirliğini artırmasına ve gerçek zamanlı mesaj iletimi için WebSocket’in avantajlarından yararlanmasına olanak tanır. Ayrıca, mevcut ara katman yazılımı katmanlarını yeniden kullanmayı sağlar ve ölçeklendirme işlemini basitleştirir.
11. Instagram’ın gerçek zamanlı iletişim sistemi neden Facebook Messenger’ın?
Instagram başlangıçta Facebook’tan ayrı olarak geliştirildi ve daha sonra edinildi. Bu nedenle, Facebook (Websocket tabanlı) tarafından kullanılan senkronizasyon sistemlerinde ve mevcut Instagram sisteminde farklılıklar olabilir.
12. Gerçek zamanlı iletişim için WebSocket ve MQTT gibi temel kavramları anlamanın önemi nedir??
WebSocket ve MQTT gibi temel kavramlar, gerçek zamanlı iletişimi anlamak ve geliştiricilerin daha verimli ve güvenilir sistemler oluşturmasını sağlamak için gereklidir.
13. Düğüm kullanarak sohbet uygulamaları oluşturmak için öğreticiler nasıl.JS Geliştiricilere Yardım Edin?
Düğüm kullanarak sohbet uygulamaları oluşturma öğreticileri.JS, geliştiricilere gerçek zamanlı iletişim yolculuklarına başlamak için gerekli özgüven sağlar. Ancak, gerçek zamanlı bir iletişim sistemi oluşturmanın çeşitli zorlukların üstesinden gelmeyi içerdiğinin farkında olmalıdırlar.
14. WebSocket Sunucusunu Ölçeklendirmek neden önemsiz bir görev?
WebSocket sunucusunu ölçeklendirmek, önemsiz olmayan bir görevdir çünkü WebSocket, tek bir kalıcı bağlantıyı açık tutmayı gerektiren durumlu bir iletişim protokolüdür. WebSocket, sunuculardan istemcilere mesaj göndermek için etkili olsa da, müşterilerden gelen mesajları kaydetmek gibi diğer mantık görevleri için kullanmak zor olabilir.
15. Büyük sohbet uygulamalarının tarayıcıları ve sunucuları arasında değiştirilen verileri incelemenin amacı nedir??
Büyük sohbet uygulamalarının tarayıcıları ve sunucuları arasında değiştirilen verileri incelemek, geliştiricilerin gerçek zamanlı iletişimin pratik uygulaması hakkında bilgi edinmesine ve mevcut sistemlerden öğrenmesine olanak tanır.
MQTT Protokolü – Facebook Messenger’ı IoT cihazlarına güçlendirmek
Mesaj yükleri ikili olarak kodlanır. Alıcının farklı bir üreticinin olduğu açık bir ağda, mesaj yükünün nasıl kodlandığına dair hiçbir bilgi olmadığından, bunu kod çözmekle ilgili sorunlarla karşılaşacaktır.
Anlık mesajlaşma veya gerçek zamanlı iletişim: Sahnenin arkasında
Birçok insan için, özellikle düğümle çalışan adamlar.JS, bu konu pek yeni değil. Gibi bir sürü öğretici var “Düğüm kullanarak basit bir sohbet uygulaması oluşturun.JS”, “Düğüm kullanarak gerçek zamanlı sohbet uygulaması.JS Express ve Socket.io”, vesaire. Bir şekilde sohbet uygulamalarını bir “Selam Dünya” Düğümle yolculuğumuza başlamak isteyen herhangi birimiz için.JS. Onların varlığıyla ilgili iyi olan şey, size özgüven vermektir. Bir dereceye kadar, bu kadar kısa sürede Facebook Messenger gibi bir şey inşa edebiliyorsanız nasıl emin değilsiniz (1H belki?)? Kötü olan şey şu ki o kadar kolay değil.
Gerçek şu ki, ne kadar çaba önerilse de, gerçek zamanlı iletişim (RTC) hem sektörde hem de akademik toplulukta hala sıcak bir konudur. Kontrol dışı birçok etki nedeniyle, kararsız ağ bağlantısı, yinelenen/çatışma bağlantısı, yinelenen mesaj vb., Gerçek bir gerçek zamanlı deneyim elde etmek zordur (hayır, merhaba dünyası öğreticilerini bitirmek gibi hissettiğiniz kişi bu değildir. Bu yazıda, Facebook, Slack, Discord, Telegram, vb.
Sadece gerçek zamanlı iletişim ile ilgili olduğu için, 2 yönlü iletişim, WebSocket, sunucu sayan etkinlikler, kısa/uzun oylama, MQTT gibi temel kavramlara bir göz atmanızı öneririm. Ayrıca, DB sistem tasarımı veya seçim veya kodlama ile ilgili değil, sadece RTC.
Büyük Adamlardan
Patronunuz sizden Facebook Messenger veya WhatsApp gibi bir sohbet sistemi oluşturmanızı isterse ne yapardınız?? İşte geçebileceğiniz liste:
- Öğretici Bul?
- Sistem tasarımı e -kitap
- Milyonlarca kullanıcı için eğitici olarak bir sohbet uygulaması tasarlayın.io
- Umarım, Facebook Mühendislik Blogu çalışmaları hakkında bir şeyler sızdırdı
- Google “Sohbet Uygulaması Nasıl Yapılır” 3 milyardan fazla sonuçla.
Ancak, baştan ya da tüm bu adımlardan sonra yapmanız gereken önemli bir adım var: Web uygulamalarını açın, tarayıcılar ve sunucular arasında değiştirilen verileri inceleyin. O’Sohbet arka ucunun ana özelliklerine dayanarak, bir sonraki bölümde size göstereceğim şey:
- İş parçacıklarını listeleyin, mesajları listeleyin
- Mesaj gönder
- Mesaj Alın
- Yazıyor
- Görülen
Facebook haberci
Teknoloji: WebSocket üzerinden MQTT
Özellik: Mesajlar, yazma, istek vb. Gönder/Al. tüm websocket
WebSocket isteklerinin yanıt verilerine bakın uç-chat.haberci.com. Verileri yüklemek, öğeleri listeleme, mesaj gönderme/alma, yazma, mesaj yayınlama ve WebSocket’e abone olarak gerçekleştirilir, API’ye değil.
Aynı şirket ve dolayısıyla aynı teknolojiler. Ama aynı köken değil, bu nedenle biraz farkla.
Teknoloji: WebSocket + API üzerinden MQTT
Özellik: Mesajlar gönderin/alın ve WebSocket üzerinden yazma, öğeleri listeleyin, görülen, kullanıcıyı çevrimiçi listeleyin, vb. API üzerinden.
Telgraf
Teknoloji: WebSocket
Özellik: tüm WebSocket
Gevşek
Teknoloji: WebSocket + API
Özellik: WebSocket üzerinden mesaj alın ve yazma, öğeleri listeleyin, API üzerinden mesaj gönderme.
Anlaşmazlık
Teknoloji: WebSocket + API
Özellik: WebSocket üzerinden mesajlar alın, öğeleri listeleyin, mesaj gönderme, yazma, API üzerinden görüldü.
Zalo
Teknoloji: API ve HTTP Uzun Yoklama
Özellik: HTTP Uzun Yoklama, Liste öğeleri, mesaj gönderme, yazma, API üzerinden görülen mesajlar alın.
Bizim sıramız
Bu yüzden bazı gözlemler buluyoruz:
- Büyük adamlar tamamen WebSocket/TCP’ye güveniyor
- Çok büyük adamlar, sunucudan mesaj almak için WebSocket’i birleştirir ve sunucuya mesaj göndermek için API.
- Zalo Case – Fikir Yok
İşte benim düşüncelerim:
- WebSocket’i kullanmanın performansı HTTP isteklerini aramaktan çok daha iyi olsa da, WebSocket Server’ı ölçeklendirmek, tek, kalıcı bir bağlantıyı açık tuttuğu için durumsal bir iletişim protokolü olduğu için önemsiz bir görevdir. Bu nedenle yalnızca sunucuların istemcilere mesaj göndermesi için kullanılır. Müşterilerden gelen mesajları kaydetmek gibi diğer mantık görevleri için kullanırsanız, yapmaması gerekeni yapmasını istersiniz.
- HTTP API, istikrarsız API’lerin ölçeklendirilmesi, WebSocket’i ölçeklendirmekten çok daha kolay olduğu için istemcilerden mesaj göndermek için yararlıdır. Ayrıca, kimlik doğrulama, yetkilendirme, ücret sınırlaması vb. İçin mevcut ara katman katmanlarını yeniden kullanabilir.
- Ölçeklenebilir WebSocket Systems oluşturabilenler için, mesaj iletimini optimize etmek için WebSocket kullanma HTTP isteklerini tamamen taşıması tercih edilir. Gerçek zamansız görevler için bile, veri talep etme mekanizmasını senkronize etmeyi gerektirir.
- Instagram’ın Facebook tarafından geliştirilmemesi, satın alınması, Facebook arasında bir boşluk olması anlaşılabilir’S senkronizasyon sistemi (WebSocket tabanlı) ve mevcut Instagram Sistemi.
- Slack, Discord gibi uygulamalar için, HTTP API’lerinin ölçeklenebilirliğinden yararlanırlar ve yalnızca sunuculardan mesaj göndermek için veya yazma gibi yüksek oranlı istekler için WebSocket kullanırlar.
- Zalo’nun izlediği yaklaşım 3 avantajla açıklanabilir i) HTTP’li çok eski tarayıcıları desteklemek WebSocket değil, ii) Web Zalo, Mobile Zalo, III) için ekstra bir versiyon olabilir, WebSocket’den daha kolay ölçeklenebilir.
Bir dahaki sefere, hem mesaj göndermek hem de almak için WebSocket’i tam olarak kullanmayı öneren herhangi birinin duyarsanız, adam şu olmalıdır:
- Ya gerçek zamanlı gereksinimlere yeni ve pratik deneyimden yoksun ve günün sonunda, trafik talebi arttıkça sistemin ölçeklendirilmesi ve halledilememesi zordur.
- Veya Facebook veya Telegram gibi büyük ölçekli sistemlerde çok deneyim.
Sahne arkası
Bu son bölümde, izin ver’S (teorik olarak), merhaba dünyası öğretmenlerinin size asla söyleme şansı olmadığı şeyleri (A **) deneyimleyin.
Priz.io?
Bu kütüphane, bir sunucu, ping/pong kurma, canlı kal, mağaza oturumu, falan falan. Gerçek zamanlı düğümle çalışıyorsanız, tüm sizlerle başlayabilirsiniz.JS. Şaşırtıcı bir şekilde, derinden dahil olacağınız şeyler var.
- QoS mekanizması yok. Yakında istemci tarafındaki ağ beklendiği gibi kararlı olmadığında rahatsızlık yaşayacaksınız. Bağlantı yukarı ve aşağı devam ettikçe mesajlar kaybolur ve priz.io – QoS’u garanti etmeden,’güvenilir.
- Ölçeklendirme? Bir WebSocket düğümü aşırı yüklendiğinde, onu ölçeklendireceksiniz. O’normalde ne yaparsan yap, düzeltin? Şu anda, Redis adaptörü Redis Pubsub aracılığıyla düğümler arasında bir köprü olarak resme gelecek. Mesele şu ki, fiziksel düğümlerin sayısına göre pubsub’ın sayma geri arama mekanizması, mesajları yayan diğer işlemlere eklenirken çeşitli sıkıntılarla sonuçlandı. Ayrıca, veritabanı numarası yerine tüm Redis sunucusu üzerinde Redis pubsub kullanıldığından, farklı ortamlardan gelen mesajlar kolayca bozulur.
- Sürüm kırılması. Şimdiye kadar soket.IO hala geliştirilmektedir ve bazı özellikler yalnızca en son sürümde mevcuttur. Şu anda benimsediğimiz anda, yazı tipi ve adaptör parçaları tamamlanmadı ve geliştirme aşamasında çok fazla hata vardı.
- Geri arama ile ack. Yapmam’geri arama gibi’oturmak. Sadece kullanıyorum ateş Ve unutmak Olaylar, artık yok, çünkü ben’T’nin geri çekilmesinin herhangi bir sonucunu tamamen ele alabildiğimi düşünüyorum.
- Kararsız Ping/Pong: İyi bağlantı ile bile, priz.io Müşteri, Ping/Pong varsayılan zaman aşımını değiştirmeye veya yük dengeleyicisi için artan zaman aşımına bakılmaksızın bir süre sonra sık sık ayrılır. Tüm bu sorunlar açıktı ve eğer varsa, sadece şanslı değilsiniz.
Genel olarak, priz.io İşini temel düzeyde yapar. İstikrar gereksinimlerine sahip gerçek bir proje için benimsemek için hala yapacak çok iş var, i.e. QoS garantisi, ölçeklendirme, izleme bu izleme. En zorlu kısım, bağlantı kesilmesi meydana geldiğinde istemcinin ve sunucunun durumunu senkronize etmektir.
MQTT
MQTT, küçük iletim verileri nedeniyle IoT uygulamalarında popülerdir ve bu nedenle güvenilmez akıllı cihaz ağı için uygundur. Pub/alt mekanizma ile tasarlanmıştır ve QoS, Kalıcı Oturum, Son İmplaj gibi iyi yerleşik özelliklere sahiptir. Bu, Facebook tarafından gerçek zamanlı uygulamaları için daha önce adı geçen protokol-WebSocket üzerinden MQTT.
Denedik çünkü uygulamamızın dünyanın zirvesine ulaşmasını istiyoruz. Ama yine, o kadar kolay değil.
- Zihniyetimizi Değiştirme. MQTT’de oda veya yönlendirme arka uç gibi kavram yok. Oda arka uçta yönetmektir priz.io ve sohbet odasının oluşturulmasını, yeni kullanıcıların eklenmesini ve sohbet odalarına otomatik mesaj emisyonunu kolaylaştırın. MQTT ile kendiniz odayı yönetmeniz, her konuya kendiniz mesaj göndermeniz gerekir, çünkü konunun nasıl dinlendiği müşteriye bağlıdır. Belirli bir konuya abonelik, yalnızca müşterileri aboneliğe iptal etmeye veya yeni konulara abone olmaya zorlamakla sınırlıyken bağlantı kurulduktan sonra gerçekleşir.
- Ölçeklendirme? Hayır, Mosquitto, Vernemq veya EMQ X gibi adamlar çok iyi ölçeklendirebileceklerini söylediğinde, sadece pazarlama veya reklam, ne derseniz deyin. Yüksek trafik talebi olan kümeler için bu mesaj brokerlerinden birkaçını denediğimizde, birçok sorun gelir ve tek tek düzeltmek için çok acı verici. C’Est la VIE, Ürünlerini kullanıyorsunuz, onlara güveniyorsunuz ve eğer yapmazlarsa’t sorunu düzeltin, ne diyebiliriz?
- Çatışma bağlantısı. Bu müşteri tarafında çok zor. Kalıcı oturum özelliğinden yararlanmak için, müşteri kimliğini değişmeden tutmamız gerekir-bu, uygulama iyi kodlanmamışsa zorlu bir görevdir. Çoğu zaman sadece 1 MQTT bağlantı örneği tanımlanmış olsa da, aynı kimliğe sahip birkaç örneğin nasıl var olabileceğine gerçekten dair hiçbir fikrimiz yoktu. Sonuç olarak, müşteriler birbirlerini kovar ve hiçbiri bağlanamaz. Bu durumlarda, ön uçtan başkası sorunu gideremez.
- Güvenlik. Bir MQTT sistemi ve bir priz.io Birincisi, esas olarak konunun organizasyonu ve abone kalıptan dolayı.
Dikkat ederseniz, MQTT’nin API yaklaşımından daha savunmasız olduğunu anlayabilirsiniz. Güvenlik sorunları sadece uygulamamızdan değil, aynı zamanda 3. taraf mesaj brokerlerinden de geliyor. EMQ X’te Auth’un diğer müşterilere sahte veri göndermesine izin veren bir güvenlik sorunu ekibimizde düzeltildi ve hala açık bir konudur. En azından MQTT’nin uygulanması sohbet sistemimizin güvenilirliğini artırır, daha önce olduğu gibi eksik mesajlardan kaçınır.
Çözüm
Gerçek zamanlı iletişim zorlu bir sorundur ve çok fazla bilgi ve deneyim gerektirir. Aynı gereksinim, ben.e. “Facebook gibi bir haberci” duruma bağlı olarak 1 saat, 3 saat ve ayrıca birkaç yıl içinde yapılabilir.
Kabullenmek
Quang Minh’e büyük teşekkürlerimi göndermek istiyorum (.K.bir Minh Monmen) orijinal gönderisini çevirme izni için.
MQTT Protokolü – Facebook Messenger’ı IoT cihazlarına güçlendirmek
PAYLAŞMAK
- Facebook Instagram -> Google+ GooglePlus -> Kopya ->
2011 yılında Lucy Zhang, Ben Davenport ve Jon Perlow Facebook’a katıldı ve Facebook Messenger’ı inşa etmeye başladı. Bir mesaj gönderirken çabalarında büyük bir engel uzun gecikti. Mesaj göndermek için kullandıkları yöntem güvenilirdi ancak yavaştı. Ayrıca bir dereceye kadar optimize edebildiler. Lansmandan birkaç hafta önce, Mesaj Sırası Telemetri Taşımacılığı (MQTT) protokolünü araştırdılar. MQTT’nin yardımıyla Lucy Zhang ve ekibi, pil ömrünü azaltmadan Facebook sunucularıyla kalıcı bir bağlantı kurabildiler ve sürdürebildiler.
Peki, MQTT protokolü nedir?
1999 yılında Dr tarafından oluşturuldu. IBM’den Andy Stanford-Clark ve Arcom’dan Arlen Nipper, MQTT, TCP/IP protokolünün üstünde hafif bir mesajlaşma protokolüdür. MQTT, güvenilir olmayan bağlantı nedeniyle kısıtlanmış cihazlar (düşük bellek ve ağ bant genişliğine sahip cihazlar) ve değişen gecikme seviyelerine sahip kablosuz ağlar için tasarlanmıştır.
MQTT Protokolü bir müşteri sunucusu, yayıncı/abone, açık ve hafif mesajlaşma taşıma protokolü. MQTT’nin kalbinde MQTT komisyoncusu olarak bilinen merkezi iletişim noktası var. Mesajları haklı müşterilere dağıtmaktan sorumludur.
MQTT brokerine bir mesaj yayınlayan her müşteri, konu olarak bilinen yönlendirme bilgilerini içerir. Müşteriler birden fazla konuya abone olabilir ve konuyla eşleşen yayınlanan tüm mesajları arayabilir. Müşteriler Don’bilgi almak için birbirlerini tanımak zorundadır; Sadece ilgili konulara abone olmaları gerekiyor.
Örneğin, üç müşteriden oluşan basit bir ağ hayal edin, i.E A, B ve C, burada her biri bir TCP bağlantısı aracılığıyla bir komisyoncuya bağlı. Client-B ve Client-C Konu: Sıcaklığa abone olun.
Müşteri-A 34 yayınladı.Konu sıcaklığı için 5. Broker bunu tanımlar ve bu mesajı bu durumda istemci-B ve istemci-c olan tüm abonelere iletir.
MQTT’nin yayıncı-alt yazıcı mimarisi, veri üreticileri ve tüketiciler arasında bağımlılıklar oluşturmadan onu oldukça ölçeklenebilir bir çözüm haline getiriyor.
MQTT protokolünün mesaj formatı
MQTT’nin tüm mesajlarının küçük bir kod ayak izi vardır, bu nedenle hafif bir mesajlaşma protokolü olarak popülerdir. Her MQTT mesajı aşağıdakilerden oluşur:
- Sabit başlık (2 bayt)
- İsteğe bağlı değişken başlık
- Mesaj yükü (
- Hizmet Kalitesi (QoS) seviyesi
MQTT bire bir, bire çok ve çok sayıda iletişimi destekler.
Aktarılan veri miktarını düşürerek MQTT, kısıtlanmış IoT cihazları için mükemmel bir protokol yapar.
Mesaj yükleri ikili olarak kodlanır. Alıcının farklı bir üreticinin olduğu açık bir ağda, mesaj yükünün nasıl kodlandığına dair hiçbir bilgi olmadığından, bunu kod çözmekle ilgili sorunlarla karşılaşacaktır.
MQTT protokolü için hizmet kalitesi (QoS) seviyesi
Hizmet seviyelerinin kalitesi, içeriğin nasıl yönetildiğini belirler. MQTT üç farklı QoS seviyesi kullanır. Her mesaj için doğru QoS seviyesini seçmek önemlidir, çünkü mesajı teslim etmek için istemci ve sunucunun nasıl iletişim kurduğunu belirler. MQTT’nin QoS seviyeleri aşağıdaki gibidir:
- QoS 0 : İşletme ortamının en iyi çabalarına göre verilen mesajlar, ancak mesaj kaybı oluşabilir
- Qos 1 : Mesajlar Teslimat Güvenli ancak Kopyalar Oluşturulabilir
- Qos 2 : Tam olarak bir kez teslim edilecek mesaj
MQTT bize uygun QoS seviyesini ayarlama seçeneği sunar, ancak hatırlayın, QoS’yi daha yüksek, performansı düşürün .
MQTT protokolünün güvenliği
MQTT, kullanıcı adını ve şifreyi MQTT paketi olarak geçmenizi sağlar. Bir mesajın ağ genelinde şifrelemesi, güvenli soket katmanı (SSL) ile MQTT’den bağımsız olarak işlenebilir. Yerleşik minimum kimlik doğrulama özelliğine sahiptir. Kullanıcı adı ve şifre net metin olarak gönderilir. Güvenli hale getirmek için, Güvenli Yuva Katmanı (SSL)/ Taşıma Katmanı Güvenliği (TLS) kullanılmalıdır, ancak SSL/ TLS hafif bir protokol değildir.
Birçok endüstri uzmanı, MQTT’nin envanter izleme ve tıbbi IoT gibi alanlara katkıda bulunarak IoT’de önemli bir rol oynayacağına inanıyor..
Messenger MQTT kullanıyor mu
Salı günü, insanların 1’e 1’e veya arkadaş gruplarına mesaj göndermesini sağlayan yeni bir bağımsız mesajlaşma uygulaması olan Facebook Messenger’ı tanıttık. Beş ay önce Facebook’a, Beluga adlı bir grup mesajlaşma uygulaması oluşturmak için benimle çalışan diğer iki kurucu ortak Ben Davenport ve Jon Perlow ile katıldım. Yeni uygulamamız Facebook Messenger her iki dünyanın en iyisini temsil ediyor – Beluga’nın kolaylığını ve sadeliğini Facebook mesajlarının ölçeği ve entegrasyonu ile birleştiriyor.
Beni Beluga’yı yaratmamı sağlayan birkaç yaşam deneyimim vardı. Örneğin, bir grup biz New York’taki Tribeca Film Festivali’nde bir film için buluşuyorduk, ancak filmin önüne geçen saat tam bir iletişim başarısızlığıydı. Bana başka bir arkadaşımın geç kaldığını söylemek için bir arkadaşım vardı. Başka bir arkadaş için bilet tasarrufu sağlıyorduk, ama gelmemeye karar verdi ve kimse bilmiyordu. Değildi’T saatlerine kadar eve döndüğümde, geç kalan arkadaştan bir IM ve kefalet eden arkadaştan bir e -posta gördüm. Facebook Messenger’ı düşünüyoruz’Sohbeti, kısa mesajları ve e -postayı entegre etme yeteneği bu sorunu çözmeye yardımcı olur.
Beluga’yı grup koordinasyonu için bir araç olarak inşa etmeye başladık, ancak hafif, özel, anında iletişimin sağlanmasının bir grup insanın birbirleriyle daha geniş bir şekilde bağlanma şeklini değiştirebileceğini keşfettik. Bir geziden haftalar sonra tatil fotoğraflarını e -postayla göndermek yerine, insanlar şu anda daha fazla paylaşmaya başlar. Mesajların anlık doğası, grup konuşmalarının kendiliğinden başlamasını sağlar ve bilgisayarlarından bağlanan kişiler ile mobil cihazlardaki kişiler arasındaki boşluğu doldurur. Haberci’Facebook sohbeti ile entegrasyon şimdi bu senaryoyu gerçeğe dönüştürüyor.
Yeni sulara dalmak
Facebook’a katıldığımızda ve Messenger’ı oluşturmaya başladığımızda, ilk teknik zorluğumuz Facebook mesajları için tüm altyapı yığınını öğrenmekti. Zaten yüz milyonlarca kullanıcıya piyasaya sürülen ölçeklenebilir bir platformda inşa etmek harikaydı, ancak sistemde olmayan bazı varsayımlar ve tasarım kararları içeriyordu’inşa etmek istediğimiz ürünle her zaman oldukça örgü. Neyse ki, yeni meslektaşlarımız da Messenger vizyonu konusunda heyecan duydular ve sistemin ihtiyacımız olanı yapabileceğinden emin olma çabasına katıldı.
Yaşadığımız sorunlardan biri, mesaj gönderirken uzun gecikmelerdi. Göndermek için kullandığımız yöntem güvenilir ama yavaştı ve onu ne kadar iyileştirebileceğimize dair sınırlamalar vardı. Lansmana kadar sadece birkaç hafta ile, sunucularımıza kalıcı bir bağlantıyı sürdüren yeni bir mekanizma inşa ettik. Bunu pil ömrünü öldürmeden yapmak için, Beluga’da denediğimiz MQTT adlı bir protokol kullandık. MQTT, uzay problarına ve uzay problarından telemetri verileri gönderme gibi uygulamalar için özel olarak tasarlanmıştır, bu nedenle bant genişliği ve pilleri az miktarda kullanmak için tasarlanmıştır. Sohbet boru hattımız aracılığıyla bir MQTT bağlantısı ve yönlendirme mesajlarını koruyarak, birkaç saniye yerine yüzlerce milisaniyede telefondan telefona teslimatı yapabildik.
Performans ve sistem entegrasyon sorunları dışında, en büyük zorluklar, farklı iletişim kanallarını farklı kullanıcı beklentileri ile sorunsuz bir şekilde nasıl entegre edeceğine dair ürün kararlarıydı. İnsanlar sohbette telefonda olduğundan farklı iletişim kurarlar – örneğin, bir sohbet görüşmesi başlayabilirsiniz “Hey sen oradaki?” Ama muhtemelen yapmazsın’t bunu bir metin olarak gönderin, çünkü elbette kişi’Orada! Sistemi akıllı hale getirmeyi deneyebilir ve “Sağ” Birçok farklı durumda bir şey, ancak kuralları çok karmaşık hale getirirseniz, bu da hissedebilir “büyülü” ve güvenilir bir iletişim kanalı gibi değil.
Messenger’ın doğru hissettiğinden emin olmak için, meslektaşlarımızla sürekli olarak farklı tasarımları test ettik. Facebook’ta yapımları giderek daha fazla insana sunarken, daha fazla geri bildirim aldık ve varsayımlarımızın gerçeklikten farklı olduğunu öğrendik. Biz’Sonunda Facebook Messenger’ı halka başlatmak için çok heyecanlı – ve milyonlarca insandan geri bildirim almayı dört gözle bekliyoruz.
Umarım Facebook Messenger’ı kullanmaktan zevk alırsınız!
Bir yazılım mühendisi Lucy Zhang, film gecesini bir daha asla koordine etmekte zorlanmayı dört gözle bekliyor.
Zayıf bir internet ile hızlı çalışan havalı bir haberci nasıl yapılır
Neden MQTT ve Düğüm kullanmalısınız?.Gerçek zamanlı mesajlaşma için JS
9 dk okuma
23 Mayıs 2017
Şu anda, S-Pro’da geliştirdiğimiz giderek daha fazla uygulama gerçek zamanlı mesajlaşma ve veri aktarımı gerektirir. Çoğu durumda, soketi kullanırız.Düğüm için IO Kütüphanesi.JS. Ancak, avantajları olan alternatifler var. MQTT (Mesaj kuyruğu telemetri taşımacılığı) bunlardan biri. Ve şu’Biz ne biz’Burada konuşacak!
MQTT nedir
“Kısıtlı cihazlar ve düşük bant genişliği, yüksek gecikme veya güvenilmez ağlar için tasarlanmış bir yayın/abone, son derece basit ve hafif mesajlaşma protokolüdür. Tasarım ilkeleri, ağ bant genişliğini ve cihaz kaynak gereksinimlerini en aza indirirken, güvenilirliği ve bir dereceye kadar teslimat güvencesini sağlamaya çalışıyor. Bu ilkeler ayrıca ortaya çıkanların protokolünü ideal hale getirme “makine-makine” (M2m) veya “Nesnelerin interneti” Bağlı cihazların dünyası ve bant genişliği ve pil gücünün premium olduğu mobil uygulamalar için.” – http: // mqtt.Org/SSS
Bu nedenle, MQTT, TCP/IP üzerinden çalışan basitleştirilmiş bir ağ protokolüdür. Publish-Subscribe deseni aracılığıyla cihazlar arasında mesaj değiştirmeye yardımcı olur. Protokolün ilk versiyonu DR tarafından geliştirildi. 1999’da Andy Stanford-Clark (IBM) ve Arlen Nipper (Arcom) ve telifsiz bir lisans altında yayınlandı. MQTT 3.1.2014 yılında Oasis Konsorsiyumu tarafından 1 spesifikasyon standartlaştırıldı.
Neden beğeneceksin?
- Kullanımı kolay. Protokol, herhangi bir karmaşık sisteme kolayca entegre edilebilen ek işlevselliği olmayan bir program birimidir.
- Yayınla abonelik deseni çoğu çözüm için uygundur. Cihazların daha önce bilinmeyen veya önceden tanımlanmamış mesajları iletişim kurmasına ve yayınlamasına/almasına izin verir.
- Yönetilmesi kolay.
- İletişim kanalındaki yük azaltıldı.
- Yavaş veya dengesiz bir bağlantı ile çalışır.
- İletilen içeriğin biçiminde herhangi bir kısıtlama yok.
Faydalar?
- ikili
- Düşük yük (2+ bayt)
- Çoklu QoS seviyesi
- Çevrimdışı mesajlaşma
- Konu joker karakterleri +, #
- Tutulan mesajlar, son irade ve vasiyet, kalp atışı ve diğer şeyler…
İzin vermek’Bak ona bak!
İkili ve düşük yük
İletilen ikili verilerin yapısında çok düşük bir yük var. Bu, diğer birçok protokolle karşılaştırıldığında (örneğin, HTTP ile), sadece protokolün işleyişi için gerekli olan bilginin aktarılmasıyla neredeyse yüklemediği anlamına gelir. 3G ağlarında yapılan ölçümlere göre, MQTT’S kapasitesi diğerlerinden 93 kat daha yüksektir (temsili durum transferi) protokolü, HTTP’nin üzerinden geçen.
Çoklu QoS seviyesi
MQTT Hizmet Kalitesi (QoS) seviyesini belirleyebilir. Genel olarak üç seviye vardır:
- QoS 0. Alıcı mesajları almayı onaylamıyor. Gönderen, gelecekte yeniden iletmeye çalışmadan mesajı sadece bir kez iletir. Bu “Gönder ve Unut” yöntem.
- Qos 1. Alıcının en az bir kez bir mesaj alacağı garanti edilir. Bu durumda, abone aynı mesajı birkaç kez alabilir. Ve gönderen, mesajın başarılı bir şekilde teslim edilmesinin bir onayını alana kadar tekrar tekrar gönderme girişimleri yapacak.
- Qos 2. En yavaş mesaj dağıtım prosedürü bu hizmet kalitesine karşılık gelir, ancak en güvenilir olanıdır. Ana özelliği, “Bir kerelik mesaj teslimatı” strateji. Dört aşamalı bir mesaj dağıtım onay prosedürü sağlar.
Aşağıdakilere dayanan belirli bir hizmet kalitesi seviyesi seçersiniz:
- iletilen verilerin özellikleri
- teslim edilecek önemi.
Çevrimdışı mesajlaşma/kalıcı oturum
Bu seçenek etkinleştirilebilir veya devre dışı bırakılabilir. Ne zaman “0” ayarlanmış, broker oturumu ve tüm müşterileri kaydediyor’S Abonelikleri. Bir sonraki bağlantı kurulduğunda, bağlantıyı kesme sırasında komisyoncu tarafından alınan QoS1 ve QoS2’den gelen tüm mesajları gösterir. Buna göre, ne zaman “1” ayarlanmış ve bağlantı yenilenir, müşterinin konulara yeniden abone olması gerekecektir.
Konu joker karakterleri
Konu, komisyoncu tarafından bağlı her bir istemci için mesajları filtrelemek için kullanılan bir UTF-8 dizesidir. Bir konu bir veya daha fazla konu seviyesinden oluşur. Her konu seviyesi ileri eğik çizgi ile ayrılır (konu seviyesi ayırıcı).
Bir müşteri bir konuya abone olduğunda, mesajın yayınlandığı konuyu tam olarak kullanabilir veya joker karakterler kullanarak bir kerede daha fazla konuya abone olabilir.
Tek seviyeli bir joker karakter, bir konu seviyesinin yerini alıyor. Artı sembolü, konuyla ilgili tek seviyeli bir joker karakter.
Tek seviyeli joker sadece bir konu seviyesini kapsamakla birlikte, çok seviyeli joker, keyfi sayıda konu seviyesini kapsar. Eşleşen konuları belirlemek için, çok seviyeli joker karakter her zaman konunun son karakter olması gerekir ve önde bir ileri eğik çizgi gelir.
Diğer özellikler
Ayrıca, MQTT’nin korunan mesajlar, son irade ve vasiyetname ve kalp atışları gibi başka harika özellikleri var. Biz kazandık’t Bunları bu makalede ele alıyor ancak bilgi internette yaygın olarak mevcut. Yani, eğer ilgileniyorsanız, devam et.
Düğüm için broker ve istemciler.JS
İzin vermek’s bazı kodlar! Bu bölümde biz’Düğüm ile çalışan bir çözüm elde edebileceğinizi size gösterecek.JS. Ayrıca sen’bazı modülleri tanımalı. İzin vermek’Bu şemayı pratikte uygulamaya çalışın.
MQTT, herhangi bir yayın/abone protokolünün kalbi olan bir broker gerektirir. Broker öncelikle tüm mesajları almaktan, filtrelemekten, kiminle ilgilendiğine karar vermekten ve daha sonra mesajı abone olan tüm müşterilere göndermekten sorumludur.
Bir komisyoncu olarak Mosca’yı kullanacağız.
Mosca NPM modülü olarak bir MQTT komisyoncusu. Hem komut satırından hem de NPM modülünden kullanabilirsiniz. Bu durumda, bunu bir modül olarak kullanacağız.
Çevrimdışı mesajları desteklemek için kullanacağız Astoratori ile Mongodb. Genel olarak, Ascoltatori aşağıdaki brokerleri/protokolleri destekleyen basit bir yayın/abone kütüphanedir:
- Redis, tarafından oluşturulan bir anahtar/değer mağazası @antirez.
- Mongodb, Ölçeklenebilir, yüksek performanslı, belge odaklı bir veritabanı.
- Sivrisinek Ve tüm uygulamaları MQTT protokol.
- Rabbitmq Ve tüm uygulamaları AMQP protokol.
- Zeromq p2p tarzında ascoltatori kullanmak.
- Qlobberfsq, Paylaşılan bir dosya sistemi kuyruğu.
- Apache Kafka, Yüksek verimli dağıtılmış bir mesajlaşma sistemi.
- Yalnızca bellek yönlendirme, kullanma Qlobber.
Aşağıdaki arka uç kodunu görebilirsiniz. Bu, bir MQTT komisyoncusu, WebSockets aracılığıyla MQTT paketlerini desteklemek için bir HTTPS sunucusu içeren gerçek bir çalışan sunucunun kodudur, MongoDB veritabanına mesajları kaydetmek için bir ascoltatori adaptörü.
// mqtt komisyoncusu gerektirirvar mosca = reque ('mosca');// MongoDB ile bağlantıyı tanımlavar Mongo_con = 'Mongodb: // localhost: 27017/mqtt';// Kalıcı oturum özelliğini etkinleştirmek için bu ayarlar gereklidir.// Tüm mesajlar MongoDB'de saklanacakvar ascoltatore = Tür: 'Mongo',URL: Mongo_con,pubsubcollection: 'Ascoltatori',Mongo: <>>;// mosca mqtt komisyoncusu için son ayarlarvar ayarları = Liman: 1883,Arka uç: Ascoltatore,Kalıcılık: Fabrika: Mosca.kalıcılık.Montaj,URL: Mongo_con>>;// http ve mqtt sunucularını tanımlavar http = requir ('http'),httpserv = http.CreateServer (),mqttserv = yeni mosca.Sunucu (ayarlar);// HTTP'yi MQTT sunucusuna ekleyinmqttserv.atttttpserver (httpserv);httpserv.Dinle (3000);// MQTT sunucusu istekleri kabul etmeye hazır olduğunda tetiklermqttserv.on ('hazır', hazır);// yeni mesaj yayınlandığında tetiklermqttserv.on ('yayınlanmış', işlev (paket, istemci) konsol.günlük (paket.Konu + ':' + Paket.yük);>);Fonksiyon Hazır () konsol.log ('Mosca Server hazır ve çalışıyor');>
MQTT istemcisini uygulamak için NPM MQTT’yi kullanacağız.JS Modülü.
// mqtt kütüphanesi gerektirirvar mqtt = requir ('mqtt');// MQTT sunucumuza bağlanan istemciyi tanımlayın// temiz: yanlış araçlar yeniden bağlamada yeni oturum başlatmayın// Bu, MQTT protokolünün kalıcı oturumlar özelliğini kullanmamızı sağlar// Buna ek olarak, ClientId her istemci dizesi için benzersiz olmalıdırVar Client = MQTT.Connect ('mqtt: // localhost', Temiz: Yanlış,ClientId: 'Console_client'>);// Connect'te tetikler// Temiz, QoS: 1 ile ilgili konuyla ilgili abone olur, bu da QoS seviyesi anlamına gelir. Müşteri tüm mesajları yeniden bağlayacak.// Sonra konuya yeni mesaj yayınlar. Bu mesaj DB'de saklanacak ve abonelere gönderilecek. QoS 1 ile çevrimdışı aboneler yeniden bağlanacak.//müşteri.ON ('Connect', Function () müşteri.abone olun ('/merhaba/s-pro',);müşteri.yayınlama ('/merhaba/s-pro', 'merhaba, s-prof!',);>);// Yeni mesaj geldiğinde bir şeyler yapın.müşteri.on ('mesaj', işlev (konu, mesaj) konsol.log (konu + ':' + mesaj.toString ());>);
İzin vermek’Müşterinin bir örneğini daha düşünün’S uygulama. Bu durumda, WebSockets üzerinden MQTT olacak. Bu örnek, tarayıcılarla veya hibrit mobil uygulamalarla çalışan müşteriler için özellikle yararlı olacaktır.
Tüm kodlar bir öncekine benzer. Tek fark müşteri’S tanımı.
İstemci = MQTT.Connect ('ws: // mqtt.TK: 3000/MQTT ', Temiz: Yanlış,ClientID: Kullanıcı adı>);
Gördüğünüz gibi, burada sunucumuza soketler aracılığıyla bağlanıyoruz. Çalışma kodunu bizim Gitithub. Kodun tüm örnekleri mükemmel çalışır ve sunum sırasında yazar tarafından canlı bir örnek olarak kullanılmıştır.
Ölçeklenebilirlik
Bu bölüm, genişliği nedeniyle bu makalenin kapsamı dışındadır. Ama o’Bu çözümün ne ölçüde genişletilebileceğinden bahsetmek önemlidir. Düğüm kullanarak ölçeklenebilir bir MQTT altyapısı oluşturabilirsiniz.JS, Redis, Haproxy oldukça kolay. Başka bir seçenek Apache Kafka’yı kullanmaktır. Makalenin sonunda sen’Bu alandaki ilginç çözümlere birkaç referans görecek.
Çözüm
Bu nedenle, bu makalede, MQTT protokolünü JavaScript ve düğümü kullanarak mesajlaşma için kullanmanın ne kadar kolay olduğunu pratikte inceledik ve test ettik.JS. Mosca Broker sunucu tarafında kullanılabilir. Ayrıca, WebSockets’i destekler. Yani, gerekirse IoT cihazlarından mesaj alabilir ve WebSockets aracılığıyla TCP üzerinden mobil veya masaüstü uygulamalarına aktarabilirsiniz. Dahası, MQTT çok ölçeklenebilir. Ancak bu olmadan bile, çok hızlıdır ve 10k+ eşzamanlı bağlantılardan saniyede 10k+ mesajı işleyebilir.
Bunu beğendiyseniz, Medium’daki diğer insanlarla paylaşmamız için bizi alkışlayarak desteğinizi gösterin.