- XMPP is communication protocol for message-oriented middleware based on XML.
Originally called Jabber, developed for instant messaging, presence info and contact list maintenance.
XMPP specs published in RFC 6120/21/22.
- RFC 6120: XMPP Core
- RFC 6121: XMPP IM
- RFC 6122: XMPP Address Format
Strengths:
- Mature, Open Standards based technology
- Secure (SASL and TLS)
- Extensible – Several extensions exist today (http://xmpp.org/xmpp-protocols/xmpp-extensions/)
Weaknesses:
- Binary data transfer (e.g. file transfer) is inefficient (as it requires converting to Base64 encoded form).
- XML streaming layer
- Security: SASL and TLS
- Presence: Built-in information about network availability
- Rosters: Presence-enabled contact lists
- Stream – Open XML envelope sent before more XML elements are exchanged between two entities.
- Stanza – XML elements exchanged between 2 entities. 3 types:
- Presence
- Message
- IQ – information or query
IQ – Info/Query.
- Get/Set
- Result
- Error
- Roster - Rosters are stored on the server so that the XMPP client may retrieve the same each time the user logs in. Rosters are a type of IQ Stanza. Example showing IQ message to request for roster.
Presence – the presence info of a user is broadcasted from server to all users in roster list of that user. This works using the PubSub messaging.
Bi-directional streams Over Synchronous HTTP (BOSH)
- It is a long-lived 2 way communication over HTTP.
- Significantly more bandwidth efficient over http (compared to other technologies – such as AJAX)
- Applications requiring both “push” and “pull” communications
- http://xmpp.org/extensions/xep-0124.html
- Avoids http polling for more efficiency and low latency
PubSub
- Each user is assigned a unique Jabber ID.
- XMPP server manages the messages published to a certain node (topic) and delivers the messages to all subscribers for that node.
- Messages may contain payload.
- Messages may be persistent.
XMPP Libraries for Application Programming
- Smack API – Java API for XMPP clients.
- Can be used to:
- Connect to the XMPP server with user’s JID
- Get the user’s roster from XMPP server
- Sending and receiving different type of Stanzas (IQ, Message and Presence).
- Publish messages to nodes
- Subscribe to nodes of interest.
- File transfer/Group chat support also available.
- http://www.igniterealtime.org/projects/smack/index.jsp
- Arista’s CloudVision framework Multi-Switch CLI extension uses XMPP to provide a shared message bus for managing and configuring switches. This is based on the idea from Internet of Things extension for XMPP (http://xmpp.org/extensions/xep-0324.html).
- Arista Switches run an XMPP client and respond to CLI commands.
- User can use any XMPP client (like iChat) on phone or PC to execute CLI on switches.
- A single login to XMPP server gives secure access to all switches.
- Switches can participate in group chats – meaning CLI can be executed on all participating switches in batch.
- A Switch can be in more than one chat room at the same time. Command executed in a given chat room, is executed on all participating switches in that chat room.
- Arista uses ejabberd XMPP server (included with fedora distro).
- Arista uses SleekXMPP client.
- If 2 switches are connected via XMPP, you can run CLI commands on switch A directly from switch B using xmpp send CLI command.
- Primefaces uses Atmosphere framework for implementing server push (PrimePush) - http://blog.primefaces.org/?p=2053.
- Atmosphere comes with a plug-in for BOSH/XMPP (https://github.com/Atmosphere/atmosphere/wiki/Atmosphere-PlugIns-and-Extensions#xmpp)
- Fun with XMPP and Google Talk - http://www.adarshr.com/papers/xmpp
- Smack API - http://www.igniterealtime.org/projects/smack/index.jsp
- XMPP Technology overview - http://xmpp.org/about-xmpp/technology-overview/
- Arista’s Network Management over XMPP - https://eos.aristanetworks.com/2011/08/management-over-xmpp/

