220 likes | 454 Views
XMPP. Extensible Messaging and Presence Protocol. Chat. In the beginning there was instant messaging and chat. Lots of binary standards: Unix talk, IRC, AOL Instant Messaging (AIM) Yahoo, MS, etc.
E N D
XMPP Extensible Messaging and Presence Protocol
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 My status--available for IMs Buddies Off Line buddies
How Does XMPP Work? <message to='romeo@example.net' from='juliet@example.com/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/response • In 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 Server Client TCP connection between client and server. Typically this is negotiated over SSL or TLS (a follow-on version of SSL) so that the traffic is encrypted and secure. XML stanzas are exchanged across this 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.
XMPP Device User XMPP Communications Device User
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 objects • You can also tie in XMPP with multimedia, including voice • The 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 username@fqhn.com, eg jamesbond@mi6.gov.uk
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 roomname@conference.machine.name, eg • Moves@conference.savage.nps.edu
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 smith@googletalk.com • (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 remote.com Local.com Local Chat Server Remote Chat Server Client Foo@local.com Client Bar@remote.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(); // Login connection.login("testuser", "foobar");
Smack API MultiUserChat muc = new MultiUserChat(connection, "moves@conference.savage.nps.edu" ); muc.join("studmuffin"); for(int idx = 0; idx < 10; idx++) { muc.sendMessage("Hello world"); Thread.sleep(1000); }