Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

XMPP 101

15,234 views

Published on

A fast-paced introduction to XMPP.

Published in: Technology

XMPP 101

  1. 1. XMPP 101 Remko Tronçon Peter Saint-Andre Tuesday, March 3, 2009
  2. 2. Overview Introduction XMPP Basics Example code Extensions State of the bulb Conclusion 2 Tuesday, March 3, 2009
  3. 3. Introduction Tuesday, March 3, 2009
  4. 4. About Us 4 Tuesday, March 3, 2009
  5. 5. About Us Peter: Documentation guy and specification author 4 Tuesday, March 3, 2009
  6. 6. About Us Peter: Documentation guy and specification author Remko: Developer for Psi client and other projects 4 Tuesday, March 3, 2009
  7. 7. 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
  8. 8. About You 5 Tuesday, March 3, 2009
  9. 9. About You Why are you here? 5 Tuesday, March 3, 2009
  10. 10. About You Why are you here? What do you want to build? 5 Tuesday, March 3, 2009
  11. 11. About You Why are you here? What do you want to build? What is your background? (web, client-server, ...) 5 Tuesday, March 3, 2009
  12. 12. What is XMPP? 6 Tuesday, March 3, 2009
  13. 13. What is XMPP? eXtensible Messaging and Presence Protocol 6 Tuesday, March 3, 2009
  14. 14. What is XMPP? eXtensible Messaging and Presence Protocol Jabber 6 Tuesday, March 3, 2009
  15. 15. What is XMPP? eXtensible Messaging and Presence Protocol Jabber Real time messaging system 6 Tuesday, March 3, 2009
  16. 16. What is XMPP? eXtensible Messaging and Presence Protocol Jabber Real time messaging system Routes small snippets of XML 6 Tuesday, March 3, 2009
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. 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
  21. 21. 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
  22. 22. 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
  23. 23. 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
  24. 24. What can you do with XMPP? 7 Tuesday, March 3, 2009
  25. 25. What can you do with XMPP? Instant Messaging 7 Tuesday, March 3, 2009
  26. 26. What can you do with XMPP? Real-time Social Networking 8 Tuesday, March 3, 2009
  27. 27. What can you do with XMPP? Gaming 9 Tuesday, March 3, 2009
  28. 28. What can you do with XMPP? Voice & Video 10 Tuesday, March 3, 2009
  29. 29. What can you do with XMPP? Mobile apps / Geolocation 11 Tuesday, March 3, 2009
  30. 30. What can you do with XMPP? <insert your idea here> 12 Tuesday, March 3, 2009
  31. 31. XMPP ... 13 Tuesday, March 3, 2009
  32. 32. XMPP ... ... is an open standard (RFC 3920 + 3921, XSF Extensions) 13 Tuesday, March 3, 2009
  33. 33. XMPP ... ... is an open standard (RFC 3920 + 3921, XSF Extensions) ... is decentralized (federated) 13 Tuesday, March 3, 2009
  34. 34. XMPP ... ... is an open standard (RFC 3920 + 3921, XSF Extensions) ... is decentralized (federated) ... has strong security (TLS) 13 Tuesday, March 3, 2009
  35. 35. 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
  36. 36. 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
  37. 37. What does XMPP provide? 14 Tuesday, March 3, 2009
  38. 38. What does XMPP provide? Channel encryption and authentication 14 Tuesday, March 3, 2009
  39. 39. What does XMPP provide? Channel encryption and authentication Presence and contact lists 14 Tuesday, March 3, 2009
  40. 40. What does XMPP provide? Channel encryption and authentication Presence and contact lists One-to-one and multi-party messaging 14 Tuesday, March 3, 2009
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. 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
  46. 46. History 15 Tuesday, March 3, 2009
  47. 47. History Invented by Jeremie Miller as Jabber (1998) 15 Tuesday, March 3, 2009
  48. 48. History Invented by Jeremie Miller as Jabber (1998) First server + clients + libraries (1999-2000) 15 Tuesday, March 3, 2009
  49. 49. 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
  50. 50. 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
  51. 51. 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
  52. 52. 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
  53. 53. 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
  54. 54. Basics Tuesday, March 3, 2009
  55. 55. Architecture Web architecture 17 Tuesday, March 3, 2009
  56. 56. Architecture Web architecture Browser 17 Tuesday, March 3, 2009
  57. 57. Architecture Web architecture wonderland.lit images.realworld.lit Web Server Web Server Browser 17 Tuesday, March 3, 2009
  58. 58. Architecture Web architecture wonderland.lit images.realworld.lit Web Server Web Server Browser 17 Tuesday, March 3, 2009
  59. 59. Architecture Web architecture wonderland.lit images.realworld.lit Web Server Web Server Browser 17 Tuesday, March 3, 2009
  60. 60. Architecture Web architecture wonderland.lit images.realworld.lit Web Server Web Server Browser 17 Tuesday, March 3, 2009
  61. 61. Architecture Web architecture wonderland.lit images.realworld.lit Web Server Web Server Browser 17 Tuesday, March 3, 2009
  62. 62. Architecture E-Mail architecture 18 Tuesday, March 3, 2009
  63. 63. Architecture E-Mail architecture E-Mail client E-Mail client alice@wonderland.lit sister@realworld.lit 18 Tuesday, March 3, 2009
  64. 64. 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
  65. 65. 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
  66. 66. 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
  67. 67. 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
  68. 68. 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
  69. 69. Architecture XMPP Architecture realworld.lit wonderland.lit server server XMPP client XMPP client sister@realworld.lit alice@wonderland.lit 19 Tuesday, March 3, 2009
  70. 70. Architecture XMPP Architecture realworld.lit wonderland.lit server server XMPP client XMPP client sister@realworld.lit alice@wonderland.lit 19 Tuesday, March 3, 2009
  71. 71. Architecture XMPP Architecture realworld.lit wonderland.lit server server XMPP client XMPP client sister@realworld.lit alice@wonderland.lit 19 Tuesday, March 3, 2009
  72. 72. Architecture XMPP Architecture realworld.lit wonderland.lit server server XMPP client XMPP client sister@realworld.lit alice@wonderland.lit 19 Tuesday, March 3, 2009
  73. 73. Architecture 20 Tuesday, March 3, 2009
  74. 74. Architecture Client-server 20 Tuesday, March 3, 2009
  75. 75. Architecture Client-server Client developers can focus on user experience 20 Tuesday, March 3, 2009
  76. 76. Architecture Client-server Client developers can focus on user experience Server developers can focus on relaibility & scalability 20 Tuesday, March 3, 2009
  77. 77. Architecture Client-server Client developers can focus on user experience Server developers can focus on relaibility & scalability Decentralized 20 Tuesday, March 3, 2009
  78. 78. 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
  79. 79. 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
  80. 80. 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
  81. 81. 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
  82. 82. Addresses Jabber ID (JID) 21 Tuesday, March 3, 2009
  83. 83. Addresses Jabber ID (JID) Domain wonderland.lit 21 Tuesday, March 3, 2009
  84. 84. Addresses Jabber ID (JID) User Domain alice@ wonderland.lit 21 Tuesday, March 3, 2009
  85. 85. Addresses Jabber ID (JID) User Domain alice@ wonderland.lit Bare JID 21 Tuesday, March 3, 2009
  86. 86. Addresses Jabber ID (JID) User Domain alice@ wonderland.lit 21 Tuesday, March 3, 2009
  87. 87. Addresses Jabber ID (JID) User Domain Resource alice@ wonderland.lit /TeaParty 21 Tuesday, March 3, 2009
  88. 88. Addresses Jabber ID (JID) User Domain Resource alice@ wonderland.lit /TeaParty Full JID 21 Tuesday, March 3, 2009
  89. 89. Streaming XML 22 Tuesday, March 3, 2009
  90. 90. Streaming XML <stream:stream> 22 Tuesday, March 3, 2009
  91. 91. Streaming XML <stream:stream> <presence/> 22 Tuesday, March 3, 2009
  92. 92. Streaming XML <stream:stream> <presence/> <iq type=quot;getquot;> <query xmlns=quot;jabber:iq:rosterquot;/> </iq> 22 Tuesday, March 3, 2009
  93. 93. 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> 22 Tuesday, March 3, 2009
  94. 94. 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
  95. 95. 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
  96. 96. 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
  97. 97. 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
  98. 98. Communication Primitives Stanzas: 23 Tuesday, March 3, 2009
  99. 99. Communication Primitives Stanzas: <message/> 23 Tuesday, March 3, 2009
  100. 100. Communication Primitives Stanzas: <message/> <presence/> 23 Tuesday, March 3, 2009
  101. 101. Communication Primitives Stanzas: <message/> <presence/> <iq/> 23 Tuesday, March 3, 2009
  102. 102. Message Stanzas 24 Tuesday, March 3, 2009
  103. 103. 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
  104. 104. 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
  105. 105. 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
  106. 106. 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
  107. 107. Presence Stanzas 25 Tuesday, March 3, 2009
  108. 108. Presence Stanzas <presence from=quot;alice@wonderland.lit/pdaquot;> <show>xa</show> <status>down the rabbit hole!</status> </presence> 25 Tuesday, March 3, 2009
  109. 109. 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
  110. 110. 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
  111. 111. 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
  112. 112. 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
  113. 113. 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
  114. 114. 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
  115. 115. IQ Stanzas 26 Tuesday, March 3, 2009
  116. 116. IQ Stanzas <iq type=quot;getquot;> <query xmlns=quot;jabber:iq:rosterquot;/> </iq> 26 Tuesday, March 3, 2009
  117. 117. 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> 26 Tuesday, March 3, 2009
  118. 118. 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 26 Tuesday, March 3, 2009
  119. 119. 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
  120. 120. 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
  121. 121. IQ Stanzas Sender Receiver 27 Tuesday, March 3, 2009
  122. 122. IQ Stanzas IQ-get Sender Receiver 27 Tuesday, March 3, 2009
  123. 123. IQ Stanzas Sender Receiver IQ-result 27 Tuesday, March 3, 2009
  124. 124. IQ Stanzas Sender Receiver 27 Tuesday, March 3, 2009
  125. 125. IQ Stanzas IQ-set Sender Receiver 27 Tuesday, March 3, 2009
  126. 126. IQ Stanzas Sender Receiver IQ-result 27 Tuesday, March 3, 2009
  127. 127. IQ Stanzas Sender Receiver 27 Tuesday, March 3, 2009
  128. 128. IQ Stanzas 28 Tuesday, March 3, 2009
  129. 129. IQ Stanzas <iq type=quot;getquot;> <query xmlns=quot;jabber:iq:rosterquot;/> </iq> 28 Tuesday, March 3, 2009
  130. 130. IQ Stanzas <iq type=quot;getquot;> <query xmlns=quot;jabber:iq:rosterquot;/> </iq> Types: 28 Tuesday, March 3, 2009
  131. 131. 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
  132. 132. 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
  133. 133. 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
  134. 134. 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
  135. 135. Extensibility 29 Tuesday, March 3, 2009
  136. 136. Extensibility Any XML child element can be used as a payload 29 Tuesday, March 3, 2009
  137. 137. Extensibility Any XML child element can be used as a payload e.g. XHTML bodies, Atom feeds, XML-RPC, ... 29 Tuesday, March 3, 2009
  138. 138. 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
  139. 139. 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
  140. 140. 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
  141. 141. 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
  142. 142. Asynchronicity 30 Tuesday, March 3, 2009
  143. 143. Asynchronicity Web 30 Tuesday, March 3, 2009
  144. 144. Asynchronicity Web Send request to server 30 Tuesday, March 3, 2009
  145. 145. Asynchronicity Web Send request to server Wait for response 30 Tuesday, March 3, 2009
  146. 146. Asynchronicity Web Send request to server Wait for response Short-lived connections 30 Tuesday, March 3, 2009
  147. 147. Asynchronicity Web Send request to server Wait for response Short-lived connections Jabber 30 Tuesday, March 3, 2009
  148. 148. Asynchronicity Web Send request to server Wait for response Short-lived connections Jabber Long lived connection 30 Tuesday, March 3, 2009
  149. 149. 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
  150. 150. 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
  151. 151. Code Example Tuesday, March 3, 2009
  152. 152. Echo bot 32 Tuesday, March 3, 2009
  153. 153. Echo bot Bots 32 Tuesday, March 3, 2009
  154. 154. Echo bot Bots Unmanned clients 32 Tuesday, March 3, 2009
  155. 155. Echo bot Bots Unmanned clients Connect to an XMPP server, and wait for commands / send events 32 Tuesday, March 3, 2009
  156. 156. Echo bot Bots Unmanned clients Connect to an XMPP server, and wait for commands / send events Echo bot 32 Tuesday, March 3, 2009
  157. 157. 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
  158. 158. Tuesday, March 3, 2009
  159. 159. Writing the Echo Bot 34 Tuesday, March 3, 2009
  160. 160. Writing the Echo Bot Select a language to work in 34 Tuesday, March 3, 2009
  161. 161. Writing the Echo Bot Select a language to work in e.g. Python 34 Tuesday, March 3, 2009
  162. 162. 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
  163. 163. 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
  164. 164. 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
  165. 165. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  166. 166. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  167. 167. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  168. 168. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  169. 169. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  170. 170. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  171. 171. SleekXMPP Python Echo Bot class EchoBot : def __init__(self, jid, password) : self.xmpp = sleekxmpp.ClientXMPP(jid, password) self.xmpp.add_event_handler(quot;session_startquot;, self.handleXMPPConnected) self.xmpp.add_event_handler(quot;messagequot;, self.handleIncomingMessage) def run(self) : self.xmpp.connect() self.xmpp.process(threaded=False) def handleXMPPConnected(self, event): self.xmpp.sendPresence(pstatus = quot;Send me a messagequot;) def handleIncomingMessage(self, message) : self.xmpp.sendMessage(message[quot;jidquot;], message[quot;messagequot;]) def main() : bot = EchoBot(quot;echobot@wonderland.lit/HelloWorldquot;, quot;mypassquot;) bot.run() 35 Tuesday, March 3, 2009
  172. 172. Extensions Tuesday, March 3, 2009
  173. 173. Multi-User Chat 37 Tuesday, March 3, 2009
  174. 174. Multi-User Chat 38 Tuesday, March 3, 2009
  175. 175. Multi-User Chat Conversation with multiple users 38 Tuesday, March 3, 2009
  176. 176. Multi-User Chat Conversation with multiple users Shared roster (with presence from all participating users) 38 Tuesday, March 3, 2009
  177. 177. Multi-User Chat Conversation with multiple users Shared roster (with presence from all participating users) Crowd control 38 Tuesday, March 3, 2009
  178. 178. Multi-User Chat Conversation with multiple users Shared roster (with presence from all participating users) Crowd control Privacy 38 Tuesday, March 3, 2009
  179. 179. Multi-User Chat Conversation with multiple users Shared roster (with presence from all participating users) Crowd control Privacy Configurable 38 Tuesday, March 3, 2009
  180. 180. Multi-User Chat Configuration 39 Tuesday, March 3, 2009
  181. 181. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  182. 182. PubSub: Polling vs PubSub Polling PubSub Poll HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  183. 183. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service Result 40 Tuesday, March 3, 2009
  184. 184. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  185. 185. PubSub: Polling vs PubSub Polling PubSub Poll HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  186. 186. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service No Result 40 Tuesday, March 3, 2009
  187. 187. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  188. 188. PubSub: Polling vs PubSub Polling PubSub Poll HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  189. 189. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service Result 40 Tuesday, March 3, 2009
  190. 190. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  191. 191. PubSub: Polling vs PubSub Polling PubSub Subscribe HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  192. 192. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  193. 193. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service Publish 40 Tuesday, March 3, 2009
  194. 194. PubSub: Polling vs PubSub Polling PubSub HTTP client XMPP client Service 40 Tuesday, March 3, 2009
  195. 195. PubSub 41 Tuesday, March 3, 2009
  196. 196. PubSub Protocol to subscribe and publish any kind of information 41 Tuesday, March 3, 2009
  197. 197. PubSub Protocol to subscribe and publish any kind of information Avoids needless polling for new information 41 Tuesday, March 3, 2009
  198. 198. 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
  199. 199. 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
  200. 200. 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
  201. 201. PubSub: Subscribing <iq from=quot;alice@wonderland.lit/rabbitholequot; id=quot;gh921nx3quot; to=quot;notify.wonderland.litquot; type=quot;setquot;> <pubsub xmlns=quot;http://jabber.org/protocol/pubsubquot;> <subscribe node=quot;queenly_proclamationsquot; jid=quot;alice@wonderland.litquot;/> </pubsub> </iq> 42 Tuesday, March 3, 2009
  202. 202. 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
  203. 203. 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
  204. 204. Extended Presence 45 Tuesday, March 3, 2009
  205. 205. Extended Presence Publish extra information about yourself 45 Tuesday, March 3, 2009
  206. 206. Extended Presence Publish extra information about yourself What music are you currently listening to? 45 Tuesday, March 3, 2009
  207. 207. Extended Presence Publish extra information about yourself What music are you currently listening to? Where are you right now? 45 Tuesday, March 3, 2009
  208. 208. 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
  209. 209. 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
  210. 210. 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
  211. 211. 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
  212. 212. 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
  213. 213. Extended Presence 46 Tuesday, March 3, 2009
  214. 214. Extended presence 47 Tuesday, March 3, 2009
  215. 215. Jingle 48 Tuesday, March 3, 2009
  216. 216. Jingle Voice, Video, Multimedia, P2P 48 Tuesday, March 3, 2009
  217. 217. Jingle Voice, Video, Multimedia, P2P XMPP is not optimized to send data streams 48 Tuesday, March 3, 2009
  218. 218. 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
  219. 219. 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
  220. 220. 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
  221. 221. 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
  222. 222. 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
  223. 223. 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
  224. 224. File Transfer 49 Tuesday, March 3, 2009
  225. 225. File Transfer Various ways of transferring files 49 Tuesday, March 3, 2009
  226. 226. File Transfer Various ways of transferring files Tiny pieces of data are sent in one stanza 49 Tuesday, March 3, 2009
  227. 227. 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
  228. 228. 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
  229. 229. 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
  230. 230. 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
  231. 231. 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
  232. 232. BOSH 50 Tuesday, March 3, 2009
  233. 233. BOSH Regular XMPP opens one long-lived TCP connection, and keeps it up 50 Tuesday, March 3, 2009
  234. 234. BOSH Regular XMPP opens one long-lived TCP connection, and keeps it up Not always convenient 50 Tuesday, March 3, 2009
  235. 235. 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
  236. 236. 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
  237. 237. 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
  238. 238. 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
  239. 239. 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
  240. 240. 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
  241. 241. 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
  242. 242. 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
  243. 243. Serverless Messaging 52 Tuesday, March 3, 2009
  244. 244. Serverless Messaging Sometimes, a server is not available 52 Tuesday, March 3, 2009
  245. 245. Serverless Messaging Sometimes, a server is not available Remote location without internet 52 Tuesday, March 3, 2009
  246. 246. 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
  247. 247. 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
  248. 248. 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
  249. 249. 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
  250. 250. 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
  251. 251. 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
  252. 252. State of the bulb Tuesday, March 3, 2009
  253. 253. What is the XSF working on? 54 Tuesday, March 3, 2009
  254. 254. What is the XSF working on? E2E security 54 Tuesday, March 3, 2009
  255. 255. What is the XSF working on? E2E security Whiteboarding 54 Tuesday, March 3, 2009
  256. 256. What is the XSF working on? E2E security Whiteboarding File sharing / personal media networks 54 Tuesday, March 3, 2009
  257. 257. What is the XSF working on? E2E security Whiteboarding File sharing / personal media networks World domination 54 Tuesday, March 3, 2009
  258. 258. Conclusion Tuesday, March 3, 2009
  259. 259. 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
  260. 260. Conclusion 57 Tuesday, March 3, 2009
  261. 261. Conclusion The real-time Internet is coming 57 Tuesday, March 3, 2009
  262. 262. Conclusion The real-time Internet is coming Build competitive advantage using open technologies 57 Tuesday, March 3, 2009
  263. 263. 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
  264. 264. 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
  265. 265. 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
  266. 266. 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

×