+ All Categories
Home > Documents > XMPP Extensible Messaging and Presence Protocol. Chat In the beginning there was instant messaging...

XMPP Extensible Messaging and Presence Protocol. Chat In the beginning there was instant messaging...

Date post: 27-Dec-2015
Category:
Upload: hilary-stanley
View: 222 times
Download: 1 times
Share this document with a friend
Popular Tags:
20
XMPP Extensible Messaging and Presence Protocol
Transcript

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

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.

XMPP

Device User

Device User

XMPP Communications

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

[email protected]

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

[email protected]

Remote Chat

Server

[email protected]

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);}


Recommended