xmpp extensible messaging and presence protocol. chat in the beginning there was instant messaging...
TRANSCRIPT
Chat
In the beginning there was instant messaging and chat.
Lots of binary standards:Unix talk, IRC, AOL Instant Messaging (AIM) Yahoo,
MS, etc.The commercial implementations quickly tried to
achieve user lock-in via proprietary protocols. (Aside: you make money in the computer industry by owning standards, such as the Windows API. If you own the standard you can lock other implementors out.)
Better Way
Why not do something open standards that any one can implement.
Which is what XMPP is--open standard, published by the IETF, that uses XML to exchange information.
XML allows user-readability; the classic benefits of XML
What’s Handled?
Presence: who is online right now? Are they willing to talk?
Instant Messaging: real-time communications between two or more users
• “real time” roughly means that you see the text each time the user hits return• Some show each character as it is typed
Chat: groups of people exchanging information in a chat room
Information exchange: Since XMPP uses XML, we can exchange information that can be expressed in XML
Presence: Buddy List
QuickTime™ and aTIFF (LZW) decompressor
are needed to see this picture.
My status--available for IMs
Buddies
Off Line buddies
How Does XMPP Work?
<message to='[email protected]' from='[email protected]/balcony' type='chat' xml:lang='en'> <body>Wherefore art thou, Romeo?</body></message>
XMPP Stanzas
There are three basic “stanzas” or elements in XMPP:• message• presence: “here I am. Tell all my subscribers about my
status”• iq: info/query, request/responseIn addition these elements all have five common attributes
defined• to: JID of recipient• from: JID of sender• id: can be a unique ID assigned to each stanza • type: varies by stanza• xml:lang: used to specify human language
XMPP
Client Server
TCP connection between client and server. Typically this is negotiatedover SSL or TLS (a follow-on version of SSL) so that the traffic is encryptedand secure.
XML stanzas are exchanged acrossthis channel
XMPP
The XML is sent as an open-ended stream. A stream starts with <stream>, then an open-ended series of <presence>, <message>, and <iq> tags are sent.
When the closing </stream> tag is sent, the underlying TCP connection is torn down
XML Communications Backplane
We can also add new XML to the existing standard to get new capabilities
You should think of XMPP not as strictly chat, but as an XML-enabled communications backplane
Anyone can subscribe to a server and receive XML messages from other users. We can use this as a way to do lots of things besides chat.
Communications
You can place programs or devices that listen on an XMPP chat room or that exchange information directly.
Now there are devices or programs listening rather than humans
Can use XML to exchange data objectsYou can also tie in XMPP with multimedia,
including voiceThe jingle API (included w/ smack) allows
voice
XMPP Basics
You have a client that connects to and authenticates to a server.
Users are uniquely identified by their JID, in the form [email protected], eg [email protected]
Multi User Chat (MUC)
Multiuser chat is an add-on to the XMPP specification. It allows several users to be in a chat room.
The convention is for a chat server to have the DNS name “conference.machine.name”, eg conference.savage.nps.edu
The muc is identified by the jid [email protected], eg
Server-to-Server
Notice that a client connects to a local server, but the JID for a chat or muc may be on another machine
Example: you log onto savage.nps.edu, and you specify that you want to chat with someone at [email protected]
(For firewall reasons this won’t work right now.)To do this, the server you have logged onto
establishes a server-to-server connection to the machine specified in the JID
Server-to-Server
Local Chat
Server
Remote Chat
Server
remote.comLocal.com
Server-to-Server
If the user isn’t on the same box that you logged onto, the server will contact the server the user is logged onto and pass the message to that server
The users do not need to be logged onto the same machine to chat with each other
APIs
What does it take to write an XMPP participant? It turns out, not very much.
The Smack API from Ignite Realtime lets you get up and running fairly quickly.
The examples I’ll show use the Smack 3.0 API available at http://www.igniterealtime.org/downloads/index.jsp
Smack API
// Creates a new connection, using TLS if possible.XMPPConnection connection = new XMPPConnection("savage.nps.edu");connection.connect();
// Loginconnection.login("testuser", "foobar");
Smack API
MultiUserChat muc = new MultiUserChat(connection, "[email protected]" );muc.join("studmuffin"); for(int idx = 0; idx < 10; idx++){ muc.sendMessage("Hello world"); Thread.sleep(1000);}