XML'in ayrıntılı olduğunu söylemek adil olmakla birlikte, bu anlamın anlambilimi kapsadığı için içerikle ilgili olarak tümüyle "yük" olmadığının bilincinde olmalıdır; statik yapının aksine bir dinamiği vurgulayan herhangi bir protokolün belirtisidir. Örneğin, HTML gerçekten içeriği dinamik bir yapıya, içeriğin bir yönü olarak kabul edilebilecek bir yapıya taşıyan rahat bir XML biçimidir. Bir tablonun içeriğini tablonun kendisinden ayırabilirsiniz, ancak içeriğin belirli ilişkilere sahip tablo şeklinde veriler olması, içeriğin ayrılmaz bir parçasıdır; eğer her bir hücreyi alıp hepsini uzun bir dize olarak aktarırsam, o yapı ve bu ilişkiler ortadan kalkar ve bu yüzden bilgi kaybettim ve bu içerik değil mi?
Bazı tabluar verileri oluşturabilecek 8 baytlık bir mesajı ele alalım. Çok statik bir protokol kullanırsanız, en azından ek bir ek yük olmadan sadece böyle bir protokol tanımlayarak iletebilir:
- Her mesaj tam olarak 8 bayttır, bu nedenle uzunluğu belirtmemize veya herhangi bir sonlandırma dizisi eklememize gerek yoktur.
- Sekiz bayt her zaman, her bir hücrenin 16 bitlik bir değer içerdiği 2x2 ızgaraya başvurmak için alınır.
Tüm iletilerim tam olarak böyle ise, XML, HTML veya XMPP kullanmak aptalca sayılabilir - Her zaman aynı ve önceden belirlenmiş yapısal bileşenler üzerinde bant genişliği harcıyorum ve her iki uçta da karşılık gelen hesaplama zamanını boşa harcıyorum. Her hücrede birkaç karakter içeren 2 x 2 tablo içeren minimal, uygun bir HTML sayfası, biçimlendirme ve protokol yükünü karşılamak için muhtemelen en az 100 bayt olacaktır.
Ancak, tüm iletilerim tam olarak bu değilse, ne tür bir ileti olduğunu belirtmek, "yararlı yük" ün gerçek bir parçası olmayabilir, ancak içerik açısından gerekli bir bileşendir. Bunu sadece iki baytla yapabilir ve çok daha fazla dinamizm getirebilirim:
- İletiler artık değişken uzunluktadır, 0-255 bayt ve ilk bayt uzunluğu belirtir.
- Önceden tanımlanmış farklı mesaj türleri için 256 kod vardır, bunlardan biri "2x2 tablo" dır, bu ikinci bayttır.
Şimdi 8 bayt tablo içeriğim 2 bayt ek yük gerektiriyor, ancak bu özel protokolle ne tür mesajların gönderilebileceği konusunda çok daha geniş olasılıklar var.
Hala bir HTML sayfasının veya XML ad alanı belirtiminin (veya XMPP'nin esasen ne olduğu ) bir kümesinin olanaklarına yakın değil .
Buna dayanarak, çoğunlukla yaptığınız şey basit 8 baytlık mesajlar gönderiyorsa, XMPP muhtemelen aşırıya kaçıyor. Ancak, o kadar da değil. İlgili RFC'ye bakarak, potansiyel bir abartı (ama nb, hepsi), bana "IOT BAĞLANTILI BİR CİHAZIN sunucuya bir bayt veri göndermek için tek bir istek / yanıt değişimi" 0.5 kB'den fazla olduğu iddiası gibi görünüyor. Yaptığım bir bakış, hiç XMPP kullanmadım veya kullanmadım). Böyle bir örnek oluşturabileceğinizden şüphem yok, ama bu muhtemelen minimal bir örnek değil .
Protokol TCP yönelimli olduğundan, "'jabber: client' ad alanı" tarafından nitelenen bir XML akışı oluşturmak yalnızca iletinin bir parçası olarak kabul edilirse iletinin bir parçası olarak düşünülür - cihaz 8 bayt göndermek için bir sunucu ile iletişim kurar, gönderir veri, bağlantıyı keser. İlişki daha sık devam ederse, bu genellikle bir IoT bağlamında olur, o zaman cihazın zaten hedefe kurulmuş bir bağlantısı olduğunu varsayabiliriz. Bu durumda, iletinin nihai hedefi sunucu ise (sunucu başka bir istemcinin aksine iletiyi iletecek), bu durumda protokol yükü potansiyel olarak minimumdur.
<message><body>8 bytes.</body></message>
33 baytlık "tepegöz". Burada XML'nin metin olduğunu belirtmek gerekir ve bu nedenle mesajlarınız genellikle ikili ise, o zaman çok daha az uygun hale gelecektir, çünkü verilerin daha fazla ek yük ve hesaplama eklenmesi için kodlanması (örn. Base64 ) gerekir. Gereksinimler.
Sonuçta:
XMPP'nin kısa, sık mesajlar gönderen IoT cihazları için büyük bir yükü var mı?
Kalıcı bir bağlantı varsa ve mesajlar büyük ölçüde yapılandırılmamışsa, sanmıyorum. Bununla birlikte, sunduğu şeylere (yapıya ilişkin dinamizm) ihtiyacınız yoksa, muhtemelen daha uygun metodolojiler vardır.
Bunu takip ederek, tek bir merkezi sunucunun çeşitli cihazlar arasında mesajları işlediği ve / veya güvendiği bir içeriğimiz varsa, bu cihazlardan herhangi birinin yaptığı her zaman basit ve anlaşılır olsa da, çeşitli mesajlar hala faydalı olacaktır. İstemci aygıtta sınırlı kaynaklar varsa, protokolün çoğunu sabit olarak kodlayabiliriz ve her iletiyi bu uçtan sarmak çok basit bir iş haline gelir; HTTP sunucularını dağıtan birçok IoT cihazının ("basit istemciler, karmaşık sunucu" nun tersi) bunu yaptığına inanıyorum. Bu sunucular herhangi bir HTTP isteğini işleyemez (önceden biçimlendirilmiş reddetme hariç) ve çok iyi tanımlanmış, bir şeylerin yapacakları ve gönderecekleri yanıtlara sahip olurlar, ancak HTTP sunucuları olarak sorunsuz çalıştıklarından,