Saya telah membaca tentang XMPP sebagai protokol komunikasi potensial untuk perangkat IoT tetapi, setelah membaca satu sumber, saya tidak yakin apakah itu benar-benar protokol yang sesuai jika Anda khawatir tentang overhead untuk setiap pesan.
Sumber ini menyatakan:
Namun, XMPP memiliki sejumlah masalah yang membuatnya agak tidak diinginkan untuk PROTOKOL IOT YANG DIBUTUHKAN. Sebagai protokol berbasis XML, XMPP sangat verbose, bahkan lebih dari HTTP, dan memiliki overhead data yang berat. Pertukaran permintaan / respons tunggal untuk mengirim satu byte data dari IOT CONNECTED DEVICE ke server lebih dari 0,5 kB.
Ada spesifikasi rancangan yang akan mengkompres XMPP menggunakan pengkodean XML yang disebut efisien XML Interchange (EXI). Tetapi bahkan dengan EXI, satu byte data yang sama mendapat ratusan byte overhead protokol dari XMPP saja. EXI juga merupakan format yang jauh lebih sulit untuk diproses daripada opsi lain yang sekarang tersedia. Karena masalah yang melekat ini, umumnya disarankan untuk menghindari penggunaan XMPP dalam aplikasi IoT yang disematkan.
Namun, XMPP mempromosikan dirinya sebagai cocok untuk aplikasi IoT (meskipun tidak secara khusus mengatakan bahwa itu overhead rendah), sehingga tampaknya aneh bahwa protokol yang besar dan tampaknya bertele-tele akan direkomendasikan / dipromosikan untuk perangkat IoT.
Apakah overhead XMPP benar-benar sebesar yang disarankan sumber untuk sejumlah kecil data? Misalnya, berapa banyak overhead yang akan ada saat mengirim pesan 8-byte?
Juga, apakah overhead begitu hebat jika kompresi EXI digunakan (seperti yang disebutkan dalam sumber)? Apakah ini juga datang dengan beberapa jebakan?
sumber
Jawaban:
Meskipun adil untuk mengatakan bahwa XML itu verbose, itu harus diperlunak dengan kesadaran bahwa verbositas ini tidak semua "overhead" dalam kaitannya dengan konten karena itu merangkum semantik; itu overhead yang merupakan gejala dari setiap protokol yang menekankan dinamika sebagai lawan dari struktur statis. Sebagai contoh, HTML benar-benar bentuk santai dari XML yang menyampaikan konten dengan struktur dinamis, struktur yang dapat dianggap sebagai aspek konten. Anda bisa membedakan konten tabel dari tabel itu sendiri, tetapi kenyataan bahwa kontennya adalah data tabular dengan hubungan spesifik merupakan bagian integral dari konten; jika saya hanya mengambil setiap sel dan mentransmisikan semuanya sebagai satu string panjang, struktur itu dan hubungan itu hilang, jadi saya kehilangan informasi dan bukankah konten itu?
Mari kita pertimbangkan pesan 8 byte yang mungkin merupakan beberapa data tabluar. Jika saya menggunakan protokol yang sangat statis, saya bisa, secara minimal, mentransmisikannya tanpa overhead tambahan hanya dengan mendefinisikan protokol seperti ini:
Jika semua pesan saya persis seperti itu, menggunakan XML, HTML atau XMPP mungkin dianggap konyol - saya menghabiskan bandwidth pada komponen struktural yang selalu sama dan telah ditentukan sebelumnya, dan membuang waktu perhitungan yang sesuai di kedua ujungnya membuat dan menguraikannya. Minimal, halaman HTML yang tepat yang hanya berisi tabel 2 x 2 dengan beberapa karakter di setiap sel mungkin akan setidaknya 100 byte untuk mengakomodasi pemformatan dan overhead protokol.
Namun, jika tidak semua pesan saya persis seperti itu, maka menentukan jenis pesan apa itu mungkin bukan bagian literal dari "payload" tetapi itu merupakan komponen yang diperlukan, konten-bijaksana. Saya bisa melakukannya hanya dengan dua byte tambahan dan memperkenalkan lebih banyak dinamika:
Sekarang 8 byte konten tabel saya membutuhkan 2 byte overhead, tetapi ada berbagai kemungkinan yang lebih luas dalam hal jenis pesan apa yang dapat dikirim dengan protokol khusus ini.
Itu masih dekat dengan kemungkinan halaman HTML atau spesifikasi XML namespace (atau set darinya, itulah XMPP pada dasarnya ).
Jadi, berdasarkan itu, jika sebagian besar apa yang Anda lakukan adalah mengirim pesan 8 byte sederhana, XMPP mungkin berlebihan. Namun, belum tentu sebanyak itu. Klaim bahwa "pertukaran permintaan / respons tunggal untuk mengirim satu byte data dari IOT CONNECTED DEVICE ke server lebih dari 0,5 kB" tampaknya bagi saya, memandang sekilas pada RFC yang relevan , sebagai potensi yang dilebih-lebihkan (tetapi nb, semua Saya lakukan sekilas itu, saya tidak pernah menerapkan atau menggunakan XMPP). Saya tidak ragu Anda bisa membuat contoh seperti itu, tapi itu mungkin bukan contoh minimal .
Karena protokol berorientasi pada TCP, membuat "aliran XML yang memenuhi syarat oleh 'jabber: client' namespace" hanya perlu dianggap sebagai bagian dari pesan jika kita melakukan satu hal - perangkat menghubungi server untuk mengirim 8 byte, mengirim data, terputus. Jika hubungan lebih persisten, yang sering dalam konteks IoT, maka kita dapat menganggap perangkat sudah memiliki koneksi yang mapan ke tujuan. Dalam hal ini, jika tujuan akhir dari pesan adalah server (sebagai lawan dari klien lain server akan meneruskan pesan ke), maka overhead protokol berpotensi minimal.
A "overhead" sangat sedikit 33 byte. Perlu ditunjukkan di sini bahwa XML adalah teks, dan jadi jika pesan Anda sering bersifat biner, maka itu akan menjadi jauh lebih tidak tepat, karena data tersebut perlu dikodekan (misalnya, ke base64 ), yang menambah overhead dan komputasi lebih lanjut. Persyaratan.
Jadi, pada akhirnya:
Jika ada koneksi yang terus-menerus dan pesan-pesannya sebagian besar tidak terstruktur, saya kira tidak. Namun, jika Anda tidak membutuhkan apa yang ditawarkannya (dinamisme terkait dengan struktur), maka mungkin ada metodologi yang lebih tepat.
Mengejar itu, jika kita memiliki konteks di mana server pusat tunggal sedang memproses dan / atau mengandalkan pesan antara berbagai perangkat, meskipun apa yang dilakukan oleh salah satu perangkat itu selalu sederhana dan mudah, sebuah protokol yang dapat merangkum sebuah variasi pesan akan tetap bermanfaat. Jika perangkat klien memiliki sumber daya yang terbatas, kami dapat melakukan hardcode pada sebagian besar protokol, dan membungkus setiap pesan dari sana menjadi tugas yang sangat sederhana; Saya percaya banyak perangkat IoT yang menggunakan server HTTP melakukan itu (yang merupakan kebalikan dari "klien sederhana, server kompleks"). Server-server itu tidak dapat menangani segala jenis permintaan HTTP (kecuali melalui penolakan yang telah diformat sebelumnya) dan memiliki serangkaian hal-hal yang akan dilakukan dengan baik dan tanggapan yang akan mereka kirim, tetapi karena tidak ada yang kurang berfungsi dengan benar sebagai server HTTP,
sumber
Pertama-tama, saya harus mengatakan bahwa XML telah digunakan untuk merangkum pesan waktu nyata dengan beberapa keberhasilan, dan pada skala besar, khususnya untuk berkomunikasi IM dan kehadiran di XMPP. Tampaknya juga ada beberapa perusahaan yang berniat memanfaatkan pengetahuan XML mereka untuk mencoba menemukan area aplikasi lain untuk sistem representasi data ini.
Namun, tidak semua orang yakin bahwa XML adalah jawaban untuk segalanya dalam sistem pengiriman pesan. Sebagai contoh, ada perubahan nyata dalam beberapa tahun terakhir ke sistem online yang menggunakan JSON sebagai cara untuk membuat serialisasi data daripada XML, dan jika saya memakai topi pengembang saya sebentar, saya akan mengatakan bahwa alat untuk menyandikan / mendekode dari asli representasi (misalnya dalam Python, PHP, Javascript) tampaknya jauh lebih mudah digunakan daripada untuk JSON daripada padanannya untuk XML, bahkan jika XML memiliki lebih banyak waktu untuk mendapatkan jawaban yang benar.
XML adalah representasi yang sulit untuk ditangani oleh komputer, karena membutuhkan parser teks yang relatif kompleks, dan kemudian semacam representasi hierarkis untuk memungkinkan datanya diekstraksi dalam suatu program. Karena ada begitu banyak teks yang terlibat, Anda memerlukan sedikit memori yang tersedia untuk pengodean / dekode.
Seringkali tampak tidak jelas bahwa XML menambahkan banyak nilai pada representasi data: jika pesan inti tidak terlalu hierarkis, maka menambahkan banyak sekam teks tampaknya tidak perlu, tetapi secara paradoksal jika ada banyak hierarki kemudian menguraikan pesan dari representasi tekstualnya akan menjadi kerja keras dan membutuhkan banyak sumber daya. Juga, manfaat dari mewakili dalam teks tidak jelas bagi saya: Ketika kami pertama kali menulis dan men-debug sistem komunikasi, adalah umum untuk menggunakan alat pemantauan / decoding (misalnya Wireshark) untuk membantu kami mencari tahu apa yang salah. Dalam jangka panjang, semuanya bekerja dengan baik, dan tidak ada manusia yang perlu melihat secara detail pada pesan bolak-balik (hanya komputer). Komputer lebih suka representasi biner. Representasi tekstual tidak menguntungkan siapa pun yang terlibat di setiap tahap penempatan.
XML sulit bagi manusia untuk membaca (dan secara manual membangun) sambil bekerja keras untuk komputer pada saat yang sama; Oleh karena itu sistem yang tidak cocok untuk komputer dan juga tidak cocok untuk manusia.
Yang penting, IoT memiliki beberapa kendala khusus yang membuatnya menjadi efisien. Perangkat IoT biasanya memiliki daya pemrosesan dan penyimpanan terbatas (biasanya tidak ada penyimpanan sekunder skala besar, hanya beberapa RAM dan EEPROM). Perangkat IoT mungkin memiliki tautan komunikasi yang paling sederhana, bahkan mungkin bukan tumpukan TCP / IP. Akan ada berbagai macam desain mikrokontroler, bahkan pada tingkat kecanggihan di mana sistem operasi standar (misalnya Linux, Android) akan digunakan; ini membatasi jumlah alat yang tersedia yang akan menawarkan antarmuka XML yang mudah digunakan.
Singkatnya, saya menduga bahwa dengan IoT, representasi data lebih baik dibiarkan berdasarkan kasus per kasus, tergantung pada kendala perangkat keras, gaya komunikasi (mis. Siaran, datagram, dll yang dapat diandalkan), frekuensi komunikasi dan sebagainya. XML tentu tidak seharusnya dianggap sebagai sine qua non untuk IoT.
sumber
Beberapa tahun yang lalu saya menganalisis perbedaan untuk menggunakan
XML dalam jaringan pembayaran untuk representasi transaksi pembayaran (card_number, tanggal, waktu, terminal_id, dan daftar elemen tambahan) dibandingkan dengan tradisional
ISO8583 bit- maped
XML memiliki overhead yang sangat besar. Jika Anda mempertimbangkan dampak dalam jaringan dengan 10.000 node masing-masing mengirim 10+ pesan setiap jam / hari ke host pusat maka XML keluar dan Anda benar-benar membutuhkan sesuatu yang lebih efisien.
sumber