Ce este protocolul XMPP? Un scurt istoric si cum functioneaza

iNoob | Stefanescu Mihai | 2022-12-08

Internetul din ziua de azi este complet altul fata de internetul din 1990, cand AOL, MSN, GeoCities, Hotmail si multe alte servicii de genul domniau piata. Dar, daca ne uitam mai atent, sub design-ul mdoern, putem observa ca in multe cazuri tehnologia din spate a ramas aproape aceasi. O astfel de tehnolgie care a ramas la fel este XMPP, protocolul care a definit mesageria instanta si standardele acesteia in anii 1990 - 2000.

SMPP inca este foarte folosit si in ziua de azi, fiind folosit chiar si de ginganti precum WhatsApp. Ba chiar mai mult, daca vrei sa construiesti o cplicatie de chat ce nu foloseste XMPP, o intelegere a protocolului XMPP te va ajuta sa iei decizii arhitecturale importante legate de modul de functionare.
Acum, hai sa ne uitam mai bine la XMPP si modul in care functioneaza.

Ce este XMPP (sau eXtensible Messaeging & Presence Protocol)

XMPP vine de la eXtensible Messaeging & Presence Protocol, dupa cum probabil deja v-ati dat seama si este un standard public ce face posibila mesageria (aproape) instanta prin schimbul de XML-uri.

XML, sau eXtensible Markup Language, este un mod de a organiza si salva documente text astfel incat datele sa poate fi interpretate cu usurinta de o multitudine de limbaje si aplicatii. Pentru comunicare XMPP foloseste date in format XML, in chunk-uri mici numite stanzas, ce pot fi trimise in mod sigur prin protocolul TCP, folosinduse de un server intermediat.

Specificatii XMPP

Internet Engineering Task Force (IETF) a standardizat XMPP in jurul anilor 1990-2000 printr-o serie de publicatii, dintre care mai notabile au fost  RFC 6120, RFC 6121, si bineinteles RFC 7622.
Mai nou,  RFC 7590, extinde protocolul XMPP permitand folosirea criptarii TLS.
RFC 7395 permite crearea de WebSockets pentru XMPP.
Daca vrei sa aflu exact care sunt standardele XMPP de implementare, articolele de mai sus pot fi considerate ca puncte de referinte ale acestui protocol.

Acum, ca sa intelegem mai bine la ce se refera, hai sa luam pe rand fiecare termen din numele protoclului si sa discutam despre el.

eXtensible

Un protocol extensibil este gandit astfel incat sa evolueze, cu ajutorul contrinutiilor din partea comunitatii, extensiilor si diverse modificari aduse de useri in timpul implementarii. Pentru a nu fi nevoie sa fie "reconstruit" de fiecare data, Fundatia Standardului XMPP - (XSF) tine un "branch" clean pe care aduc in mod constand imbunatatiri si extensii. Natuda extensibila si open source a protocolului este motivul pentru care este inca atat de folosit si considerat sigur, dupa mai bine de 20 de ani de la lansarea initiala.

Messaging

Aceasta parte este destul de usor de inteles, XMPP permite utilizatorilor sa schimbe mesaje in timp (aproape) real. Spre deosebire de chat-urile web, care  partea de client face un mod constant polling catre server pentru a verifica aparitia mesajelor noi, XMPP conserva banda consumata si asigura livrare rapida in mod cronologic a mesajelor folosind un mecanism de push initiat de masina care a trimis mesajul.

Presence

Daca iti aduci aminte mesajele de away de pe AIM (AOL Instant Messenger), deja intelegi conceptul. Pe langa schimbul de mesaje, XMPP poate comunica satre server status-ul utilizatorului (precum online, offline sau away).

Protocol

Un protocol nu este o bucata de cod sau o aplicatie, mai de graba un set de asteptari si standarde tehnice astfel incat diverse componente, atat hardware cat si software sa poate interactiona intr-un mod "coerent".

Functiile principale XMPP

In cazul unei aplicatii de mesagerie instanta, XMPP si XML se pot ocupa de toate functiile fundamentale unui asemenea sistem, precum
- Trimiterea si primirea de mesaje directe intre utilizatori
- Verificarea statusului utilizatorului
- Managementul unei liste de contacte
- Blocarea anumitor utilizatori

Istoria XMPP

XMPP a aparut in 1998 ca fiind framework-ul din spatele Jabber, o aplicatie decentralizata si open-source, ca alternativa la serviciile precum AIM si MSN Messenger.  Utilizatorul Jeremia Miller de pe Jabber a fost cel care a dezvoltat protocolul original pentru XMPP, iar in primii ani de viata al acestuia oamenii il numeau simplu "protocolul Jabber". Pentru ca XMPP ofera o flexibilitate asa mare, a fost rapid adoptat si in afara Jabber. Cand IETF a standardizat protocolul in mod oficial i-au schimbat numele in XMPP, care este mai mai corect din punct de vedere tehnic.

Cum functioneaza?

Lista de caracteristici de mai jos a scos XMPP in evidenta fata de alte servicii de mesagerie.

Arhitectura Client-Server

Exact cum am mentionat mai sus, XMPP functioneaza prin trimiterea de mici mesaje XMP intre endpoint-uri (clienti) cu ajutorul unui server. In alte cuvinte, cand ii trimiti un mesaj prietenului tau prin XMPP, mesajul merge catre un server prima data, in loc sa mearga catre device-ul prietenului tau. Fiecare client are un nume unic, similar unei adrese de email, pe care serverul il foloseste sa identifice utilizatorul si sa ruteze mesajul.

Conexiuni TCP persistente

In mod nromal, XMPP stabileste o conexiune intre clienti si server prin protocolul TCP. Aceste conexiuni sunt persistente si nu trebuiesc refacute la fiecare mesaj trimis, astfel incat XMPP creaza un stream XML.

Trimiterea de mesaje asynchrone

XMPP permite device-urilor sa trimita mesaje asyncrone, adica poti trimite mai multe mesaje unul dupa altul fara sa fii nevoit sa astepti un raspuns, iar 2 utilizatori nu trebui sa fie online in acelasi moment pentru a isi trimite mesaje.
Mesajele sunt trimise ca si XML stanzas, adica mesaje XML ce contin atat continutul mesajului cat si extra informatii, precum identificatorul utilizatorului care il trimite, identificatorul utilizatorului care il primeste si asa mai departe.

In alte sisteme de acest gen, clientul "intreaba" in mod constant server-ul daca au aparut informatii noi de care are nevoie. Acest proces, cunoscut si sub denumirea de polling, se inatmpla la un interval regulat de timp (sa zicem 30 de secunde), ceea ce inseamna ca nu e chiar o experienta de "mesagerie instant", de asemenea, acest mod de interogare a serverului consuma si mai multa banda.
XMPP functioneaza exact invers, in loc sa facem polling de pe client sa intrebam daca avem date noi, serverul trimite catre client datele cand sunt discponibile.

Gazduire decentralizata

XMPP este decentralizat, adica oricine isi poate instala, intretine si opera propriul server de XMPP, fie pe serverul personal fie pe un serviciu de gazduire. De asemenea, nu exista un server "official" de XMPP. Acest mod de operare este similar email-ului, exista servicii, precum Gmail, care au propriile server, dar oricine isi poate face un server de mail propriu.

Conectarea la alte protocoale

Alta caracteristica a protocolului XMPP este abilitatea de a interactiona cu alte protocoale. De exemplu, un server XMPP poate fi legat fara probleme la un serviciu de genul Short Message Service (SMS) pentru a transmite mesaje catre telefoane mobile, la fel de bine poate fi conectat la un SMTP pentru a trimite pe mail mesaje, ba chiar mai mult, poate fi conectat si cu alte protocoale de mesagerie instant precum Internet Relay Chat (IRC).

Beneficii XMPP in ceea ce consta mesageria

Fiind un protocol atat de folosit si standardizat de IETF, XMPP a dovedit cat este de bun, fiind adoptat de comunitati atat de mari de utilizatori in ultimii 20+ ani. De asemenea, natura lui extensibila il face ideal ca intermediar intre protocoale mai putin flexibile.

Stabilitate

Cu mii de servere online, sude de dezvoltatori folosind-ul si milioane de utilizatori, protocolul XMPP si extensiile lui au dovedid ca pot sustine foarte mult trafic.

Livrarea mesajelor

Clasica problema a celor 2 generali explica cum o metoda "gresita" de livrare a mesajelor poate la un sir interminabil de confirmari  si neincrederea ca un mesaj a fost livrat corespunzator. XMPP, stabilind o conexiune persistenta prin TCP rezolva acest gen de probleme. Cand un stanza este trimis, cel care l-a trimis poate fi sigur ca acesta a ajuns unde trebuie.

Suport pentru mai multe limbaje

Popularitatea acestui protocol a dus la aparitia unui numar mare de librarii ce implementeaza protocolul in limbaje precum C, C++, C#, Ruby, Java, Python, Perl, PHP si altele.

Open Source

Fiind open-source, XMPP permite dezvoltarea mai multe implemetari in diverse libaje ce pot fi conectate intre ele foarte usor. Oricine isi poate face propriul client ce se poate conecta la orice server si la fel, oricine isi poate face propriul server putind fi folosit cu orice client.

Viitorul XMPP

Dupa cum am spus si mai sus, XMPP este un protocol de incredere, atat pentru chat-uri cat si pentru alte tipuri de comunicare perr-to-peer. Permite crearea de chat-uri multi-user, transmiterea de continut non-text (audio, video, imagini), ba chiar si unele sisteme de VoIP (Voice Over Internet Protocol) folosesc XMPP, chiar mai mult, este folosit si in device-uri Internet of Things (IOT).

XSF lucreaza la dezvoltarea de extensii ce permit criptare end-to-end, cat si alte tipuri de extensii pentru IOT. Chiar daca exista dezvoltatori care considera ca ReST (Representational State Transfer) sau JSON pot fi folosite in loc de XMPP, numarul de implementari XMPP existente ne asigura ca acest protocol va mai trai o perioada buna de timp.

 


Imi place ce faci aici
Daca iti place ce fac aici imi poti cumpara o cafea Buy Me a Coffee at ko-fi.com

Stefanescu Mihai
Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.
       

Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum.

Posteaza un comentariu

Comentarii

Inca nu au fost postate comentarii, fii primul care posteaza un comentariu!

Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.

🗝ïļ Login 🌟 Register

🔖 Bookmarks ⊞
âœĻ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌊ïļ Discord ⊞

Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.

⮆ïļ