XMPP over websockets [HTML5]
blog.superfeedr.com
blog.superfeedr.com
Except it's messy and ugly. Well, it's somehow feels on par with HTML, where browsers have to support all sorts of weirdness, though. Further reading: http://news.ycombinator.com/item?id=2069810
However, I still consider XMPP as the protocol of last resort when designing apps for the browser that don't map perfectly onto XMPP. I would sooner write a new protocol than set up a new ejabberd cluster. (This opinion is based on the quality of documentation available a year ago and may be out of date.)
Also, I wish people were more adventurous with XMPP in general and stop thinking that it's just a chat protocol.
For server-to-server passing, prefer (in order):
1. redis pubsub
2. zeromq (if you know what you're doing)
3. amqp (if you think you need it)
4. populate events to a DB transactionally then consume later
Only use XMPP if your problem domain is "someone is paying me $LOTS to set up an XMPP service."Specifically, what if the scenario is enabling communication between servers that you have limited control over and do not have shell / root access to install or manage a server? In this case, there wouldn't be an opportunity to install redis, 0mq, or amqp. The database approach might work, but the servers are distributed and might not allow remote connections. Why wouldn't XMPP work in this scenario using a public XMPP server?
I'd like to learn more!
My problem with XMPP is best illustrated by XEP-0060, the pubsub extension proposal: http://xmpp.org/extensions/xep-0060.html -- I don't have time to figure out that monstrosity.
AMQP is at the limit of complexity as far as pubsub things go. It's complex enough to need explaining, but simple enough were you can understand it in an hour.
If you want an in-depth discussion war about pros and cons, ask your question both on the redis mailing list and on the rabbitmq mailing list. I'd be interested in seeing how both communities respond to your requirement of running on limited access servers.
I wish I could use zeromq or redis or amqp, but it just is not an option in this environment.
I was wondering if there was some solid technical reason to not use XMPP, but it looks like there isn't one... it's just a matter of personal preference and wanting to avoid spending time on something. I'll charge ahead with the XMPP implementation in our scenario unless there's a good reason someone can see why not to.
Site streams requires making one connection per 100 users; perhaps they were having trouble sharding with XMPP?
My biggest problem with XMPP as a whole is... well, it's XML. Not only is it heavier than it should be across the wire, it feels to me that the XML way of thinking leads to unnecessary verbosity when designing protocol messages. And there seems to be no proper consensus on how to use it among the different XMPP RFCs -- do we re-use a node name or come up with something different? Or just make it an attribute? Do we namespace it?
XMPP works great for what it was designed for though. There are many robust client and server implementations, being able to federate is awesome, and it's pretty easy to extend. But if I were to re-invent it, I would use a binary transport format.
https://developer.mozilla.org/en/WebSockets
Can't wait until they fix this!
With the advantages xmpp may or may not have over http/html, this could be interesting.
The most interesting obvious usecase to me would be using XMPP and ejabberd as a message backplane for your website, hanging various components off of ejabberd that can integrate with your web connection.
Why not 0mq and json ? Something like Mongrel2 perhaps?