XMPP 101
Remko Tronçon
Peter Saint-Andre
Tuesday, March 3, 2009
Overview
Introduction
XMPP Basics
Example code
Extensions
State of the bulb
Conclusion
2
Tuesday, March 3, 2009
Introduction
Tuesday, March 3, 2009
About Us
4
Tuesday, March 3, 2009
About Us
Peter: Documentation guy and specification author
4
Tuesday, March 3, 2009
About Us
Peter: Documentation guy and specification author
Remko: Developer for Psi client and other projects
4
Tuesday, March 3, 2009
About Us
Peter: Documentation guy and specification author
Remko: Developer for Psi client and other projects
Co-authors (with Kevin Smith) of XMPP: The
Definitive Guide (O'Reilly, 2009)
4
Tuesday, March 3, 2009
About You
5
Tuesday, March 3, 2009
About You
Why are you here?
5
Tuesday, March 3, 2009
About You
Why are you here?
What do you want to build?
5
Tuesday, March 3, 2009
About You
Why are you here?
What do you want to build?
What is your background? (web, client-server, ...)
5
Tuesday, March 3, 2009
What is XMPP?
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
wdland.lit rlworld.lit
server server
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
wdland.lit rlworld.lit
server server
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
wdland.lit rlworld.lit
server server
<message to=’sister@rlworld.lit’>
<body>Hi there!</body>
</message>
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
wdland.lit rlworld.lit
server server
<message to=’sister@rlworld.lit’>
<body>Hi there!</body>
</message>
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
wdland.lit rlworld.lit
...
server server
<message to=’sister@rlworld.lit’>
<body>Hi there!</body>
</message>
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What is XMPP?
eXtensible Messaging and Presence Protocol
Jabber
Real time messaging system
Routes small snippets of XML
wdland.lit rlworld.lit
...
server server
<message to=’sister@rlworld.lit’> <message from=’alice@wland.lit’>
<body>Hi there!</body> <body>Hi there!</body>
</message> </message>
Alice Sister
alice@wdland.lit sister@rlworld.lit
6
Tuesday, March 3, 2009
What can you do with XMPP?
7
Tuesday, March 3, 2009
What can you do with XMPP?
Instant Messaging
7
Tuesday, March 3, 2009
What can you do with XMPP?
Real-time Social Networking
8
Tuesday, March 3, 2009
What can you do with XMPP?
Gaming
9
Tuesday, March 3, 2009
What can you do with XMPP?
Voice & Video
10
Tuesday, March 3, 2009
What can you do with XMPP?
Mobile apps / Geolocation
11
Tuesday, March 3, 2009
What can you do with XMPP?
<insert your idea here>
12
Tuesday, March 3, 2009
XMPP ...
13
Tuesday, March 3, 2009
XMPP ...
... is an open standard (RFC 3920 + 3921, XSF
Extensions)
13
Tuesday, March 3, 2009
XMPP ...
... is an open standard (RFC 3920 + 3921, XSF
Extensions)
... is decentralized (federated)
13
Tuesday, March 3, 2009
XMPP ...
... is an open standard (RFC 3920 + 3921, XSF
Extensions)
... is decentralized (federated)
... has strong security (TLS)
13
Tuesday, March 3, 2009
XMPP ...
... is an open standard (RFC 3920 + 3921, XSF
Extensions)
... is decentralized (federated)
... has strong security (TLS)
... has lots of open-source projects (but other
licensing allowed)
13
Tuesday, March 3, 2009
XMPP ...
... is an open standard (RFC 3920 + 3921, XSF
Extensions)
... is decentralized (federated)
... has strong security (TLS)
... has lots of open-source projects (but other
licensing allowed)
... has an active, open community
13
Tuesday, March 3, 2009
What does XMPP provide?
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
One-to-one and multi-party messaging
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
One-to-one and multi-party messaging
Alerts and notifications (PubSub)
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
One-to-one and multi-party messaging
Alerts and notifications (PubSub)
Service discovery and device capabilities
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
One-to-one and multi-party messaging
Alerts and notifications (PubSub)
Service discovery and device capabilities
Peer-to-peer media sessions (Jingle)
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
One-to-one and multi-party messaging
Alerts and notifications (PubSub)
Service discovery and device capabilities
Peer-to-peer media sessions (Jingle)
Data forms and remote commands
14
Tuesday, March 3, 2009
What does XMPP provide?
Channel encryption and authentication
Presence and contact lists
One-to-one and multi-party messaging
Alerts and notifications (PubSub)
Service discovery and device capabilities
Peer-to-peer media sessions (Jingle)
Data forms and remote commands
And more (lots of extensions)
14
Tuesday, March 3, 2009
History
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
First server + clients + libraries (1999-2000)
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
First server + clients + libraries (1999-2000)
More open source + commercial codebases
(2000+)
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
First server + clients + libraries (1999-2000)
More open source + commercial codebases
(2000+)
Core standardization in IETF as XMPP (2002-2004)
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
First server + clients + libraries (1999-2000)
More open source + commercial codebases
(2000+)
Core standardization in IETF as XMPP (2002-2004)
Development of extensions (2002+)
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
First server + clients + libraries (1999-2000)
More open source + commercial codebases
(2000+)
Core standardization in IETF as XMPP (2002-2004)
Development of extensions (2002+)
Serious adoption by Apple, Google, LiveJournal,
Nokia, Cisco, etc. (2005+)
15
Tuesday, March 3, 2009
History
Invented by Jeremie Miller as Jabber (1998)
First server + clients + libraries (1999-2000)
More open source + commercial codebases
(2000+)
Core standardization in IETF as XMPP (2002-2004)
Development of extensions (2002+)
Serious adoption by Apple, Google, LiveJournal,
Nokia, Cisco, etc. (2005+)
Continuing work on improved security and more
application types
15
Tuesday, March 3, 2009
Basics
Tuesday, March 3, 2009
Architecture
Web architecture
17
Tuesday, March 3, 2009
Architecture
Web architecture
Browser
17
Tuesday, March 3, 2009
Architecture
Web architecture
wonderland.lit images.realworld.lit
Web Server Web Server
Browser
17
Tuesday, March 3, 2009
Architecture
Web architecture
wonderland.lit images.realworld.lit
Web Server Web Server
Browser
17
Tuesday, March 3, 2009
Architecture
Web architecture
wonderland.lit images.realworld.lit
Web Server Web Server
Browser
17
Tuesday, March 3, 2009
Architecture
Web architecture
wonderland.lit images.realworld.lit
Web Server Web Server
Browser
17
Tuesday, March 3, 2009
Architecture
Web architecture
wonderland.lit images.realworld.lit
Web Server Web Server
Browser
17
Tuesday, March 3, 2009
Architecture
E-Mail architecture
18
Tuesday, March 3, 2009
Architecture
E-Mail architecture
wonderland.lit rabbithole.lit realworld.lit
server server server
E-Mail client E-Mail client
alice@wonderland.lit sister@realworld.lit
18
Tuesday, March 3, 2009
Architecture
E-Mail architecture
wonderland.lit rabbithole.lit realworld.lit
server server server
E-Mail client E-Mail client
alice@wonderland.lit sister@realworld.lit
18
Tuesday, March 3, 2009
Architecture
E-Mail architecture
wonderland.lit rabbithole.lit realworld.lit
server server server
E-Mail client E-Mail client
alice@wonderland.lit sister@realworld.lit
18
Tuesday, March 3, 2009
Architecture
E-Mail architecture
wonderland.lit rabbithole.lit realworld.lit
server server server
E-Mail client E-Mail client
alice@wonderland.lit sister@realworld.lit
18
Tuesday, March 3, 2009
Architecture
E-Mail architecture
wonderland.lit rabbithole.lit realworld.lit
server server server
E-Mail client E-Mail client
alice@wonderland.lit sister@realworld.lit
18
Tuesday, March 3, 2009
Architecture
XMPP Architecture
realworld.lit
wonderland.lit
server
server
XMPP client
XMPP client
sister@realworld.lit
alice@wonderland.lit
19
Tuesday, March 3, 2009
Architecture
XMPP Architecture
realworld.lit
wonderland.lit
server
server
XMPP client
XMPP client
sister@realworld.lit
alice@wonderland.lit
19
Tuesday, March 3, 2009
Architecture
XMPP Architecture
realworld.lit
wonderland.lit
server
server
XMPP client
XMPP client
sister@realworld.lit
alice@wonderland.lit
19
Tuesday, March 3, 2009
Architecture
XMPP Architecture
realworld.lit
wonderland.lit
server
server
XMPP client
XMPP client
sister@realworld.lit
alice@wonderland.lit
19
Tuesday, March 3, 2009
Architecture
20
Tuesday, March 3, 2009
Architecture
Client-server
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
Server developers can focus on relaibility & scalability
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
Server developers can focus on relaibility & scalability
Decentralized
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
Server developers can focus on relaibility & scalability
Decentralized
Robust (no single point of failure)
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
Server developers can focus on relaibility & scalability
Decentralized
Robust (no single point of failure)
Easier to manage
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
Server developers can focus on relaibility & scalability
Decentralized
Robust (no single point of failure)
Easier to manage
No multiple hops
20
Tuesday, March 3, 2009
Architecture
Client-server
Client developers can focus on user experience
Server developers can focus on relaibility & scalability
Decentralized
Robust (no single point of failure)
Easier to manage
No multiple hops
Harder to spoof
20
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
21
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
Domain
wonderland.lit
21
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
User Domain
alice@ wonderland.lit
21
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
User Domain
alice@ wonderland.lit
Bare JID
21
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
User Domain
alice@ wonderland.lit
21
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
User Domain Resource
alice@ wonderland.lit /TeaParty
21
Tuesday, March 3, 2009
Addresses
Jabber ID (JID)
User Domain Resource
alice@ wonderland.lit /TeaParty
Full JID
21
Tuesday, March 3, 2009
Streaming XML
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
<presence/>
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
<presence/>
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
<presence/>
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
<iq type=quot;resultquot;>
<query xmlns=quot;jabber:iq:rosterquot;>
<item jid=quot;alice@wonderland.litquot;/>
<item jid=quot;madhatter@wonderland.litquot;/>
<item jid=quot;whiterabbit@wonderland.litquot;/>
</query>
</iq>
<message from=quot;queen@wonderland.litquot; to=quot;madhatter@wonderland.litquot;>
<body>Off with his head!</body>
</message>
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
<presence/>
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
<iq type=quot;resultquot;>
<query xmlns=quot;jabber:iq:rosterquot;>
<item jid=quot;alice@wonderland.litquot;/>
<item jid=quot;madhatter@wonderland.litquot;/>
<item jid=quot;whiterabbit@wonderland.litquot;/>
</query>
</iq>
<message from=quot;queen@wonderland.litquot; to=quot;madhatter@wonderland.litquot;>
<body>Off with his head!</body>
</message>
<message from=quot;king@wonderland.litquot; to=quot;party@rooms.wonderland.litquot;>
<body>You are all pardoned.</body>
</message>
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
<presence/>
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
<iq type=quot;resultquot;>
<query xmlns=quot;jabber:iq:rosterquot;>
<item jid=quot;alice@wonderland.litquot;/>
<item jid=quot;madhatter@wonderland.litquot;/>
<item jid=quot;whiterabbit@wonderland.litquot;/>
</query>
</iq>
<message from=quot;queen@wonderland.litquot; to=quot;madhatter@wonderland.litquot;>
<body>Off with his head!</body>
</message>
<message from=quot;king@wonderland.litquot; to=quot;party@rooms.wonderland.litquot;>
<body>You are all pardoned.</body>
</message>
<presence type=quot;unavailablequot;/>
22
Tuesday, March 3, 2009
Streaming XML
<stream:stream>
<presence/>
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
<iq type=quot;resultquot;>
<query xmlns=quot;jabber:iq:rosterquot;>
<item jid=quot;alice@wonderland.litquot;/>
<item jid=quot;madhatter@wonderland.litquot;/>
<item jid=quot;whiterabbit@wonderland.litquot;/>
</query>
</iq>
<message from=quot;queen@wonderland.litquot; to=quot;madhatter@wonderland.litquot;>
<body>Off with his head!</body>
</message>
<message from=quot;king@wonderland.litquot; to=quot;party@rooms.wonderland.litquot;>
<body>You are all pardoned.</body>
</message>
<presence type=quot;unavailablequot;/>
</stream:stream> 22
Tuesday, March 3, 2009
Communication Primitives
Stanzas:
23
Tuesday, March 3, 2009
Communication Primitives
Stanzas:
<message/>
23
Tuesday, March 3, 2009
Communication Primitives
Stanzas:
<message/>
<presence/>
23
Tuesday, March 3, 2009
Communication Primitives
Stanzas:
<message/>
<presence/>
<iq/>
23
Tuesday, March 3, 2009
Message Stanzas
24
Tuesday, March 3, 2009
Message Stanzas
<message from=quot;madhatter@wonderland.lit/fooquot;
to=quot;alice@wonderland.litquot;
type=quot;chatquot;>
<body>Who are you?</body>
<subject>Query</subject>
</message>
24
Tuesday, March 3, 2009
Message Stanzas
<message from=quot;madhatter@wonderland.lit/fooquot;
to=quot;alice@wonderland.litquot;
type=quot;chatquot;>
<body>Who are you?</body>
<subject>Query</subject>
</message>
From, To
24
Tuesday, March 3, 2009
Message Stanzas
<message from=quot;madhatter@wonderland.lit/fooquot;
to=quot;alice@wonderland.litquot;
type=quot;chatquot;>
<body>Who are you?</body>
<subject>Query</subject>
</message>
From, To
Types: normal, chat, groupchat, headline, error
24
Tuesday, March 3, 2009
Message Stanzas
<message from=quot;madhatter@wonderland.lit/fooquot;
to=quot;alice@wonderland.litquot;
type=quot;chatquot;>
<body>Who are you?</body>
<subject>Query</subject>
</message>
From, To
Types: normal, chat, groupchat, headline, error
Payloads: Body, Subject
24
Tuesday, March 3, 2009
Presence Stanzas
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
Advertise network availability (online/offline)
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
Advertise network availability (online/offline)
‘Show’ Statuses: Away, Do Not Disturb,
Extended Away, Free for chat
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
Advertise network availability (online/offline)
‘Show’ Statuses: Away, Do Not Disturb,
Extended Away, Free for chat
Status messages
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
Advertise network availability (online/offline)
‘Show’ Statuses: Away, Do Not Disturb,
Extended Away, Free for chat
Status messages
Typically used for contact lists/rosters
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
Advertise network availability (online/offline)
‘Show’ Statuses: Away, Do Not Disturb,
Extended Away, Free for chat
Status messages
Typically used for contact lists/rosters
25
Tuesday, March 3, 2009
Presence Stanzas
<presence from=quot;alice@wonderland.lit/pdaquot;>
<show>xa</show>
<status>down the rabbit hole!</status>
</presence>
Advertise network availability (online/offline)
‘Show’ Statuses: Away, Do Not Disturb,
Extended Away, Free for chat
Status messages
Typically used for contact lists/rosters
Presence subscriptions
25
Tuesday, March 3, 2009
IQ Stanzas
26
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
26
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
<iq type=quot;resultquot;>
<query xmlns=quot;jabber:iq:rosterquot;>
<item jid=quot;alice@wonderland.litquot;/>
<item jid=quot;madhatter@wonderland.litquot;/>
<item jid=quot;whiterabbit@wonderland.litquot;/>
</query>
</iq>
Request/Response
Workflows, execute commands, query information
26
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
<iq type=quot;resultquot;>
<query xmlns=quot;jabber:iq:rosterquot;>
<item jid=quot;alice@wonderland.litquot;/>
<item jid=quot;madhatter@wonderland.litquot;/>
<item jid=quot;whiterabbit@wonderland.litquot;/>
</query>
</iq>
Request/Response
Workflows, execute commands, query information
Similar to HTTP GET, POST, PUT 26
Tuesday, March 3, 2009
IQ Stanzas
Sender Receiver
27
Tuesday, March 3, 2009
IQ Stanzas
IQ-get
Sender Receiver
27
Tuesday, March 3, 2009
IQ Stanzas
Sender Receiver
IQ-result
27
Tuesday, March 3, 2009
IQ Stanzas
Sender Receiver
27
Tuesday, March 3, 2009
IQ Stanzas
IQ-set
Sender Receiver
27
Tuesday, March 3, 2009
IQ Stanzas
Sender Receiver
IQ-result
27
Tuesday, March 3, 2009
IQ Stanzas
Sender Receiver
27
Tuesday, March 3, 2009
IQ Stanzas
28
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
28
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Types:
28
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Types:
get: Ask for information (HTTP GET)
28
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Types:
get: Ask for information (HTTP GET)
set: Provide information (HTTP POST/PUT)
28
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Types:
get: Ask for information (HTTP GET)
set: Provide information (HTTP POST/PUT)
result: Returns requested information / acknowledge set
28
Tuesday, March 3, 2009
IQ Stanzas
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Types:
get: Ask for information (HTTP GET)
set: Provide information (HTTP POST/PUT)
result: Returns requested information / acknowledge set
error
28
Tuesday, March 3, 2009
Extensibility
29
Tuesday, March 3, 2009
Extensibility
Any XML child element can be used as a payload
29
Tuesday, March 3, 2009
Extensibility
Any XML child element can be used as a payload
e.g. XHTML bodies, Atom feeds, XML-RPC, ...
29
Tuesday, March 3, 2009
Extensibility
Any XML child element can be used as a payload
e.g. XHTML bodies, Atom feeds, XML-RPC, ...
Namespaces to scope payloads
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
29
Tuesday, March 3, 2009
Extensibility
Any XML child element can be used as a payload
e.g. XHTML bodies, Atom feeds, XML-RPC, ...
Namespaces to scope payloads
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Extensions typically developed @ XMPP Standards
Foundation's
29
Tuesday, March 3, 2009
Extensibility
Any XML child element can be used as a payload
e.g. XHTML bodies, Atom feeds, XML-RPC, ...
Namespaces to scope payloads
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Extensions typically developed @ XMPP Standards
Foundation's
Open, developer-friendly standards process
29
Tuesday, March 3, 2009
Extensibility
Any XML child element can be used as a payload
e.g. XHTML bodies, Atom feeds, XML-RPC, ...
Namespaces to scope payloads
<iq type=quot;getquot;>
<query xmlns=quot;jabber:iq:rosterquot;/>
</iq>
Extensions typically developed @ XMPP Standards
Foundation's
Open, developer-friendly standards process
Can write your own quot;privatequot; extensions for custom
functionality
29
Tuesday, March 3, 2009
Asynchronicity
30
Tuesday, March 3, 2009
Asynchronicity
Web
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
Wait for response
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
Wait for response
Short-lived connections
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
Wait for response
Short-lived connections
Jabber
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
Wait for response
Short-lived connections
Jabber
Long lived connection
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
Wait for response
Short-lived connections
Jabber
Long lived connection
Events are sent out / come in asynchronously
30
Tuesday, March 3, 2009
Asynchronicity
Web
Send request to server
Wait for response
Short-lived connections
Jabber
Long lived connection
Events are sent out / come in asynchronously
Different mindsets!
30
Tuesday, March 3, 2009
Code Example
Tuesday, March 3, 2009
Echo bot
32
Tuesday, March 3, 2009
Echo bot
Bots
32
Tuesday, March 3, 2009
Echo bot
Bots
Unmanned clients
32
Tuesday, March 3, 2009
Echo bot
Bots
Unmanned clients
Connect to an XMPP server, and wait for commands / send
events
32
Tuesday, March 3, 2009
Echo bot
Bots
Unmanned clients
Connect to an XMPP server, and wait for commands / send
events
Echo bot
32
Tuesday, March 3, 2009
Echo bot
Bots
Unmanned clients
Connect to an XMPP server, and wait for commands / send
events
Echo bot
Echoes back every message that it receives
32
Tuesday, March 3, 2009
Tuesday, March 3, 2009
Writing the Echo Bot
34
Tuesday, March 3, 2009
Writing the Echo Bot
Select a language to work in
34
Tuesday, March 3, 2009
Writing the Echo Bot
Select a language to work in
e.g. Python
34
Tuesday, March 3, 2009
Writing the Echo Bot
Select a language to work in
e.g. Python
Select an XMPP library to do the low-level XMPP
work
34
Tuesday, March 3, 2009
Writing the Echo Bot
Select a language to work in
e.g. Python
Select an XMPP library to do the low-level XMPP
work
e.g. SleekXMPP
34
Tuesday, March 3, 2009
Writing the Echo Bot
Select a language to work in
e.g. Python
Select an XMPP library to do the low-level XMPP
work
e.g. SleekXMPP
Start coding
34
Tuesday, March 3, 2009
Multi-User Chat
Conversation with multiple users
38
Tuesday, March 3, 2009
Multi-User Chat
Conversation with multiple users
Shared roster (with presence from all participating
users)
38
Tuesday, March 3, 2009
Multi-User Chat
Conversation with multiple users
Shared roster (with presence from all participating
users)
Crowd control
38
Tuesday, March 3, 2009
Multi-User Chat
Conversation with multiple users
Shared roster (with presence from all participating
users)
Crowd control
Privacy
38
Tuesday, March 3, 2009
Multi-User Chat
Conversation with multiple users
Shared roster (with presence from all participating
users)
Crowd control
Privacy
Configurable
38
Tuesday, March 3, 2009
Multi-User Chat Configuration
39
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
Poll
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
Result
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
Poll
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
No Result
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
Poll
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
Result
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
Subscribe
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
Publish
40
Tuesday, March 3, 2009
PubSub: Polling vs PubSub
Polling PubSub
HTTP client XMPP client
Service
40
Tuesday, March 3, 2009
PubSub
41
Tuesday, March 3, 2009
PubSub
Protocol to subscribe and publish any kind of
information
41
Tuesday, March 3, 2009
PubSub
Protocol to subscribe and publish any kind of
information
Avoids needless polling for new information
41
Tuesday, March 3, 2009
PubSub
Protocol to subscribe and publish any kind of
information
Avoids needless polling for new information
Doesn’t scale with the number of users / requests
41
Tuesday, March 3, 2009
PubSub
Protocol to subscribe and publish any kind of
information
Avoids needless polling for new information
Doesn’t scale with the number of users / requests
Extensible: Payload can be any type
41
Tuesday, March 3, 2009
PubSub
Protocol to subscribe and publish any kind of
information
Avoids needless polling for new information
Doesn’t scale with the number of users / requests
Extensible: Payload can be any type
Configurable
41
Tuesday, March 3, 2009
PubSub: Publishing events
<iq from=quot;queen@wonderland.lit/croquetlawnquot;
id=quot;ma019r58quot;
to=quot;notify.wonderland.litquot;
type=quot;setquot;>
<pubsub xmlns=quot;http://jabber.org/protocol/pubsubquot;>
<publish node=quot;queenly_proclamationsquot;>
<item>
<entry xmlns=quot;http://www.w3.org/2005/Atomquot;>
<title>A new thought</title>
<summary>Off with their heads!</summary>
<link rel=quot;alternatequot; type=quot;text/htmlquot;
href=quot;http://wonderland.lit/1865/quot;/>
<id>tag:wonderland.lit,1865:entry-42</id>
<published>1865-12-13T18:30:02Z</published>
<updated>1865-12-13T18:30:02Z</updated>
</entry>
</item>
</publish>
</pubsub>
</iq> 43
Tuesday, March 3, 2009
PubSub: Receiving events
<message from=quot;notify.wonderland.litquot; to=quot;alice@wonderland.litquot;>
<body>A new thought: off with their heads!</body>
<event xmlns=quot;http://jabber.org/protocol/pubsub#eventquot;>
<items node=quot;queenly_proclamationsquot; id=quot;bl38pahu98hquot;>
<item id=quot;zi2ba967quot;>
<entry xmlns=quot;http://www.w3.org/2005/Atomquot;>
<title>A new thought</title>
<summary>Off with their heads!</summary>
<link rel=quot;alternatequot; type=quot;text/htmlquot; h
ref=quot;http://wonderland.lit/1865/quot;/>
<id>tag:wonderland.lit,1865:entry-42</id>
<published>1865-12-13T18:30:02Z</published>
<updated>1865-12-13T18:30:02Z</updated>
</entry>
</item>
</items>
</event>
</message>
44
Tuesday, March 3, 2009
Extended Presence
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
Where are you right now?
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
Where are you right now?
What are you doing?
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
Where are you right now?
What are you doing?
Used to be added to regular presence
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
Where are you right now?
What are you doing?
Used to be added to regular presence
Doesn’t scale
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
Where are you right now?
What are you doing?
Used to be added to regular presence
Doesn’t scale
‘Spams’ people with unwanted information
45
Tuesday, March 3, 2009
Extended Presence
Publish extra information about yourself
What music are you currently listening to?
Where are you right now?
What are you doing?
Used to be added to regular presence
Doesn’t scale
‘Spams’ people with unwanted information
Implemented on top of PubSub
45
Tuesday, March 3, 2009
Extended Presence
46
Tuesday, March 3, 2009
Extended presence
47
Tuesday, March 3, 2009
Jingle
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
Use XMPP (Jingle) to set up a direct connection
between points
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
Use XMPP (Jingle) to set up a direct connection
between points
Negotiate what (Audio/Video) and how (UDP, TCP) you are
going to send it
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
Use XMPP (Jingle) to set up a direct connection
between points
Negotiate what (Audio/Video) and how (UDP, TCP) you are
going to send it
Use streaming protocols (RTP,...) to stream the data
over the negotiated direct connection
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
Use XMPP (Jingle) to set up a direct connection
between points
Negotiate what (Audio/Video) and how (UDP, TCP) you are
going to send it
Use streaming protocols (RTP,...) to stream the data
over the negotiated direct connection
(Renegotiation during data session)
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
Use XMPP (Jingle) to set up a direct connection
between points
Negotiate what (Audio/Video) and how (UDP, TCP) you are
going to send it
Use streaming protocols (RTP,...) to stream the data
over the negotiated direct connection
(Renegotiation during data session)
NAT traversal using standard technologies
48
Tuesday, March 3, 2009
Jingle
Voice, Video, Multimedia, P2P
XMPP is not optimized to send data streams
Use XMPP (Jingle) to set up a direct connection
between points
Negotiate what (Audio/Video) and how (UDP, TCP) you are
going to send it
Use streaming protocols (RTP,...) to stream the data
over the negotiated direct connection
(Renegotiation during data session)
NAT traversal using standard technologies
TURN, STUN, ICE 48
Tuesday, March 3, 2009
File Transfer
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
Tiny pieces of data are sent in one stanza
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
Tiny pieces of data are sent in one stanza
Small pieces of data are sent in a set of consequent <iq/>
stanzas
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
Tiny pieces of data are sent in one stanza
Small pieces of data are sent in a set of consequent <iq/>
stanzas
Larger pieces of data are sent out of band
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
Tiny pieces of data are sent in one stanza
Small pieces of data are sent in a set of consequent <iq/>
stanzas
Larger pieces of data are sent out of band
Using SOCKS5
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
Tiny pieces of data are sent in one stanza
Small pieces of data are sent in a set of consequent <iq/>
stanzas
Larger pieces of data are sent out of band
Using SOCKS5
Using older Jingle-like protocol
49
Tuesday, March 3, 2009
File Transfer
Various ways of transferring files
Tiny pieces of data are sent in one stanza
Small pieces of data are sent in a set of consequent <iq/>
stanzas
Larger pieces of data are sent out of band
Using SOCKS5
Using older Jingle-like protocol
Being extended to use Jingle
49
Tuesday, March 3, 2009
BOSH
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
Web clients cannot keep state (open connections)
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
Web clients cannot keep state (open connections)
Bad network connectivity
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
Web clients cannot keep state (open connections)
Bad network connectivity
Bidirectional streams Over Synchronous HTTP
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
Web clients cannot keep state (open connections)
Bad network connectivity
Bidirectional streams Over Synchronous HTTP
XMPP over HTTP
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
Web clients cannot keep state (open connections)
Bad network connectivity
Bidirectional streams Over Synchronous HTTP
XMPP over HTTP
Cunning mechanism of not having to poll for new
messages
50
Tuesday, March 3, 2009
BOSH
Regular XMPP opens one long-lived TCP
connection, and keeps it up
Not always convenient
Long connections drain batteries on mobile phones
Web clients cannot keep state (open connections)
Bad network connectivity
Bidirectional streams Over Synchronous HTTP
XMPP over HTTP
Cunning mechanism of not having to poll for new
messages
Piggyback incoming messages on HTTP response
50
Tuesday, March 3, 2009
BOSH
POST /webclient HTTP/1.1
Host: bosh.wonderland.lit
Content-Type: text/xml; charset=utf-8
Content-Length: 205
<body rid=quot;90029205quot; sid=quot;3m1ts1htd1squot;
xmlns=quot;http://jabber.org/protocol/httpbindquot;>
<message to=quot;sister@realworld.litquot; xmlns=quot;jabber:clientquot;>
<body>Help, I fell down the rabbit hole!</body>
</message>
</body>
51
Tuesday, March 3, 2009
Serverless Messaging
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
Conference location with many unknown people you want to
communicate wit
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
Conference location with many unknown people you want to
communicate wit
Serverless messaging
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
Conference location with many unknown people you want to
communicate wit
Serverless messaging
Uses zero-configuration (Apple) to discover entities
on the local network
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
Conference location with many unknown people you want to
communicate wit
Serverless messaging
Uses zero-configuration (Apple) to discover entities
on the local network
mDNS, DNS-SD
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
Conference location with many unknown people you want to
communicate wit
Serverless messaging
Uses zero-configuration (Apple) to discover entities
on the local network
mDNS, DNS-SD
Open connection directly to other connection, and
send XMPP over that connection
52
Tuesday, March 3, 2009
Serverless Messaging
Sometimes, a server is not available
Remote location without internet
Conference location with many unknown people you want to
communicate wit
Serverless messaging
Uses zero-configuration (Apple) to discover entities
on the local network
mDNS, DNS-SD
Open connection directly to other connection, and
send XMPP over that connection
iChat’s Rendez-vous/Bonjour 52
Tuesday, March 3, 2009
State of the bulb
Tuesday, March 3, 2009
What is the XSF working on?
54
Tuesday, March 3, 2009
What is the XSF working on?
E2E security
54
Tuesday, March 3, 2009
What is the XSF working on?
E2E security
Whiteboarding
54
Tuesday, March 3, 2009
What is the XSF working on?
E2E security
Whiteboarding
File sharing / personal media networks
54
Tuesday, March 3, 2009
What is the XSF working on?
E2E security
Whiteboarding
File sharing / personal media networks
World domination
54
Tuesday, March 3, 2009
Conclusion
Tuesday, March 3, 2009
Join the conversation
http://xmpp.org/
mailto:jdev@jabber.org
xmpp:jdev@conference.jabber.org
[mailto:|xmpp:]stpeter@jabber.org
[mailto:|xmpp:]remko@el-tramo.be
Jabber/XMPP booth @ FOSDEM
XMPP Summit on Monday
56
Tuesday, March 3, 2009
Conclusion
57
Tuesday, March 3, 2009
Conclusion
The real-time Internet is coming
57
Tuesday, March 3, 2009
Conclusion
The real-time Internet is coming
Build competitive advantage using open
technologies
57
Tuesday, March 3, 2009
Conclusion
The real-time Internet is coming
Build competitive advantage using open
technologies
What problems can you solve with XMPP?
57
Tuesday, March 3, 2009
Conclusion
The real-time Internet is coming
Build competitive advantage using open
technologies
What problems can you solve with XMPP?
Join the conversation
57
Tuesday, March 3, 2009
Conclusion
The real-time Internet is coming
Build competitive advantage using open
technologies
What problems can you solve with XMPP?
Join the conversation
Happy Jabbering!
57
Tuesday, March 3, 2009
Conclusion
The real-time Internet is coming
Build competitive advantage using open
technologies
What problems can you solve with XMPP?
Join the conversation
Happy Jabbering!
More info inside
57
Tuesday, March 3, 2009
http://blog.xmpp.org/index.php/2009/03/xmpp-101-fosdem-2009/ 3 years ago