[Standards] XMPP Myths

Vitaly Takmazov vitalyster at gmail.com
Thu Aug 27 15:14:36 UTC 2015


Hello!

> It's here: http://wiki.xmpp.org/web/index.php?title=Myths

I don't understand where is the proper place to comment it, so I will comment it here.

> XMPP is XML, so it's too slow.
Yes, many novice developers saying exactly the same, but the problem is much deeper:
*development with* XML/XMPP is *much slowly* than with JSON.
Imagine you are a novice developer, who is not familiar with XML/XMPP but wants to build messaging app: almost every programming language and framework have a) built-in HTTP server, b) language structures, like dictionaries and arrays, which perfectly maps to JSON, and it is enough to describe his own Message class with all required fields, serialize it to JSON, send it to server app and deserialize it to its own language structure. So he get the whole client/server app just easy and quick.
But with XML/XMPP: you have no a) easy to use development XMPP server (there are some python/javascript samples, but they are buggy and incomplete), b) good XMPP library (in 99% cases you need to go deep into XML and add a new experimental XML namespace, well, I will explain it in Myth 2 and 3).
So, with HTTP/JSON - developer only need to know his %language_of_choice% and all job will be done with familiar instruments. With XML/XMPP - he need to know: XML(and especially namespaces), network ifrastructure - DNS setup, XMPP server (ejabberd, openfire, prosody) and setup, strange non-mainstreamed languages like Erlang and Lua, to extend server to fit his needs, and many other problems. So, JSON - is *faster* :)

> Myth Two: The baseline is minimal, therefore XMPP is useless.
The problem with "XMPP baseline" is the following: RFC6121 is *not enough* to build *modern* messaging app. I will show only *one* example: RFC's <message /> have no widely used IM fields like "delivered" and "read", and there is no widely adopted XEP with these fields. XEP-0333? There is no libraries/clients/server support of it! So, XMPP baseline is *useless*: you need to study all XEPs, find namespace with required extended message fields (remember, you already need to understand XML namespaces? There is no such problem with JSON!), and add support of it to used "XMPP baseline" library (your programming skills now required to be 10x strong!).

> Myth Three: It's too bandwidth-inefficient for mobile.
> The hypothesis: XMPP stanzas are just too verbose to work on mobile.
No, your hypothesis is wrong again!  XMPP is too inefficient on mobile, because it was not designed with mobile connection in mind.
How typical mobile app works: connecting to his server and authenticating, storing his auth token, sleeps forever in background - and continue to work every time user open app again. Server can invite user again with phone-vendor's "push notifications". That's all. There is no battery and bandwidth-drain in background at all.
How typical XMPP app trying to work: he trying to maintain persistent socket connection! And every TCP disconnection is fatal - you need to authenticate again. And you will just leave all your MUCs and spam all participants with presences! And there is no XEPs to fix it. XEP-0198? 300 seconds to restore session? It is NOT a mobile scenario.
> Myth Four: XMPP is unreliable without a bunch of extensions.
> Myth Five : XMPP is unsuited to the web.
These myths I have explained in 1-3. Yes, you need to use many extensions (and write themself new too), and e.g. session restoring is the same XMPP problem for Web as for mobile.



More information about the Standards mailing list