In Part 1 – 7 Advantages of XMPP we discussed some of the strengths of XMPP. In this second part of our XMPP Mini-Series we will concentrate on how Google Wave uses XMPP. Of note: this particular part has drawn a lot of attention in the blogosphere lately, based on an article which claimed that Google had developed a “full-featured XMPP Client”.
I hope to make is clear in this article that Google has not, nor do they claim to have, developed a XMPP Client. Although, it is easy to see how one could jump to that assumption given that what you see on your screen looks and feel like XMPP. Moreover, I don’t think the comment deserves the pedantic scrutiny that it has received. In fact, I thought the post was very well written and very clear describing the architecture and clearer with the point it was trying to make: that XMPP is a great tool. That being said, how does Google make the magic happen.
The best explanation can be found in a very short article, by J. Aaron Farr, titled Wave’s Web of Protocol. The diagram below comes from that post and is offered freely by the author.
This diagram is the best I have come across to date and I think very clearly outlines the protocols used here. Thus, the following protocols and APIs being used by Google Wave are:
- Federation Protocol – XMPP
- Robot Protocol – JSON
- Client-Server Protocol - As defined by the GWT
- Gadget API – OpenSocial
- Wave Embedded API – Javascript
Now the problem is that only the Federation Protocol is defined. The Robot and Client-Server Protocol are not. The reason for that is because, according to Joe Gregorio in a Google Groups – Wave Protocol FAQ
The focus of our open source and protocol work at this point is on the federation protocol, which is critical for getting inter-operable server implementations, that is, for allowing many other people to build Wave servers and have them interop with each other and with the Google Wave server. We have definitely heard the requests for defining a client-server protocol, but at this time the team doesn’t have the time to put into such an effort.
What is clear in the diagram above is that Google only uses XMPP in the federation protocol, and the federation protocol is only used for wave server-to-wave server communication. The Wave server itself is a OpenFire Server with a Google Wave Extension. Then using the GWT you build your client to speak with that extension. How it does that is pretty much wide open to whoever is building the Wave Client.
So why is it clear that the client is not XMPP. Well, if I have a new wave client, let’s say a desktop based client, I have no way to communicate to Google’s wave server. I have to host my own server, with its own private client-server protocol. Then I can federate with the Goole Server via the XMPP protocol.
At the XMPP Standards Foundation page they list the current XMPP clients and link to a ton of other information about XMPP. The clients listed , in fact, look and feel much like Google Wave does: a XMPP Client. But it is not, many folks have made some clients for their own FedOne Server implementations that act and feel like Google Wave’s Client (see my PyGo Wave post) and their clients are not XMPP, they are clients that have been built with GWT. The fact that is not defined by Google will mean that the argument will continue. But in my mind, it is quite clear that building your server and your client is a different development effort.
I keep saying that I will be building my own server soon. That will now happen in the week after next as my lab space has finally become available and the equipment is being moved and set-up next week.That means I will be putting into practice what I am preaching here.
So, all that to say that Google uses XMPP for Wave Sever-to-Wave Server communications which is accomplished by adding a Google Wave extension to a OpenFire Server. Many folks have also done this using other XMPP servers.
Part 3 of this mini-series will focus on XMPP security.
No related posts.
Related posts brought to you by Yet Another Related Posts Plugin.























