Friday, October 25, 2013

Real-time protokol XMPP

Disini saya ingin berbagi beberapa pengetahuan yang saya pelajari mengenai sebuah protokol bernama Jabber atau lebih dikenal dengan XMPP. Saya tertarik untuk membahas protokol ini, selain memang sangat penting pengetahuan tentang protokol ini bagi para developer, artikel-artikel yang banyak saya dapati di internet hanya menyebutkan seolah-olah bahwa protokol ini hanya dapat diimplementasikan pada Instant Messaging saja. Padahal tidak demikian, protokol ini merupakan protokol standar komunikasi real-time yang telah disahkan oleh IETF. Memang pada tahun 2002 kemarin IETF telah merancang core protokol ini untuk keperluan Instance Messaging dan teknologi presence, namun komunitas jabber bekerja terus menerus agar protokol ini bersifat extensible dan luas dalam hal penggunaannya.




Dalam artikel ini, akan saya tulis beberapa karakteristik yang dimiliki oleh open-standard protokol XMPP. Tidak akan terlalu detail menjelaskan apa itu protokol XMPP atau prosedur teknis kerja protokol ini. Hanya beberapa karakteristik pokok yang akan saya sebutkan. Baiklah berikut adalah poin-poin penting yang bagus untuk pemahaman awal tentang protokol ini:

1. Desentralisasi Arsitektur

Implementasi protokol XMPP merupakan teknologi dengan jaringan client-server yang terdesentralisasi. Jaringan ini mirip dengan jaringan email, dimana paket data dapat diteruskan kepada server XMPP lain yang menjadi tujuannya. Kita dapat saja membuat jaringan XMPP dan kemudian membuat saluran komunikasi dengan server Instant Messaging seperti GTalk, YM dan Facebook chat. Instant Messaging sekarang memang kebanyakan menggunakan protokol ini untuk saling berkomunikasi.

2. JabberID

Penamaan address entitas pada jaringan XMPP menggunakan layanan DNS. Dengan memakai DNS akan sangat memudahkan untuk menghafal seluruh entitas-entitas yang terhubung, daripada mengingat satu-persatu IP address pada setiap entitas. Tiap entitas pasti memiliki sebuah ID yang unik yang dikenal dengan istilah JabberID atau disingkat dengan JID. JabberID ini terbagi menjadi tiga bagian: local part, domain dan resource. Contoh-nya adalah mustofa@mimicreative.net/athome, dimana mustofa adalah local part, mimicreative.net merupakan domain dimana saya terhubung dan athome adalah resource session dimana saya sedang melakukan komunikasi sekarang.

3. Core Protokol

Core protokol XMPP hanya mentransmisi aliran data dalam format XML. Terdapat tiga jenis aliran XML yang ditransmisikan, antara lain message, presence, dan info query atau lebih dikenal dengan IQ. Jenis pertama (1) message, merupakan general paket XMPP berisi informasi yang dikirim dari satu entitas ke entitas lainnya. Pengiriman paket ini bersifat fire and forget, artinya entitas pengirim tidak akan mendapatkan result dari paket message yang telah dia kirimkan. Selain itu juga message ini dikirimkan dari dan ke one-to-one entitas atau one-to-many. Jenis yang kedua adalah (2) presence, dikirimkan dengan tujuan availability kehadiran entitas yang terhubung dalam jaringan. Kita dapat mengetahui status online atau offline dari setiap entitas karena adanya aliran data presence ini. Tidak seperti message, presence dikirimkan ke semua entitas (broadcast) yang sudah subscribe ke entitas tersebut. Terakhir, jenis yang ketiga adalah (3) IQ, digunakan untuk mekanisme request-response antar entitas dalam jaringan XMPP. Mirip dengan metode GET dan POST pada protokol HTTP. Terdapat sebuah entitas yang mengirimkan request ke entitas lain, dan akan menerima response balasan dari entitas tersebut.

4. Server XMPP

Pada jaringan XMPP, tidak semua operasi dilakukan oleh server. Tugas server hanya terbatas pada meneruskan aliran data, mencatat status kehadiran entitas dan mengatur roster (subscribing user/entitas). Pemprosesan setiap paket akan dilakukan sendiri oleh masing-masing entitas. Dalam beberapa kasus bahkan kita tidak memerlukan operasi tambahan di server. Kita hanya membutuhkan core protokol dan server XMPP bekerja sebagaimana mestinya. Semua operasi dan proses dilakukan oleh aplikasi client yang kita bangun. Kasusnya seperti pada game sederhana Tankar. Game ini merupakan game multi-player yang juga memanfaatkan core protokol XMPP untuk bertukar data dan berkomunikasi antar pemainnya. Semua proses sepenuhnya ada pada aplikasi client yang di jalankan independent pada masing-masing player. Tidak ada spesifik server, karena aliran data akan berjalan melewati server-server XMPP yang sudah ada, seperti server jabber.org dan server GTalk.

5. Payload

Setiap child elemen dari aliran XML yang ditransmisi, merupakan payload data aplikasi. Kalau dalam ilmu komunikasi dan informasi, payload disini adalah sekumpulan data seperti data buku, event, atau informasi apapun yang nantinya akan diproses oleh aplikasi yang kita bangun. Ketiga jenis aliran XML yang sudah saya sebutkan diatas (message, presence, dan IQ), dapat membawa data-data informasi untuk sistem aplikasi. Lalu format payload seperti apa yang dapat kita sisipkan pada aliran XML? Dari e-book yang berjudul Profesional XMPP Programming with Javascript and jQuery karangan Jack Moffitt, payload disini dapat berbagai macam jenis data, contohnya seperti XHTML (contoh pada Data Form pada XEP-0004), URL, RSS, SOAP, XML-RPC dan banyak lagi lainnya. Dalam bukunya Jack Moffitt bahkan berkata bahwa payload types are limited only by your imagination! yang memberikan penjelasan bahwa apapun tipe datanya dapat di sisipkan pada aliran XML protokol ini.

6. Extensions Protokol

Komunitas XMPP telah membuat banyak sekali extensions yang dapat kita manfaatkan untuk build sistem aplikasi. Extensions disini bukanlah library, module atau add-ons. Bisa dibilang extension ini merupakan kekuatan utama protokol XMPP.

X dari singkatan XMPP merupakan extensible. Merupakan sifat yang dimiliki oleh core protokol XMPP. Istilah extensible -menurut saya- berkenaan dengan sifat core protokol XMPP untuk membawa data (payload) yang telah kita definisikan untuk membangun berbagai macam sistem aplikasi yang berbeda. Sistem aplikasi mulai dari content syndication, push notification, lightweight middleware and web services, whiteboarding, multimedia session negotiation, intelligent workflows, geolocation, social gaming, social networking dan bahkan cloud computing.

Dari sifat extensible ini kemudian terdapat sebuah istilah extensions yang berarti proses dan payload data yang sudah developer rancang untuk tujuan tertentu. Setiap developer dapat merancang atau membangun extensions-nya sendiri. Sehingga akan sangat banyak sekali extensions yang akan dapat kita temukan. Tapi terdapat juga extensions standar yang diatur oleh XSF (XMPP Standart Foundations). Extensions standar ini kemudian di kenal dengan istilah XEP (XMPP Extension Protocol). Berikut adalah extensions standar yang paling sering digunakan oleh para developer untuk membangun sistem aplikasi:


Terdapat tiga ratusan lebih extensions yang sudah masuk dalam daftar XSF. Untuk melihat keseluruhannya Anda dapat membacanya pada link ini.

7. Keamanan Protokol

XMPP support TLS (Transport Layer Security) yang juga merupakan protokol kembaran dari SSL, digunakan untuk menangani keamanan data yang ditransmisikan melalui jaringan XMPP. Integrasi XMPP dengan TLS ini diatur pada sebuah extensions yaitu XEP-0290.

Itulah 7 karakteristik protokol XMPP yang dapat saya tulis. Dengan mengetahui beberapa karakteristik ini, tentunya kita dapat menebak aplikasi atau sistem seperti apa yang cocok diimplementasikan dengan protokol ini. Kita dapat saja membuat kendaraan yang berjalan diatas air dengan sangat baik atau membuat kendaraan yang melayang diudara dengan sangar baik, tapi tentunya kita tidak dapat menciptakan kendaraan yang sangat baik dikeduanya, diatas air dan di udara. Demikian juga dengan implementasi protokol XMPP. Protokol ini akan sangat baik diimplementasi ketika kita membuat beberapa kebutuhan aplikasi berikut ini:

  • Ketika membutuhkan sebuah informasi tentang kehadiran atau presence sebuah entitas dalam jaringan, entah itu entitas client atau server.
  • Ketika sebuah aplikasi membutuhkan alert dan notifikasi terhadap data baru pada jaringan internet.
  • Ketika komunikasi membutuhkan sebuah channel enkripsi, authentikasi dan trusted identities.
  • Ketika kita membutuhkan komunikasi diantara distributed network yang kita miliki.
  • Ketika kita membutuhkan sebuah signaling channel yang cukup sederhana untuk mengatur interaksi data suara atau video.

Penutup

Pada umumnya, protokol XMPP digunakan untuk interaksi dan komunikasi secara real-time antara entitas-entitas jaringan. Dan ini memang sangat luas sekali pemanfaatannya. Banyak aplikasi-aplikasi keren yang dapat kita bangun dengan memanfaatkan protokol ini seperti social gaming, push notification dan social networking. Perusahaan-perusahaan sekelas google, apple, facebook membangun beberapa servicenya diatas protokol ini. Service-service ini seperti GTalk, Google wave, Facebook Chat, iCloud, dan lain sebagainya. Dengan menguasai dan memahami protokol ini, kita sebagai developer tentunya akan dapat menciptakan service atau aplikasi keren milik kita sendiri. Oke demikian, semoga artikel ini memberikan manfaat bagi anda.

* Artikel ini pernah publis di bisakomputer.com tertanggal 16 Januari 2013 dengan judul "7 Karakteristik Dasar Protokol XMPP"

No comments:

Post a Comment