Ce este protocolul XMPP? Un scurt istoric si cum functioneaza

Stefanescu Mihai 9 months ago iNoob

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.

 

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

dulcolax verkrijgbaar bij Nederlandse apotheken # 1 month ago If you desire to take much from this piece of writing then you have to apply such methods to your won blog.
Opcfxd # 1 month ago tricor 200mg pill <a href="https://fenoficor.com/">tricor 160mg pills</a> purchase tricor sale
Ebmnxi # 1 month ago buy cheap generic zaditor <a href="https://geozipin.shop/">doxepin usa</a> tofranil medication
achat de sildenafil 100 mg en Italie # 1 month ago What's up to every body, it's my first pay a visit of this webpage; this web site contains remarkable and in fact good information in support of visitors.
Rnkdav # 1 month ago buy minoxytop online <a href="https://aminirin.com/">where to buy mintop without a prescription</a> buy ed pills
Zandra # 4 weeks ago A person essentially lend a hand to make critically articles I'd state. That is the first time I frequented your web page and so far? I amazed with the analysis you made to make this particular post incredible. Excellent task!
Ktkjml # 4 weeks ago aspirin canada <a href="https://levquinon.shop/">zovirax online order</a> buy generic zovirax for sale
Wlstvh # 4 weeks ago dipyridamole price <a href="https://dipyxcin.shop/">dipyridamole oral</a> pravastatin for sale online
Louie # 3 weeks ago My programmer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the expenses. But he's tryiong none the less. I've been using Movable-type on a number of websites for about a year and am nervous about switching to another platform. I have heard great things about blogengine.net. Is there a way I can import all my wordpress content into it? Any help would be really appreciated!
Sdjcae # 3 weeks ago buy dydrogesterone 10mg without prescription <a href="https://janozin.com/">buy sitagliptin 100mg</a> order jardiance 10mg sale
Brittany # 3 weeks ago Your means of telling the whole thing in this article is really nice, every one be capable of simply understand it, Thanks a lot.
Zsrcgw # 3 weeks ago prasugrel 10mg ca <a href="https://thoramine.com/">chlorpromazine for sale</a> detrol ca
Ytwjqn # 2 weeks ago order monograph 600 mg generic <a href="https://colotazol.shop/">buy pletal generic</a> purchase cilostazol without prescription
Hnoyor # 2 weeks ago buy ferrous 100mg sale <a href="https://fertonel.com/">buy ferrous</a> buy sotalol generic
premphase zonder recept verkrijgbaar in Spanje # 2 weeks ago Howdy would you mind letting me know which webhost you're using? I've loaded your blog in 3 completely different browsers and I must say this blog loads a lot quicker then most. Can you recommend a good internet hosting provider at a reasonable price? Kudos, I appreciate it!
Awyfrt # 2 weeks ago purchase enalapril <a href="https://duphstine.com/">buy lactulose without prescription</a> duphalac ca
Tpylrp # 2 weeks ago generic mestinon <a href="https://mestien.com/">buy cheap generic pyridostigmine</a> maxalt generic
Medikamente rezeptfrei in der Schweiz # 2 weeks ago What's up, the whole thing is going well here and ofcourse every one is sharing facts, that's really good, keep up writing.
cefdinir in Italien erhältlich # 1 week ago Awesome! Its actually awesome post, I have got much clear idea regarding from this article.
Zrjzpu # 1 week ago order betahistine sale <a href="https://benedolac.com/">order benemid 500mg generic</a> order probenecid 500 mg sale
Qmifns # 1 week ago purchase zovirax without prescription <a href="https://aexeloda.com/">buy capecitabine 500mg pills</a> where to buy rivastigmine without a prescription
Cgqdfb # 1 week ago telmisartan 80mg us <a href="https://molnenil.shop/">order movfor</a> molnunat for sale online
climaston sans effets secondaires # 1 week ago Hi there, every time i used to check web site posts here in the early hours in the daylight, because i like to gain knowledge of more and more.
Qaiuyg # 6 days ago order cenforce 100mg pills <a href="https://chlodinir.com/">aralen cheap</a> buy aralen pills
je kunt estrace zonder voorschrift kopen in Bogota # 5 days ago When I initially commented I clicked the "Notify me when new comments are added" checkbox and now each time a comment is added I get four emails with the same comment. Is there any way you can remove people from that service? Thank you!
lithium disponibile senza prescrizione medica a Verona # 3 days ago Hi, i feel that i saw you visited my weblog thus i came to return the choose?.I am trying to in finding things to improve my site!I assume its adequate to use some of your concepts!!
ovex a precio asequible # 1 day ago Great blog you have here but I was curious if you knew of any discussion boards that cover the same topics talked about here? I'd really like to be a part of online community where I can get responses from other knowledgeable people that share the same interest. If you have any recommendations, please let me know. Bless you!
acquisto online di velaxor a Buenos Aires # 25 minutes ago You need to take part in a contest for one of the highest quality blogs on the net. I am going to recommend this website!
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
Back to top
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.